VBA: Trier les feuilles Excel par ordre alphabétique


Dans le code VBA qui suit, vous trouverez une fonctionnalité bien pratique: comment trier les Feuilles (Sheets) d'un Classeur (Workbookpar ordre alphabétique.

Vous pouvez choisir, selon vos besoins ou selon votre niveau de maîtrise de VBA, entre deux version de cette fonctionnalité:

  • La version "simple" qui n'utilise pas de paramètres et qui trie toutes les feuilles dans le Classeur actif par ordre alphabétique ascendant (A -> Z).
  • La version plus complexe qui vous permet de choisir le Classeur à trier (si plusieurs Classeurs sont ouverts), de choisir l'ordre du tri (ascendant A -> Z ou descendant Z -> A) et enfin de choisir de trier toutes les Feuilles du Classeur ou seulement les Feuilles choisies. Cette version utilise des paramètres (voir les explications plus bas).

Commençons donc par la version basique…

Le code de la procédure de base "Tri des feuilles":

Cette procédure est tout à fait générique et indépendante. Il vous suffit de la copier/coller telle quelle dans un Module de votre Projet VBA.

Public Sub TrierFeuilles()
'par Excel-Malin.com ( https://excel-malin.com )

On Error GoTo TriageErreur
Dim j As Integer
Dim i As Integer
Dim PremiereFeuille As Integer
Dim DerniereFeuille As Integer

    PremiereFeuille = 1
    DerniereFeuille = ActiveWorkbook.Worksheets.Count
         
    For i = PremiereFeuille To DerniereFeuille
        For j = i To DerniereFeuille
                If UCase(Worksheets(j).Name) < UCase(Worksheets(i).Name) Then
                    Worksheets(j).Move Before:=Worksheets(i)
                End If
        Next j
    Next i

Exit Sub
TriageErreur:
    '... votre code en cas d'erreur ...
End Sub

L'exemple de l'utilisation – fonction de base:

Voici un exemple simple. Attention, vous aurez besoin d'avoir dans votre Module les deux codes VBA: la procédure "TrierFeuilles" elle-même et le code qui suit.

Sub ExempleTriageFeuillesBasique()
'par Excel-Malin.com ( https://excel-malin.com )

Application.ScreenUpdating = False
On Error GoTo TestErreur

 Call TrierFeuilles

Application.ScreenUpdating = True
Exit Sub

TestErreur:
MsgBox "Une erreur s'est produite..."
Application.ScreenUpdating = True
End Sub

Le code de la procédure avancée "Tri des feuilles":

La version avancée de la procédure utilise deux paramètres:

  • WB as Workbook – pour désigner le Classeur à trier (voir l'exemple d'utilisation)
  • Optional OrdreDescendant As Boolean = False – paramètre optionnel de type Boolean (valeurs possibles = True ou False) qui détermine si le tri doit se faire dans l'ordre descendant. La valeur par défaut est False ce qui signifie que si vous ne modifiez pas ce paramètre, le Classeur sera trié dans l'ordre ascendant (A -> Z).

Il est aussi possible de trier seulement les feuilles sélectionnées: si une seule Feuille est sélectionnée, alors la fonction va trier toutes les feuilles dans le Classeur. Si plusieurs Feuilles sont sélectionnées, le code triera uniquement ces feuilles.

Public Sub TrierFeuilles2(WB As Workbook, Optional OrdreDescendant As Boolean = False)
'par Excel-Malin.com ( https://excel-malin.com )

On Error GoTo TriageErreur
Dim j As Integer
Dim i As Integer
Dim PremiereFeuille As Integer
Dim DerniereFeuille As Integer

Fenetre = WB.Name
    'comptage des feuilles sélectionnées
    If Windows(Fenetre).SelectedSheets.Count = 1 Then
        PremiereFeuille = 1
        DerniereFeuille = Worksheets.Count
    Else
        With Windows(Fenetre).SelectedSheets
            For j = 2 To .Count
                If .Item(j - 1).Index <> .Item(j).Index - 1 Then
                    MsgBox "Impossible de trier des feuilles non-adjacentes."
                    Exit Sub
                End If
            Next j
            PremiereFeuille = .Item(1).Index
            DerniereFeuille = .Item(.Count).Index
        End With
    End If
     
    'triage des feuilles
    For i = PremiereFeuille To DerniereFeuille
        For j = i To DerniereFeuille
            'sélection de l'ordre de tri: Ascendant ou Descendant
            If OrdreDescendant = True Then
                If UCase(WB.Worksheets(j).Name) > UCase(WB.Worksheets(i).Name) Then
                    WB.Worksheets(j).Move Before:=WB.Worksheets(i)
                End If
            Else
                If UCase(Worksheets(j).Name) < UCase(WB.Worksheets(i).Name) Then
                    WB.Worksheets(j).Move Before:=WB.Worksheets(i)
                End If
            End If
        Next j
    Next i

Exit Sub
TriageErreur:
    '... votre code en cas d'erreur ...
End Sub

L'exemple de l'utilisation – procédure avancée (avec des paramètres)

Voici l'exemple où le classeur à trier est un argument de la procédure. Vous pouvez également voir les deux appels selon le type de triage (ascendant, descendant). Pour l'utilisation simple dans votre Projet, il suffit de mettre/enlever un des deux appels en commentaire…

Sub ExempleTriageFeuillesAvance()
'par Excel-Malin.com ( https://excel-malin.com )

Application.ScreenUpdating = False

On Error GoTo TestErreur
Dim MonClasseur As Workbook
Set MonClasseur = Application.Workbooks("test.xlsx")

    Call TrierFeuilles2(MonClasseur, False) ' --> par ordre ascendant
    'Call TrierFeuilles2(MonClasseur, True) ' --> par ordre descendant

Application.ScreenUpdating = True
Exit Sub

TestErreur:
MsgBox "Une erreur s'est produite..."
Application.ScreenUpdating = True
End Sub

Pour aller plus loin en VBA et en Excel

 

20 0



Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.