Tri onglet spécial

Résolu/Fermé
nihcoc Messages postés 192 Date d'inscription dimanche 9 mars 2014 Statut Membre Dernière intervention 28 février 2023 - 3 mars 2017 à 10:53
nihcoc Messages postés 192 Date d'inscription dimanche 9 mars 2014 Statut Membre Dernière intervention 28 février 2023 - 3 mars 2017 à 17:27
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 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 3/03/2017 à 12:02
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 192 Date d'inscription dimanche 9 mars 2014 Statut Membre Dernière intervention 28 février 2023 5
3 mars 2017 à 14:30
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 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
3 mars 2017 à 14:33
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 192 Date d'inscription dimanche 9 mars 2014 Statut Membre Dernière intervention 28 février 2023 5
3 mars 2017 à 14:47
oui ou 1,2,3,4,5, ect.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
3 mars 2017 à 15:58
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 192 Date d'inscription dimanche 9 mars 2014 Statut Membre Dernière intervention 28 février 2023 5 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
3 mars 2017 à 17:27
Merci beaucoup
ça marche très bien
0