[VBA] trier les feuilles

Résolu
andy_kaufmann Messages postés 36 Date d'inscription   Statut Membre Dernière intervention   -  
 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

4 réponses

Utilisateur anonyme
 
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
16
PapaMike62
 
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
0
Geolap
 
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
0
anonyme
 
Bonjour!

c'est exactement ce que je cherchais!!!
merci beaucoup
1
Ludivine50 Messages postés 114 Date d'inscription   Statut Membre Dernière intervention   7
 
Merci également! Très simple et avec le résultat exact que je souhaite, un code comme je les aime!
0
Phob
 
Excellente macro, merci à vous !
0