Trier les onglets par ordre "alphanumérique"

  • Initiateur de la discussion Initiateur de la discussion litelsousa
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

litelsousa

XLDnaute Occasionnel
Bonjour,

Je cherche un code me permettant de classer mes onglets par ordre numérique.

J'ai trouvé celui-ci:

Dim I As Integer, j As Integer, num As Integer, nom As String

For I = 2 To Sheets.Count
num = 0: nom = Sheets(I).Name
For j = I - 1 To 1 Step -1
If Sheets(I).Name < Sheets(j).Name Then num = j
Next j
If num > 0 Then Sheets(I).Move before:=Sheets(num)
Next I

Mon seul petit soucis, c'est que je n'ai pas réussi à faire que les lettre soient placées avant les chiffres.

(l'onglet "liste" sera mis après les onglets "2501" et "2502" et j'aimerais le contraire).

En vous remerciant de votre aide
 
Re : Trier les onglets par ordre "alphanumérique"

En fait après quelques test supplémentaire, je vois qu'il y a un autre soucis:

les onglets "10" "11" sont placés après le "1" et ainsi de suite.

Idem avec un autre code trouvé:
Sub TrierFeuilles()
Dim WS As Worksheet
Dim I As Byte
Application.ScreenUpdating = False
For Each WS In ActiveWorkbook.Sheets
For I = 2 To ActiveWorkbook.Sheets.Count
If Sheets(I - 1).Name > Sheets(I).Name Then
Sheets(I - 1).Move After:=Sheets(I)
End If
Next
Next
Application.ScreenUpdating = True
End Sub
 
Re : Trier les onglets par ordre "alphanumérique"

Bonjour Litelsouza, bonjour le forum,

Peut-être comme ça :
Code:
Sub Macro1()
Dim O As Object 'déclare la variable O (Onglets)
Dim TON() As Variant 'déclare le tableau de variables TON (Tableau des Onglet Numériques)
Dim TOA() As Variant 'déclare le tableau de variables TOA (Tableau des Onglet Alphabétiques)
Dim X As Integer 'déclare la variable X
Dim Y As Integer 'déclare la variable Y

For Each O In Sheets 'boucle ssur tous les onglets du classeur
    If IsNumeric(O.Name) = True Then 'condition : si le nom de l'onglet est numérique
        ReDim Preserve TON(X) 'redimentionne le tableau TON
        TON(X) = O.Name 'ajoute le nom de l'onglet au tableau des variables indéxées TON
        X = X + 1 'incrémente X
    Else 'sinon
        ReDim Preserve TOA(Y) 'redimentionne le tableau TOA
        TOA(Y) = O.Name 'ajoute le nom de l'onglet au tableau des variables indéxées TOA
        Y = Y + 1 'incrémente X
    End If 'fin de la condition
Next O 'prochaine onglet de la boucle
Call tri(TON, LBound(TON), UBound(TON)) 'tri alphabétique du tableau TON
Call tri(TOA, LBound(TOA), UBound(TOA)) 'tri alphabétique du tableau TOA
For i = 0 To UBound(TOA) 'boucle sur toutes les onglets du tableau TOA
    Sheets(TOA(i)).Move After:=Sheets(Sheets.Count) 'place l'onglet en dernier
Next i 'prochain onglet du tableau
For i = 0 To UBound(TON) 'boucle sur toutes les onglets du tableau TON
    Sheets(TON(i)).Move After:=Sheets(Sheets.Count) 'place l'onglet en dernier
Next i 'prochain onglet du tableau
End Sub

Sub tri(a As Variant, gauc As Integer, droi As Integer) ' Quick sort tiré du site de jacques BOISGONTIER : http://boisgontierjacques.free.fr/
Dim ref As String
Dim g As Integer
Dim d As Integer
Dim tmp As String

ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
        temp = a(g): a(g) = a(d): a(d) = temp
        g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub

[Édition]
J'ai modifié deux erreurs dans le code mais je ne pense pas que ça convienne... Tu auras aussi le 14 avant le 1...
 
Dernière édition:
Re : Trier les onglets par ordre "alphanumérique"

Bonsoir à tous

litelsousa
Essaies ceci (test OK sur Xl 2013)
Code:
Sub TriONGLETS()
Dim ws As Worksheet, i%
Dim Onglets()
ReDim Onglets(Worksheets.Count)
i = LBound(Onglets)
For Each ws In Worksheets
    Onglets(i) = ws.Name
    i = i + 1
Next ws
Tri_Bub Onglets
For i = LBound(Onglets) + 1 To UBound(Onglets)
    Worksheets(Onglets(i)).Move After:=Worksheets(Worksheets.Count)
Next i
End Sub
Code:
Private Sub Tri_Bub(tF())
Dim tmp, i, j
For i = LBound(tF) To UBound(tF)
    For j = i To UBound(tF)
        If tF(i) > tF(j) Then
        tmp = tF(i)
        tF(i) = tF(j)
        tF(j) = tmp
    End If
Next j
Next i
End Sub
 
Re : Trier les onglets par ordre "alphanumérique"

Bonsoir le fil, bonsoir le forum,

Bonjour,
Merci bien, mais ça me donne le message suivant:

Erreur de compilation: Variable non définie

à la ligne

Oui, tu dois avoir l'Option Explicit (mais je te rassure on en meut pas..) et j'ai oublié de déclarer la variable I. Rajoute n'importe où dans la partie des déclarations de variables :
Code:
Dim I As Integer

Mais le code de Staple me paraît plus efficace...
 
Re : Trier les onglets par ordre "alphanumérique"

Bonsoir Robert

Je sais pas si il est plus efficace.
Je sais juste qu'il fonctionne sur mon PC.

Mais comme litelsousa n'est pas dans les parages, je ne sais pas ce qu'il en est sur son PC et avec son fichier d'origine.
 
Re : Trier les onglets par ordre "alphanumérique"

Bonjour,

Merci bien pour votre participation.

staple1600, malheureusement , chez moi le résultat reste le même, le 3286 sera classé entre le 3 et le 4.

Robert, ça me dit toujours le même message, mais cette fois il me semble que c'es la valeur "temp" du "sub tri" qui n'est pas définie.
 
Re : Trier les onglets par ordre "alphanumérique"

Ok j'ai vu où était l'erreur...

Il était entré "Dim tmp" à la place de "Dim temp".

Malheureusement, le résultat du tri reste le même, le 3286 reste classé entre le 3 et le 4
 
Re : Trier les onglets par ordre "alphanumérique"

Bonjour litelsousa, Bonjour Robert, Salut Staple

Une proposition:
Bouton 1 Création de 40 feuilles en ordre aléatoire
Bouton 2 tri des feuilles (textes en premier)
Utilisation du Quick sort de J.B

VB:
Private Sub CommandButton2_Click() ' tri des feuilles
Dim I&, F As Worksheet, T As Variant
Dim D As Object, Dtxt As Object
Set D = CreateObject("Scripting.Dictionary")
Set Dtxt = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
For Each F In Worksheets
    If Not IsNumeric(F.Name) Then
        Dtxt(F.Name) = ""
    Else
        D(CStr(Format(F.Name, "0000000"))) = ""
    End If
Next F

T = D.Keys
Call tri(T, 0, UBound(T))
For I = LBound(T) To UBound(T)
    Sheets(CStr(Format(T(I), "0"))).Move Before:=Sheets(I + 1)
Next I

T = Dtxt.Keys
Call tri(T, 0, UBound(T))
For I = LBound(T) To UBound(T)
    Sheets(T(I)).Move Before:=Sheets(I + 1)
Next I

Me.Activate
End Sub

Cordialement
 

Pièces jointes

Dernière édition:
Re : Trier les onglets par ordre "alphanumérique"

Bonjour,
deux codes complets de Laurent Longre (tri extrêmement rapide) et de Daniel Maher
et un classeur de Daniel Maher qui les met en oeuvre
Ce lien n'existe plus
Ce lien n'existe plus
Ce lien n'existe plus


PS quick sort n'est pas une invention de JB 🙂
 
Re : Trier les onglets par ordre "alphanumérique"

Bonjour à tous,

Merci pour votre aide, les choses commence à bien tourner...

Voilà mon fichier avec qui j'ai encore 2 petit soucis:

1° Dans l'ordre de tri, si les onglets commençant par une lettre pouvaient être placés avant ceux commençant par un chiffre.

2° Tout à la fin de ces opérations, que ce soit le dernier onglet créer qui soit sélectionné. (ligne 65 du code où j'ai mis l'onglet modèle, mais comme les nouveaux onglets auront des nom "pas encore défini" je ne sais pas comment faire.)

Merci de votre aide et bonne journée
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
242
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
153
Réponses
5
Affichages
334
Réponses
10
Affichages
321
Réponses
3
Affichages
205
Réponses
8
Affichages
497
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
592
Retour