Re,
A voir
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
Dim a, b
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