Mettre dans l'ordre alphanumérique les Feuilles d'un fichier Excel

Bonjour,

J'aimerai faire une macro pour mettre dans l'ordre les onglets d'un fichier excel est ce possible?

merci pour votre aide

Bonsoir

Après plusieurs recherche j'ai trouvé ceci :

Public Sub TrierFeuillesde_AZ()
    Application.ScreenUpdating = False
    Dim iSheets%, i%, j%
    iSheets = Sheets.Count
    For i = 1 To iSheets - 1
        For j = i + 1 To iSheets
            If Sheets(j).Name < Sheets(i).Name Then
                Sheets(j).Move before:=Sheets(i)
            End If
        Next j
    Next i
    Application.ScreenUpdating = True
End Sub

Bonsoir

J'aimerai choisir dans ordre de A à Z ou de Z à A dans la même macro

Bonsoir,

j'ai modifié la macro pour pouvoir faire les 2 de A à Z et de Z à A

Est il possible de simplifier la macro?

14sommaire2.xlsm (21.06 Ko)

bonjour arakis,

un essai

Sub Trier_Ascendant()
     Trier False
End Sub

Sub Trier_Descendant()
     Trier True
End Sub

Sub Trier(bDescendant As Boolean)

     Dim i, SCA, X

     Set SCA = CreateObject("system.collections.arraylist")     'créer cet arraylist
     For i = 1 To Sheets.Count
          SCA.Add LCase(Sheets(i).Name)      'ajouter les noms des feuilles (en miniscules)
     Next
     SCA.Sort                                'trier les noms (ascendant)
     If bDescendant Then SCA.Reverse         'si descendant reverser la direction
     X = SCA.toarray                         'résultat vers une matrice

     For i = 1 To UBound(X)
          Sheets(X(i)).Move after:=Sheets(X(i - 1))     'déplacer les feuilles
     Next
End Sub

Bonsoir,

je regarde çà demain la je suis sur un pc ou excel est pas installé

merci pour ton aide

Bonsoir à tous ,

  • Lancer la macro TRIER dans module1.
  • Dans le classeur joint, on peut directement lancer la macro avec le raccourci CTRL + t .
  • On a conservé le Userform1

Le code dans Userform1:

Private Sub OptionButton1_Click()
   ascendant = OptionButton1.Value: Unload Me
End Sub

Private Sub OptionButton2_Click()
   ascendant = OptionButton1.Value: Unload Me
End Sub

Le code dans Module1 :

Public ascendant As Boolean

Sub Trier()
Dim x, n&, i&, ech As Boolean, aux
   UserForm1.Show
   With ThisWorkbook
      If .Sheets.Count <= 1 Then Exit Sub  
      ReDim t(1 To .Sheets.Count)
      For Each x In .Sheets: n = n + 1: t(n) = LCase(x.Name): Next
      Do
         ech = False
         For i = 1 To n - 1
            If t(i) > t(i + 1) Then ech = True: aux = t(i): t(i) = t(i + 1): t(i + 1) = aux
         Next i
      Loop Until Not ech
      If Not ascendant Then For i = 1 To n \ 2: aux = t(i): t(i) = t(n - i + 1): t(n - i + 1) = aux: Next
      Application.ScreenUpdating = False
      For i = 1 To n: .Sheets(t(i)).Move after:=.Sheets(n): Next
   End With
End Sub

re, parce que c'est amusant, une autre méthode

Sub TrierA()
     Trier1 True
End Sub

Sub TrierD()
     Trier1 False
End Sub

Sub Trier1(bAscendant As Boolean)
     Dim Arr, i
     With ThisWorkbook
          ReDim Arr(1 To .Sheets.Count, 1 To 1)
          For i = 1 To .Sheets.Count
               Arr(i, 1) = LCase(.Sheets(i).Name)
          Next

          With Sheets.Add
               With .Range("A1").Resize(UBound(Arr))
                    .Value = Arr
                    .Sort .Range("A1"), IIf(bAscendant, xlAscending, xlDescending), Header:=xlNo
                    Arr = .Value
               End With
               Application.DisplayAlerts = False
               .Delete
               Application.DisplayAlerts = True
          End With

          For i = 2 To UBound(Arr)
               .Sheets(Arr(i, 1)).Move after:=.Sheets(Arr(i - 1, 1))
          Next
     End With
End Sub

Bonjour BsAlv ,

Pour s'amuser , en se basant sur ta dernière idée et sans feuille auxiliaire :

Sub TrierA()
     Trier1 xlAscending
End Sub

Sub TrierD()
     Trier1 xlDescending
End Sub

Sub Trier1(Order)
Dim col&, x, Arr, n&, i&, j&
   If Worksheets.Sheets.Count <= 1 Then Exit Sub
   Application.ScreenUpdating = False
   For j = 1 To Worksheets.Count
      With Worksheets(j)
         col = .UsedRange.Column + .UsedRange.Columns.Count
         If col <= Columns.Count Then
            For Each x In ThisWorkbook.Sheets: n = n + 1: .Cells(n, col) = x.Name: Next
            .Cells(1, col).Resize(n).Sort key1:=.Cells(1, col), order1:=Order, MatchCase:=False, Header:=xlNo
            Arr = .Cells(1, col).Resize(n): .Columns(col).Delete
            For i = 1 To n: Sheets(Arr(i, 1)).Move after:=Sheets(n): Next i
            Exit For
         End If
      End With
   Next j
   If j > Worksheets.Count Then MsgBox "Le tri a échoué (aucune colonne vide disponible).", vbCritical
End Sub

Bonjour,

Merci de votre aide.

La 2eme méthode de BsAlv me plait bien. J'ai un message d'erreur sur la méthode de mafraise à la ligne

If Worksheets.Sheets.Count

Message d'erreur :

Erreur de compilation

Membre de méthode ou de donnée introuvable

Bonjour Arakis ,

Quand je fais deux choses à la fois, je fais des cochoncetés . Et c'est ce qui c'est passé.

Le texte du code dans le message était incorrect mais le code dans le fichier était correct. J'ai eu la fainéantise de ne pas faire un "copier/ coller" issu du code du fichier mais de modifier directement le code dans le message et bien évidemment je me suis planté !

J'ai rectifié le code dans le corps du message. Le bon texte est :

If Sheets.Count <= 1 Then Exit Sub

Mille plus une excuses.

nota : dites moi si c'est bon maintenant...

Bonjour,

Mafraise merci pour la correction çà marche impeccable.

Je vais mettre résolu pour ce post encore un grand merci

Rechercher des sujets similaires à "mettre ordre alphanumerique feuilles fichier"