[VBA] trier les feuilles

Résolu
andy_kaufmann Messages postés 37 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
Configuration: Windows XP
Firefox 2.0.0.6

4 réponses

  1. 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
    1. 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
    2. 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
  2. anonyme
     
    Bonjour!

    c'est exactement ce que je cherchais!!!
    merci beaucoup
    1
  3. Ludivine50 Messages postés 118 Statut Membre 7
     
    Merci également! Très simple et avec le résultat exact que je souhaite, un code comme je les aime!
    0