[VBA] trier les feuilles

Résolu/Fermé
andy_kaufmann Messages postés 36 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 mars 2013 - 6 août 2007 à 20:38
 Phob - 3 mai 2012 à 10:48
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
6 août 2007 à 22:18
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
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
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
Bonjour!

c'est exactement ce que je cherchais!!!
merci beaucoup
1
Ludivine50 Messages postés 114 Date d'inscription lundi 9 février 2009 Statut Membre Dernière intervention 1 février 2016 7
4 nov. 2010 à 15:38
Merci également! Très simple et avec le résultat exact que je souhaite, un code comme je les aime!
0
Excellente macro, merci à vous !
0