Dans le code VBA qui suit, vous trouverez une fonctionnalité bien pratique: comment trier les Feuilles d'un Classeur Excel par 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) et de choisir l'ordre du tri (ascendant A -> Z ou descendant Z -> A). Cette dernière possibilité est optionnelle (par défaut, le tri ascendant est utilisé).
Commençons donc par la version basique…
1. Le code VBA de la procédure de base "Tri des feuilles Excel":
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.
Attention: le code qui suit se compose de deux parties – la procédure TrierFeuilles
et la fonction SupprimerDiacritique
– et vous devez utiliser les deux pour que le code fonctionne.
SupprimerDiacritique
est utilisée pour palier au problème qui fait que dans la table ASCII, les caractères avec accent se situent seulement après l'alphabet de base. Donc par exemple la lettre "é" se retrouve seulement après la lettre "z". Grâce à la fonction la fonction SupprimerDiacritique
, ce problème est résolu et la lettre "é" se retrouve entre "e" et "f" comme la veut la logique…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
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(SupprimerDiacritique(Worksheets(j).Name)) < UCase(SupprimerDiacritique(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 Function SupprimerDiacritique(Texte As String) 'par Excel-Malin.com (https://excel-malin.com) Dim LettreD As String Dim LettreN As String Dim TexteTemporaire As String Dim i As Long Const LettresDiacritique = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝŸàáâãäåçèéêëìíîïñòóôõöùúûüýÿ" Const LettresNormales = "AAAAAACEEEEIIIINOOOOOUUUUYYaaaaaaceeeeiiiinooooouuuuyy" TexteTemporaire = Texte For i = 1 To Len(LettresDiacritique) LettreD = Mid(LettresDiacritique, i, 1) LettreN = Mid(LettresNormales, i, 1) TexteTemporaire = Replace(TexteTemporaire, LettreD, LettreN) Next SupprimerDiacritique = TexteTemporaire End Function |
L'exemple de l'utilisation – fonction de base
Voici un exemple simple. Attention, vous aurez besoin d'avoir dans votre Module les trois parties du code VBA: la procédure TrierFeuilles
elle-même, la fonction SupprimerDiacritique
et le code qui suit.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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 |
Voilà qui est fait. simple, pratique et efficace…
2. Le code VBA 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 typeBoolean
(valeurs possibles =True
ouFalse
) qui détermine si le tri doit se faire dans l'ordre descendant. La valeur par défaut estFalse
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.
Et tout comme la version simplifiée plus haut, vous aurez également besoin de l'utiliser la fonction SupprimerDiacritique
. Il vous suffit donc de copier tout le code qui suit (et qui contient les deux parties).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
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(SupprimerDiacritique(WB.Worksheets(j).Name)) > UCase(SupprimerDiacritique(WB.Worksheets(i).Name)) Then WB.Worksheets(j).Move Before:=WB.Worksheets(i) End If Else If UCase(SupprimerDiacritique(Worksheets(j).Name)) < UCase(SupprimerDiacritique(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 Function SupprimerDiacritique(Texte As String) 'par Excel-Malin.com (https://excel-malin.com) Dim LettreD As String Dim LettreN As String Dim TexteTemporaire As String Dim i As Long Const LettresDiacritique = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝŸàáâãäåçèéêëìíîïñòóôõöùúûüýÿ" Const LettresNormales = "AAAAAACEEEEIIIINOOOOOUUUUYYaaaaaaceeeeiiiinooooouuuuyy" TexteTemporaire = Texte For i = 1 To Len(LettresDiacritique) LettreD = Mid(LettresDiacritique, i, 1) LettreN = Mid(LettresNormales, i, 1) TexteTemporaire = Replace(TexteTemporaire, LettreD, LettreN) Next SupprimerDiacritique = TexteTemporaire End Function |
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…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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 |
J'espère que vous trouverez ce code utile et qu'il va bien vous servir. Il s'agit d'une fonctionnalité très pratique également si vous avez les Feuilles aux noms "numériques" tels que des dates ou des numéros de comptes bancaires…
Pour aller plus loin en VBA et en Excel
Vous trouverez sur Excel-Malin.com d'autres articles qui pourront vous servir dans votre travail avec VBA et avec Excel. En voici quelques-uns qui pourraient vous intéresser sur le sujet de la gestion des Feuilles d'un Classeur Excel.
- Liste de toutes les fonctions disponibles en VBA
- Excel: formule pour trouver le nom de la Feuille – tout ce dont vous avez besoin…
- VBA & Excel: Vérifier si une Feuille existe
- Tutoriel VBA: ajouter une Feuille au Classeur
- Visibilité des Feuilles en Excel – tutoriel pour comprendre comment fonctionne la visibilité des Feuilles en Excel
- XLSheetUnlocker: déverrouillage de Feuilles – vous avez oublié le mot de passe pour pouvoir modifier vos Feuilles? Ceci va vous aider!
3 commentaires sur “VBA: Trier les feuilles de Classeur EXCEL par ordre alphabétique”
Cette programmation VBA fonctionne très bien, à un détail près : les lettres majuscules accentuées sont placées en fin de liste, probablement parce qu'elles correspondent à un code ASCII plus élevé (par exemple, le nom BÉDARD est classé à la suite du nom BROUSSEAU plutôt que devant). Y a-t-il moyen de résoudre ce problème ? À cet égard, la fonction « Données / Trier » dans Excel interprète le É comme un E.
Merci, et bonne journée !
Bonjour Richard,
merci pour cette remarque. Je dois avouer que je ne m'en suis même pas rendu compte…
Je vais voir s'il y a moyen de modifier le code pour qu'il tienne compte des majuscules avec accents.
Cordialement, Martin
Voilà, c'est fait. J'ai mis à jour le code pour qu'il tienne compte de votre remarque.
Cordialement, Martin