Trier les onglets

Bonjour,

Existes-t-il une macro qui trie les onglets d'un fichier excel par ordre numérique croissant ?

Merci de votre aide

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

Bonjour M12,

J'ai testé et ça tourne seulement si les onglets sont tous en numérique (et exclusivement en numérique)

Serait-il possible de modifier cette macro pour qu'il puisse réaliser ce tri avec ce genre de nom : Facture 1, facture 2, etc...

D'avance merci

Re,

J'avoue que je ne comprends plus ta question

Numérique, Alphabétique

Avec mon module il te les classent depuis 0 à l'infini puis de A à Z

Si je résume, tu voudrais 0, 1 , Facture 2 , 3 , Facture 4 , etc

Voilà,voilà, je m'explique :

Avec la superbe macro que tu m'as fournis, il me classe de la façon suivante :

Facture 1, facture 10, facture 11,.............. jusqu'à facture 19

puis facture 2, facture 20, facture 21.........jusqu'à facture 29

Merci

Re,

En PJ, un classeur. Depuis la Feuille "FACTURE 1", tu as trois boutons, pour mettre les onglets en ordre aléatoire, un pour le tri Alphabétique et l'autre pour l'Alphanumérique

De mon côté, le tri alphanumérique se classe bien dans l'ordre

Bonjour M12

Pourrais-je vous confier un fichier sur lequel je souhaite adapter cette macro

Re,

Aucun soucis, sans données confidentielles

Rechercher des sujets similaires à "trier onglets"