Tri onglet spécial

Résolu
nihcoc Messages postés 193 Date d'inscription   Statut Membre Dernière intervention   -  
nihcoc Messages postés 193 Date d'inscription   Statut Membre Dernière intervention   -
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. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  2. nihcoc Messages postés 193 Date d'inscription   Statut Membre Dernière intervention   5
     
    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. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Nous sommes bien d'accord, les onglets auront pour nom Feuil1 etc ...d'origine quand vous ajoutez une ou plusieurs des feuillles
      0
  3. nihcoc Messages postés 193 Date d'inscription   Statut Membre Dernière intervention   5
     
    oui ou 1,2,3,4,5, ect.
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
      1. nihcoc Messages postés 193 Date d'inscription   Statut Membre Dernière intervention   5 > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
         
        Merci beaucoup
        ça marche très bien
        0