Tri onglet spécial

Résolu
Bonjour,

Peut-on par vba faire un tri des onglets de manière a ce que l'onglet 23 se retouve a la fin quand vous avez les onglets
Feuil1
Feuil2
feuil3
Feuil23
. dans les macros que j'ai trouvé la feuille 23 se trouve après tri entre la Feuil2 et la Feuil3
Merci d'avance a tous pour votre travail.
j'ai excel 2000

3 réponses

  1. Bonjour,

    Oui, parce que dans le code que vous avez, le tri doit se faire sur l'index feuille et non sur le nom de la feuille
    Ou c'est normal car pour un classement "correct", il faut feuil01 pour feuil1 etc
    Mais si vous ne voulez pas changer le nom des feuilles il faut modifier le code
    0
    1. Merci pour la réponse mais pourriez vous me renvoyer le code modifié

      End Sub
      Sub TriNomsOnglets()
      Dim I As Integer, J As Integer
      For I = 1 To Sheets.Count
      For J = 1 To I - 1
      If UCase(Sheets(I).Name) < UCase(Sheets(J).Name) Then
      Sheets(I).Move Before:=Sheets(J)
      Exit For
      End If
      Next J
      Next I
      End Sub
      merci pour tout.
      0
      1. Re,

        Nous sommes bien d'accord, les onglets auront pour nom Feuil1 etc ...d'origine quand vous ajoutez une ou plusieurs des feuillles
        0
    2. oui ou 1,2,3,4,5, ect.
      0
      1. Re,

        Oui, mais pas de melange. Fait pour les deux types de nom: Feuil1 ou 1

        Sub Tri_onglet_croissant()
            Dim Liste_N() As Long, NbO As Long, N As Long
            Dim Flg_F As Boolean, NmF As String
            
            NbO = Worksheets.Count
            ReDim Liste_N(1 To NbO)
            'Feuil ou pas dans le nom d'onglet
            If InStr(Worksheets(1).Name, "Feuil") > 0 Then
                Flg_F = True
                NmF = "Feuil"
            Else
                Flg_F = False
                NmF = ""
            End If
            'mise en tableau des noms d'onglet
            For N = 1 To NbO
                If Flg_F Then
                    Liste_N(N) = CLng(Split(Worksheets(N).Name, "Feuil")(1))
                Else
                    Liste_N(N) = CLng(Worksheets(N).Name)
                End If
            Next N
                Call ShellSort(Liste_N(), LBound(Liste_N), UBound(Liste_N))    'Proc récursive tri croissant
            'tristribution des onglets par nom numero croissant
            For N = 1 To NbO
                Worksheets(NmF & Liste_N(N)).Move After:=Sheets(Sheets.Count)
            Next N
        End Sub
        '--------------------------------
        ' Tri de Shell - Shell Sort
        '--------------------------------
        Public Sub ShellSort(t() As Long, Optional ByVal loBound As Long = -1, Optional ByVal upBound As Long = -1)
            Dim i As Long, j As Long, h As Long, v As Long
              
            If loBound = -1 Then loBound = LBound(t())
            If upBound = -1 Then upBound = UBound(t())
            h = loBound
            Do:        h = 3 * h + 1:
            Loop Until h > upBound
            Do
                h = h / 3
                For i = h + 1 To upBound
                    v = t(i): j = i
                    Do While t(j - h) > v
                        t(j) = t(j - h): j = j - h
                        If j <= h Then Exit Do
                    Loop
                    t(j) = v
                Next i
            Loop Until h = loBound
        End Sub
        0
      2. @f894009Merci beaucoup
        ça marche très bien
        0