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

A voir également:

3 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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
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
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

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