Trier les feuilles d'un classeur
b
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 SubJe 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)
b
Je te remercie pour ton aide bernard22
bernard22 a écrit :Bonjour
remplacer
For a = LBound(Tablo) To UBound(Tablo)
par
For a = LBound(Tablo) + 1 To UBound(Tablo)