Effectuer un tri dynamique, Excel VBA
Voici un code VBA détaillé pour effectuer un tri dynamique dans Excel, avec une explication complète.
Objectif
Ce script VBA permettra à l’utilisateur de trier dynamiquement un jeu de données en fonction d’une colonne sélectionnée. L’utilisateur choisira la colonne ainsi que l’ordre de tri (ascendant ou descendant), et la macro exécutera le tri.
Code VBA
Sub DynamicSort() Dim ws As Worksheet Dim rng As Range Dim sortCol As String Dim sortOrder As XlSortOrder Dim lastRow As Long, lastCol As Long Dim sortKey As Range Dim userChoice As String Dim userOrder As String ' Définir la feuille de calcul active Set ws = ActiveSheet ' Trouver la dernière ligne et la dernière colonne utilisées lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column ' Définir la plage de données (en excluant les en-têtes) Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)) ' Demander à l'utilisateur la colonne par laquelle trier userChoice = InputBox("Entrez la lettre de la colonne pour trier (par exemple, A, B, C) :", "Sélectionner la colonne") ' Valider la saisie de l'utilisateur If userChoice = "" Then MsgBox "Aucune colonne sélectionnée. Le tri a été annulé.", vbExclamation, "Annulé" Exit Sub End If ' Convertir la lettre de la colonne en numéro de colonne sortCol = UCase(userChoice) On Error Resume Next Dim colNum As Integer colNum = Range(sortCol & "1").Column On Error GoTo 0 ' Vérifier si la colonne est valide If colNum < 1 Or colNum > lastCol Then MsgBox "Colonne invalide sélectionnée. Veuillez choisir une colonne valide.", vbCritical, "Erreur" Exit Sub End If ' Demander à l'utilisateur l'ordre de tri userOrder = InputBox("Entrez l'ordre de tri : 'A' pour Ascendant, 'D' pour Descendant", "Sélectionner l'ordre de tri") ' Valider l'ordre de tri If UCase(userOrder) = "A" Then sortOrder = xlAscending ElseIf UCase(userOrder) = "D" Then sortOrder = xlDescending Else MsgBox "Ordre de tri invalide. Le tri a été annulé.", vbCritical, "Erreur" Exit Sub End If ' Définir la clé de tri Set sortKey = ws.Cells(1, colNum) ' Appliquer le tri rng.Sort Key1:=sortKey, Order1:=sortOrder, Header:=xlYes ' Confirmer que le tri a été effectué MsgBox "Le tri a été effectué avec succès !", vbInformation, "Terminé" End Sub
Explication Détailée
1. Définir la Feuille de Calcul et la Plage de Données
Set ws = ActiveSheet lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol))
ws
définit la feuille de calcul active.lastRow
trouve la dernière ligne non vide de la colonne A.lastCol
trouve la dernière colonne non vide de la ligne 1.rng
définit la plage de données à trier.
2. Demander à l’Utilisateur de Choisir la Colonne
userChoice = InputBox("Entrez la lettre de la colonne pour trier (par exemple, A, B, C) :", "Sélectionner la colonne")
- La fonction
InputBox
permet à l’utilisateur de saisir la lettre de la colonne. - Si l’utilisateur annule, la macro se termine.
sortCol = UCase(userChoice) On Error Resume Next Dim colNum As Integer colNum = Range(sortCol & "1").Column On Error GoTo 0
- La lettre de la colonne est convertie en majuscules pour garantir la cohérence.
- Le numéro de la colonne est récupéré en fonction de la lettre saisie.
3. Vérification de la Validité de la Colonne
If colNum < 1 Or colNum > lastCol Then MsgBox "Colonne invalide sélectionnée. Veuillez choisir une colonne valide.", vbCritical, "Erreur" Exit Sub End If
- Vérifie que la colonne sélectionnée est bien valide et fait partie de la plage de données.
4. Demander l’Ordre de Tri
userOrder = InputBox("Entrez l'ordre de tri : 'A' pour Ascendant, 'D' pour Descendant", "Sélectionner l'ordre de tri")
- Demande à l’utilisateur de spécifier l’ordre de tri (ascendant ou descendant).
If UCase(userOrder) = "A" Then sortOrder = xlAscending ElseIf UCase(userOrder) = "D" Then sortOrder = xlDescending Else MsgBox "Ordre de tri invalide. Le tri a été annulé.", vbCritical, "Erreur" Exit Sub End If
- Vérifie la validité de l’ordre de tri. Si l’utilisateur choisit un ordre invalide, la macro se termine.
5. Appliquer le Tri
Set sortKey = ws.Cells(1, colNum)
rng.Sort Key1:=sortKey, Order1:=sortOrder, Header:=xlYes
- La clé de tri est définie comme la première ligne de la colonne sélectionnée.
- Le tri est effectué avec l’ordre spécifié par l’utilisateur.
6. Confirmer la Réalisation du Tri
MsgBox "Le tri a été effectué avec succès !", vbInformation, "Terminé"
- Affiche un message pour informer l’utilisateur que le tri a été effectué avec succès.
Fonctionnalités du Code
1. Sélection Dynamique de Colonne – L’utilisateur peut choisir n’importe quelle colonne pour trier.
2. Ordre de Tri Flexible – L’utilisateur peut choisir entre un tri ascendant ou descendant.
3. Validation des Données – La macro s’assure que les entrées de l’utilisateur sont valides.
4. Gestion des Tailles de Données Variables – La plage de données est déterminée automatiquement.
5. Gestion des Erreurs – La macro évite de planter en cas d’entrée incorrecte.
Comment Utiliser Ce Code
1. Ouvrez votre classeur Excel.
2. Appuyez sur ALT + F11
pour ouvrir l’éditeur VBA.
3. Insérez un nouveau module (Insertion
→ Module
).
4. Copiez et collez le code VBA dans le module.
5. Exécutez la macro DynamicSort
.
6. Entrez la lettre de la colonne et l’ordre de tri lorsque vous êtes invité.
Cette macro VBA est idéale pour rendre le tri dynamique et convivial dans Excel.