Trier les feuilles Excel par ordre alphabétique


Dans le code VBA qui suit, vous trouverez une fonctionnalité bien pratique: le tri des 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 fonction:

  • 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 fonction de base "Tri des feuilles":

 

Public Function TrierFeuilles1()
'par: https://excel-malin.com

On Error GoTo FonctionErreur
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 OrdreDescendant = True Then
                If UCase(Worksheets(j).Name) > UCase(Worksheets(i).Name) Then
                    Worksheets(j).Move Before:=Worksheets(i)
                End If
            Else
                If UCase(Worksheets(j).Name) < UCase(Worksheets(i).Name) Then
                    Worksheets(j).Move Before:=Worksheets(i)
                End If
            End If
        Next j
    Next i

Exit Function
FonctionErreur:

End Function

 

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

 

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

Application.ScreenUpdating = False
On Error GoTo TestErreur

Triage = TrierFeuilles1

Application.ScreenUpdating = True
Exit Sub

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

 

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

La version avancée de la fonction 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, la fonction triera uniquement ces feuilles.

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

On Error GoTo FonctionErreur
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 Function
                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 Function
FonctionErreur:

End Function

 

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

 

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

Application.ScreenUpdating = False

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

Triage = TrierFeuilles2(MonClasseur, False) '= par ordre ascendant
'Triage = TrierFeuilles2(MonClasseur, True) '= par ordre descendant

Application.ScreenUpdating = True
Exit Sub

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

 

 

10 0



Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.