Effectuer un tri dynamique, Excel VBA

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 (InsertionModule).
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.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x