[VBA] trier les feuilles
Résolu
andy_kaufmann
Messages postés
37
Date d'inscription
Statut
Membre
Dernière intervention
-
Phob -
Phob -
bonjour,
comment peut on trier automatiquement les feuilles d'un classeur dans l'ordre alphabetique?
on est obligé de passer par une comparaison de nom de feuille ou existe-t-il une fonction plus élégante?
merci
comment peut on trier automatiquement les feuilles d'un classeur dans l'ordre alphabetique?
on est obligé de passer par une comparaison de nom de feuille ou existe-t-il une fonction plus élégante?
merci
Configuration: Windows XP Firefox 2.0.0.6
4 réponses
-
Bonjour,
Rouler cette macro !
Sub TrierOnglets() Dim Boucle As Integer, Compteur As Integer For Boucle = 1 To Sheets.Count For Compteur = 1 To (Boucle - 1) If (UCase(Sheets(Boucle).Name) < UCase(Sheets(Compteur).Name)) Then Sheets(Boucle).Move before:=Sheets(Compteur) Exit For End If Next Compteur Next Boucle End Sub '
Lupin-
Une petite modif, si votre classeur contient des feuilles cachées ces feuilles ne sont pas déplaçables par la méthode Move. Un petit test sur la propriété Visible de la feuille peut évite un plantage lorsque ce cas de figure se présente :
Sub TrierOnglets() Dim Boucle As Integer, Compteur As Integer For Boucle = 1 To Sheets.Count If Sheets(Boucle).Visible = true then For Compteur = 1 To (Boucle - 1) If Sheets(Compteur).Visible = true then If (UCase(Sheets(Boucle).Name) < UCase(Sheets(Compteur).Name)) Then Sheets(Boucle).Move before:=Sheets(Compteur) Exit For End If EndIf Next Compteur EndIf Next Boucle End Sub -
Un petit plus encore si vous voulez comme moi trier les onglets cachés au lieu de les ignorer :
Sub TrierOnglets() Dim Boucle As Integer, Compteur As Integer Dim list_Onglet() As String 'Enregistre le statut visible des onglets dans un tableau 2D ReDim Preserve list_Onglet(1 To Sheets.Count, 1) As String For Onglet = 1 To Sheets.Count list_Onglet(Onglet, 0) = Sheets(Onglet).Name list_Onglet(Onglet, 1) = Sheets(Onglet).Visible Next Onglet 'Trie les onglets For Boucle = 1 To Sheets.Count If Sheets(Boucle).Visible = False Then Sheets(Boucle).Visible = True For Compteur = 1 To (Boucle - 1) If (UCase(Sheets(Boucle).Name) < UCase(Sheets(Compteur).Name)) Then Sheets(Boucle).Move before:=Sheets(Compteur) Exit For End If Next Compteur Next Boucle 'Réattribue le statut initial de visibilité des onglets For Onglet = 1 To UBound(list_Onglet) If list_Onglet(Onglet, 1) = 0 Then Sheets(list_Onglet(Onglet, 0)).Visible = False End If Next Onglet End Sub
-
-
-
Merci également! Très simple et avec le résultat exact que je souhaite, un code comme je les aime!
-