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))
wsdéfinit la feuille de calcul active.lastRowtrouve la dernière ligne non vide de la colonne A.lastColtrouve la dernière colonne non vide de la ligne 1.rngdé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
InputBoxpermet à 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.