Trier les feuilles d'un classeur

Bonjour tout le monde,

J'utilise un macro dans mon classeur qui me trie les feuilles par ordre.

Je souhaiterais le modifier pour qu'il garde toujours la feuille (Home) à la première place puis me trier les autres avec le bon ordre.

Pourriez-vous m'aider svp?

Voici le code:

Option Base 1
Sub ClassementAlphaNumerique()
Application.ScreenUpdating = False

Dim sh As Worksheet, aa As Worksheet, bb As Worksheet
Dim sn As String, zz As String
Dim nbS As Integer, d As Integer
Dim c As Byte
Dim Tablo() As Variant

nbS = Sheets.Count
ReDim Tablo(nbS, 2)

'Split du nom de l'onglet
For Each sh In Worksheets
    sn = sh.Name
    zz = Mid(sn, Len(sn), 1)
    Do While IsNumeric(zz) 'boucle à partir du dernier caractère
        c = c + 1
        If c = Len(sn) Then Exit Do 's'il n'existe pas de valeur alphabétique
        zz = Mid(sn, Len(sn) - c, 1)
    Loop
    d = d + 1
    Tablo(d, 1) = Mid(sn, 1, Len(sn) - c) 'affectation de la partie alphabétique
    Tablo(d, 2) = (Mid(sn, Len(sn) - c + 1, Len(sn))) 'affectation de la partie numérique
    c = 0
Next sh

For a = LBound(Tablo) To UBound(Tablo)
    Set aa = Sheets(Tablo(a, 1) & Tablo(a, 2)) 'reconstitution du nom de l'onglet à partir des valeurs du tablo - Référence
    For b = a + 1 To UBound(Tablo)
        Set bb = Sheets(Tablo(b, 1) & Tablo(b, 2)) 'Cible

        If UCase(Tablo(a, 1)) > UCase(Tablo(b, 1)) Then 'classement des onglets de valeurs alphabétiques différentes, exp : AA1 et BBC

            routine Tablo(a, 1), Tablo(a, 2), Tablo(b, 1), Tablo(b, 2), aa, bb, b

        ElseIf UCase(Tablo(a, 1)) = UCase(Tablo(b, 1)) _
        And Val(Tablo(a, 2)) = Val(Tablo(b, 2)) _
        And Len(Tablo(a, 2)) < Len(Tablo(b, 2)) Then 'classement des onglets de même valeur numérique mais de formats différents, exp : 1 et 01

            routine Tablo(a, 1), Tablo(a, 2), Tablo(b, 1), Tablo(b, 2), aa, bb, b

        ElseIf UCase(Tablo(a, 1)) = UCase(Tablo(b, 1)) _
        And Val(Tablo(a, 2)) > Val(Tablo(b, 2)) Then 'classement des onglets de valeur même valeur alphabétique mais de valeurs numériques différentes,exp : AA1 et AA8

            routine Tablo(a, 1), Tablo(a, 2), Tablo(b, 1), Tablo(b, 2), aa, bb, b
        End If
    Next b
Next a

End Sub

Sub routine(ta1, ta2, tb1, tb2, aa, bb, b)

'tri du Tablo
Temp1 = ta1
Temp2 = ta2
ta1 = tb1
ta2 = tb2
tb1 = Temp1
tb2 = Temp2

'déplacement des onglets et réaffectation des variable aa et bb
bb.Move before:=aa
Set aa = bb

Set bb = Sheets(tb1 & tb2)
bb.Move after:=Sheets(b) 'l'onglet Référence initial prend la place d'onglet Cible afin que l'ordre des onglets soit synchro avec les infos du tablo
End Sub

Je vous remercie par avance.

Bien cordialement.

Sans toucher la macro, essaye d'appeler ta feuille "1 Home".

Bonjour

remplacer

For a = LBound(Tablo) To UBound(Tablo)

par

For a = LBound(Tablo) + 1 To UBound(Tablo)

Je te remercie pour ton aide bernard22 ça marche.

bernard22 a écrit :

Bonjour

remplacer

For a = LBound(Tablo) To UBound(Tablo)

par

For a = LBound(Tablo) + 1 To UBound(Tablo)

Rechercher des sujets similaires à "trier feuilles classeur"