J'ai 3 feuilles dans un fichier, mon premier onglet est ma=20
feuille principale mon deuxieme se nomme Sophie et le=20
troisieme Alain. J'arrive a mettre le nom de mon onglet=20
sur ma feuille principale ex(sophie en A11 et Alain en=20
A12) avec la formule=20
Private Sub worksheet_activate()
[a11] =3D Worksheets(14).Name
[a12] =3D Worksheets(15).Name
End Sub
Voila j'aimerais savoir si il est possible de les classer=20
par ordre alphab=E9tique sois les onglets ou sois sur ma=20
feuille principale!!!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Crel
Bonjour Nancy, une proc qui provient de l'excellentissime Excelabo.net
Private Sub Workbook_Open() Dim X As Variant Dim I As Variant For Each X 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 End Sub
Cordialement Patrick
"Nancy" a écrit dans le message de news: 03f801c3a3cb$a1a06d80$ Bonjour,
J'ai 3 feuilles dans un fichier, mon premier onglet est ma feuille principale mon deuxieme se nomme Sophie et le troisieme Alain. J'arrive a mettre le nom de mon onglet sur ma feuille principale ex(sophie en A11 et Alain en A12) avec la formule Private Sub worksheet_activate() [a11] = Worksheets(14).Name [a12] = Worksheets(15).Name End Sub
Voila j'aimerais savoir si il est possible de les classer par ordre alphabétique sois les onglets ou sois sur ma feuille principale!!!
Merci Nancy
Bonjour Nancy,
une proc qui provient de l'excellentissime Excelabo.net
Private Sub Workbook_Open()
Dim X As Variant
Dim I As Variant
For Each X 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
End Sub
Cordialement
Patrick
"Nancy" <anonymous@discussions.microsoft.com> a écrit dans le message de
news: 03f801c3a3cb$a1a06d80$a101280a@phx.gbl...
Bonjour,
J'ai 3 feuilles dans un fichier, mon premier onglet est ma
feuille principale mon deuxieme se nomme Sophie et le
troisieme Alain. J'arrive a mettre le nom de mon onglet
sur ma feuille principale ex(sophie en A11 et Alain en
A12) avec la formule
Private Sub worksheet_activate()
[a11] = Worksheets(14).Name
[a12] = Worksheets(15).Name
End Sub
Voila j'aimerais savoir si il est possible de les classer
par ordre alphabétique sois les onglets ou sois sur ma
feuille principale!!!
Bonjour Nancy, une proc qui provient de l'excellentissime Excelabo.net
Private Sub Workbook_Open() Dim X As Variant Dim I As Variant For Each X 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 End Sub
Cordialement Patrick
"Nancy" a écrit dans le message de news: 03f801c3a3cb$a1a06d80$ Bonjour,
J'ai 3 feuilles dans un fichier, mon premier onglet est ma feuille principale mon deuxieme se nomme Sophie et le troisieme Alain. J'arrive a mettre le nom de mon onglet sur ma feuille principale ex(sophie en A11 et Alain en A12) avec la formule Private Sub worksheet_activate() [a11] = Worksheets(14).Name [a12] = Worksheets(15).Name End Sub
Voila j'aimerais savoir si il est possible de les classer par ordre alphabétique sois les onglets ou sois sur ma feuille principale!!!
Merci Nancy
garnote
Bonsoir Nancy,
Voici un algorithme de tri du Dieu d'Excel, Laurent Longre.
Serge
Trier les onglets d'un classeur
Comment trier par ordre alphabétique les onglets de mon fichier ? Voilà une macro avec un algorithme de tri très rapide, triant par ordre alphanumérique les *groupes* de feuilles qui commencent par les mêmes chaînes de caractères, et opérant à l'intérieur de ces groupes un tri numérique sur les fins de noms. Si ton classeur contient les feuilles Zaza26, Zaza15, JPS69, 2000, 19, JPS49287, Zaza4 et Feuil10, elles seront triées en: 19, 2000, Feuil10, JPS69, JPS49287, Zaza4, Zaza15 et Zaza26.
Dim Arr(), Idx() As Integer Dim Elt1, Elt2, IdxTemp As Integer Dim I As Integer
Sub TriFeuilles() Dim J As Integer, NF As Integer Dim Nom() As String Dim Calc As Long NF = Sheets.Count ReDim Nom(1 To NF) ReDim Arr(1 To NF, 1 To 2) For I = 1 To NF Nom(I) = Sheets(I).Name For J = Len(Nom(I)) To 1 Step -1 If Not IsNumeric(Mid$(Nom(I), J, 1)) Then Exit For Next J If J = Len(Nom(I)) Then Arr(I, 1) = Nom(I) Else Arr(I, 1) = Left$(Nom(I), J) Arr(I, 2) = CLng(Mid$(Nom(I), J + 1)) End If Next I ReDim Idx(1 To NF) For I = 1 To UBound(Idx) Idx(I) = I Next I Tri 1, NF Erase Arr Calc = Application.Calculation Application.Calculation = xlCalculationManual Application.ScreenUpdating = False For I = 1 To NF Sheets(Nom(Idx(I))).Move Sheets(I) Next I Application.Calculation = Calc End Sub
Private Sub Tri(ByVal B1 As Integer, ByVal H1 As Integer) Dim B2 As Integer Dim H2 As Integer B2 = B1 H2 = H1 Elt1 = Arr(Idx((B1 + H1) 2), 1) Elt2 = Arr(Idx((B1 + H1) 2), 2) Do While B2 < H2 Do While B2 < H1 If Arr(Idx(B2), 1) > Elt1 Then Exit Do If Arr(Idx(B2), 1) = Elt1 Then _ If Arr(Idx(B2), 2) >= Elt2 Then Exit Do B2 = B2 + 1 Loop Do While H2 > B1 If Arr(Idx(H2), 1) < Elt1 Then Exit Do If Arr(Idx(H2), 1) = Elt1 Then _ If Arr(Idx(H2), 2) <= Elt2 Then Exit Do H2 = H2 - 1 Loop If B2 < H2 Then IdxTemp = Idx(B2) Idx(B2) = Idx(H2) Idx(H2) = IdxTemp End If If B2 <= H2 Then B2 = B2 + 1 H2 = H2 - 1 End If Loop If H2 > B1 Then Tri B1, H2 If B2 < H1 Then Tri B2, H1 End Sub
Laurent Longre
Bonsoir Nancy,
Voici un algorithme de tri du Dieu d'Excel,
Laurent Longre.
Serge
Trier les onglets d'un classeur
Comment trier par ordre alphabétique les onglets de mon fichier ?
Voilà une macro avec un algorithme de tri très rapide, triant par
ordre alphanumérique les *groupes* de feuilles qui commencent par les mêmes
chaînes de caractères, et opérant à l'intérieur de ces groupes
un tri numérique sur les fins de noms. Si ton classeur contient les
feuilles Zaza26, Zaza15, JPS69, 2000, 19, JPS49287, Zaza4 et Feuil10,
elles seront triées en: 19, 2000, Feuil10, JPS69, JPS49287, Zaza4,
Zaza15 et Zaza26.
Dim Arr(), Idx() As Integer
Dim Elt1, Elt2, IdxTemp As Integer
Dim I As Integer
Sub TriFeuilles()
Dim J As Integer, NF As Integer
Dim Nom() As String
Dim Calc As Long
NF = Sheets.Count
ReDim Nom(1 To NF)
ReDim Arr(1 To NF, 1 To 2)
For I = 1 To NF
Nom(I) = Sheets(I).Name
For J = Len(Nom(I)) To 1 Step -1
If Not IsNumeric(Mid$(Nom(I), J, 1)) Then Exit For
Next J
If J = Len(Nom(I)) Then
Arr(I, 1) = Nom(I)
Else
Arr(I, 1) = Left$(Nom(I), J)
Arr(I, 2) = CLng(Mid$(Nom(I), J + 1))
End If
Next I
ReDim Idx(1 To NF)
For I = 1 To UBound(Idx)
Idx(I) = I
Next I
Tri 1, NF
Erase Arr
Calc = Application.Calculation
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For I = 1 To NF
Sheets(Nom(Idx(I))).Move Sheets(I)
Next I
Application.Calculation = Calc
End Sub
Private Sub Tri(ByVal B1 As Integer, ByVal H1 As Integer)
Dim B2 As Integer
Dim H2 As Integer
B2 = B1
H2 = H1
Elt1 = Arr(Idx((B1 + H1) 2), 1)
Elt2 = Arr(Idx((B1 + H1) 2), 2)
Do While B2 < H2
Do While B2 < H1
If Arr(Idx(B2), 1) > Elt1 Then Exit Do
If Arr(Idx(B2), 1) = Elt1 Then _
If Arr(Idx(B2), 2) >= Elt2 Then Exit Do
B2 = B2 + 1
Loop
Do While H2 > B1
If Arr(Idx(H2), 1) < Elt1 Then Exit Do
If Arr(Idx(H2), 1) = Elt1 Then _
If Arr(Idx(H2), 2) <= Elt2 Then Exit Do
H2 = H2 - 1
Loop
If B2 < H2 Then
IdxTemp = Idx(B2)
Idx(B2) = Idx(H2)
Idx(H2) = IdxTemp
End If
If B2 <= H2 Then
B2 = B2 + 1
H2 = H2 - 1
End If
Loop
If H2 > B1 Then Tri B1, H2
If B2 < H1 Then Tri B2, H1
End Sub
Voici un algorithme de tri du Dieu d'Excel, Laurent Longre.
Serge
Trier les onglets d'un classeur
Comment trier par ordre alphabétique les onglets de mon fichier ? Voilà une macro avec un algorithme de tri très rapide, triant par ordre alphanumérique les *groupes* de feuilles qui commencent par les mêmes chaînes de caractères, et opérant à l'intérieur de ces groupes un tri numérique sur les fins de noms. Si ton classeur contient les feuilles Zaza26, Zaza15, JPS69, 2000, 19, JPS49287, Zaza4 et Feuil10, elles seront triées en: 19, 2000, Feuil10, JPS69, JPS49287, Zaza4, Zaza15 et Zaza26.
Dim Arr(), Idx() As Integer Dim Elt1, Elt2, IdxTemp As Integer Dim I As Integer
Sub TriFeuilles() Dim J As Integer, NF As Integer Dim Nom() As String Dim Calc As Long NF = Sheets.Count ReDim Nom(1 To NF) ReDim Arr(1 To NF, 1 To 2) For I = 1 To NF Nom(I) = Sheets(I).Name For J = Len(Nom(I)) To 1 Step -1 If Not IsNumeric(Mid$(Nom(I), J, 1)) Then Exit For Next J If J = Len(Nom(I)) Then Arr(I, 1) = Nom(I) Else Arr(I, 1) = Left$(Nom(I), J) Arr(I, 2) = CLng(Mid$(Nom(I), J + 1)) End If Next I ReDim Idx(1 To NF) For I = 1 To UBound(Idx) Idx(I) = I Next I Tri 1, NF Erase Arr Calc = Application.Calculation Application.Calculation = xlCalculationManual Application.ScreenUpdating = False For I = 1 To NF Sheets(Nom(Idx(I))).Move Sheets(I) Next I Application.Calculation = Calc End Sub
Private Sub Tri(ByVal B1 As Integer, ByVal H1 As Integer) Dim B2 As Integer Dim H2 As Integer B2 = B1 H2 = H1 Elt1 = Arr(Idx((B1 + H1) 2), 1) Elt2 = Arr(Idx((B1 + H1) 2), 2) Do While B2 < H2 Do While B2 < H1 If Arr(Idx(B2), 1) > Elt1 Then Exit Do If Arr(Idx(B2), 1) = Elt1 Then _ If Arr(Idx(B2), 2) >= Elt2 Then Exit Do B2 = B2 + 1 Loop Do While H2 > B1 If Arr(Idx(H2), 1) < Elt1 Then Exit Do If Arr(Idx(H2), 1) = Elt1 Then _ If Arr(Idx(H2), 2) <= Elt2 Then Exit Do H2 = H2 - 1 Loop If B2 < H2 Then IdxTemp = Idx(B2) Idx(B2) = Idx(H2) Idx(H2) = IdxTemp End If If B2 <= H2 Then B2 = B2 + 1 H2 = H2 - 1 End If Loop If H2 > B1 Then Tri B1, H2 If B2 < H1 Then Tri B2, H1 End Sub
Laurent Longre
Philippe.R
Bonsoir,
En complément ou doublon :
Tri d'onglets suivant paramètres. Avec l'aide de DenisMichon http://www.excelabo.net/xl/exemples/dma-trieronglets.zip Daniel Maher
-- Amicales Salutations
Retirer A_S_ pour répondre. XL97 / XL2002
"Crel" a écrit dans le message de news:
Bonjour Nancy, une proc qui provient de l'excellentissime Excelabo.net
Private Sub Workbook_Open() Dim X As Variant Dim I As Variant For Each X 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 End Sub
Cordialement Patrick
"Nancy" a écrit dans le message de news: 03f801c3a3cb$a1a06d80$ Bonjour,
J'ai 3 feuilles dans un fichier, mon premier onglet est ma feuille principale mon deuxieme se nomme Sophie et le troisieme Alain. J'arrive a mettre le nom de mon onglet sur ma feuille principale ex(sophie en A11 et Alain en A12) avec la formule Private Sub worksheet_activate() [a11] = Worksheets(14).Name [a12] = Worksheets(15).Name End Sub
Voila j'aimerais savoir si il est possible de les classer par ordre alphabétique sois les onglets ou sois sur ma feuille principale!!!
Merci Nancy
Bonsoir,
En complément ou doublon :
Tri d'onglets suivant paramètres. Avec l'aide de DenisMichon
http://www.excelabo.net/xl/exemples/dma-trieronglets.zip
Daniel Maher
"Crel" <nospam-pas-de-pub@club-internet.fr> a écrit dans le message de
news:elYstf9oDHA.2536@tk2msftngp13.phx.gbl...
Bonjour Nancy,
une proc qui provient de l'excellentissime Excelabo.net
Private Sub Workbook_Open()
Dim X As Variant
Dim I As Variant
For Each X 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
End Sub
Cordialement
Patrick
"Nancy" <anonymous@discussions.microsoft.com> a écrit dans le message de
news: 03f801c3a3cb$a1a06d80$a101280a@phx.gbl...
Bonjour,
J'ai 3 feuilles dans un fichier, mon premier onglet est ma
feuille principale mon deuxieme se nomme Sophie et le
troisieme Alain. J'arrive a mettre le nom de mon onglet
sur ma feuille principale ex(sophie en A11 et Alain en
A12) avec la formule
Private Sub worksheet_activate()
[a11] = Worksheets(14).Name
[a12] = Worksheets(15).Name
End Sub
Voila j'aimerais savoir si il est possible de les classer
par ordre alphabétique sois les onglets ou sois sur ma
feuille principale!!!
Tri d'onglets suivant paramètres. Avec l'aide de DenisMichon http://www.excelabo.net/xl/exemples/dma-trieronglets.zip Daniel Maher
-- Amicales Salutations
Retirer A_S_ pour répondre. XL97 / XL2002
"Crel" a écrit dans le message de news:
Bonjour Nancy, une proc qui provient de l'excellentissime Excelabo.net
Private Sub Workbook_Open() Dim X As Variant Dim I As Variant For Each X 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 End Sub
Cordialement Patrick
"Nancy" a écrit dans le message de news: 03f801c3a3cb$a1a06d80$ Bonjour,
J'ai 3 feuilles dans un fichier, mon premier onglet est ma feuille principale mon deuxieme se nomme Sophie et le troisieme Alain. J'arrive a mettre le nom de mon onglet sur ma feuille principale ex(sophie en A11 et Alain en A12) avec la formule Private Sub worksheet_activate() [a11] = Worksheets(14).Name [a12] = Worksheets(15).Name End Sub
Voila j'aimerais savoir si il est possible de les classer par ordre alphabétique sois les onglets ou sois sur ma feuille principale!!!
Merci Nancy
Denis Michon
Bonsoir Garnote,
Sur ce coup là, Tu aurais avantage à consulter la procédure élaboré par Daniel Maher.
Bien que mon nom soit associé à cette procédure, je n'y suis pour rien !
Je ne le crie pas trop fort , Misange pourrait effectuer le correctif (méprise).
Salutations!
"garnote" a écrit dans le message de news:7Ncqb.9972$ Bonsoir Nancy,
Voici un algorithme de tri du Dieu d'Excel, Laurent Longre.
Serge
Trier les onglets d'un classeur
Comment trier par ordre alphabétique les onglets de mon fichier ? Voilà une macro avec un algorithme de tri très rapide, triant par ordre alphanumérique les *groupes* de feuilles qui commencent par les mêmes chaînes de caractères, et opérant à l'intérieur de ces groupes un tri numérique sur les fins de noms. Si ton classeur contient les feuilles Zaza26, Zaza15, JPS69, 2000, 19, JPS49287, Zaza4 et Feuil10, elles seront triées en: 19, 2000, Feuil10, JPS69, JPS49287, Zaza4, Zaza15 et Zaza26.
Dim Arr(), Idx() As Integer Dim Elt1, Elt2, IdxTemp As Integer Dim I As Integer
Sub TriFeuilles() Dim J As Integer, NF As Integer Dim Nom() As String Dim Calc As Long NF = Sheets.Count ReDim Nom(1 To NF) ReDim Arr(1 To NF, 1 To 2) For I = 1 To NF Nom(I) = Sheets(I).Name For J = Len(Nom(I)) To 1 Step -1 If Not IsNumeric(Mid$(Nom(I), J, 1)) Then Exit For Next J If J = Len(Nom(I)) Then Arr(I, 1) = Nom(I) Else Arr(I, 1) = Left$(Nom(I), J) Arr(I, 2) = CLng(Mid$(Nom(I), J + 1)) End If Next I ReDim Idx(1 To NF) For I = 1 To UBound(Idx) Idx(I) = I Next I Tri 1, NF Erase Arr Calc = Application.Calculation Application.Calculation = xlCalculationManual Application.ScreenUpdating = False For I = 1 To NF Sheets(Nom(Idx(I))).Move Sheets(I) Next I Application.Calculation = Calc End Sub
Private Sub Tri(ByVal B1 As Integer, ByVal H1 As Integer) Dim B2 As Integer Dim H2 As Integer B2 = B1 H2 = H1 Elt1 = Arr(Idx((B1 + H1) 2), 1) Elt2 = Arr(Idx((B1 + H1) 2), 2) Do While B2 < H2 Do While B2 < H1 If Arr(Idx(B2), 1) > Elt1 Then Exit Do If Arr(Idx(B2), 1) = Elt1 Then _ If Arr(Idx(B2), 2) >= Elt2 Then Exit Do B2 = B2 + 1 Loop Do While H2 > B1 If Arr(Idx(H2), 1) < Elt1 Then Exit Do If Arr(Idx(H2), 1) = Elt1 Then _ If Arr(Idx(H2), 2) <= Elt2 Then Exit Do H2 = H2 - 1 Loop If B2 < H2 Then IdxTemp = Idx(B2) Idx(B2) = Idx(H2) Idx(H2) = IdxTemp End If If B2 <= H2 Then B2 = B2 + 1 H2 = H2 - 1 End If Loop If H2 > B1 Then Tri B1, H2 If B2 < H1 Then Tri B2, H1 End Sub
Laurent Longre
Bonsoir Garnote,
Sur ce coup là, Tu aurais avantage à consulter la procédure élaboré par Daniel Maher.
Bien que mon nom soit associé à cette procédure, je n'y suis pour rien !
Je ne le crie pas trop fort , Misange pourrait effectuer le correctif (méprise).
Salutations!
"garnote" <rien@absent.net> a écrit dans le message de news:7Ncqb.9972$Ng3.820@charlie.risq.qc.ca...
Bonsoir Nancy,
Voici un algorithme de tri du Dieu d'Excel,
Laurent Longre.
Serge
Trier les onglets d'un classeur
Comment trier par ordre alphabétique les onglets de mon fichier ?
Voilà une macro avec un algorithme de tri très rapide, triant par
ordre alphanumérique les *groupes* de feuilles qui commencent par les mêmes
chaînes de caractères, et opérant à l'intérieur de ces groupes
un tri numérique sur les fins de noms. Si ton classeur contient les
feuilles Zaza26, Zaza15, JPS69, 2000, 19, JPS49287, Zaza4 et Feuil10,
elles seront triées en: 19, 2000, Feuil10, JPS69, JPS49287, Zaza4,
Zaza15 et Zaza26.
Dim Arr(), Idx() As Integer
Dim Elt1, Elt2, IdxTemp As Integer
Dim I As Integer
Sub TriFeuilles()
Dim J As Integer, NF As Integer
Dim Nom() As String
Dim Calc As Long
NF = Sheets.Count
ReDim Nom(1 To NF)
ReDim Arr(1 To NF, 1 To 2)
For I = 1 To NF
Nom(I) = Sheets(I).Name
For J = Len(Nom(I)) To 1 Step -1
If Not IsNumeric(Mid$(Nom(I), J, 1)) Then Exit For
Next J
If J = Len(Nom(I)) Then
Arr(I, 1) = Nom(I)
Else
Arr(I, 1) = Left$(Nom(I), J)
Arr(I, 2) = CLng(Mid$(Nom(I), J + 1))
End If
Next I
ReDim Idx(1 To NF)
For I = 1 To UBound(Idx)
Idx(I) = I
Next I
Tri 1, NF
Erase Arr
Calc = Application.Calculation
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For I = 1 To NF
Sheets(Nom(Idx(I))).Move Sheets(I)
Next I
Application.Calculation = Calc
End Sub
Private Sub Tri(ByVal B1 As Integer, ByVal H1 As Integer)
Dim B2 As Integer
Dim H2 As Integer
B2 = B1
H2 = H1
Elt1 = Arr(Idx((B1 + H1) 2), 1)
Elt2 = Arr(Idx((B1 + H1) 2), 2)
Do While B2 < H2
Do While B2 < H1
If Arr(Idx(B2), 1) > Elt1 Then Exit Do
If Arr(Idx(B2), 1) = Elt1 Then _
If Arr(Idx(B2), 2) >= Elt2 Then Exit Do
B2 = B2 + 1
Loop
Do While H2 > B1
If Arr(Idx(H2), 1) < Elt1 Then Exit Do
If Arr(Idx(H2), 1) = Elt1 Then _
If Arr(Idx(H2), 2) <= Elt2 Then Exit Do
H2 = H2 - 1
Loop
If B2 < H2 Then
IdxTemp = Idx(B2)
Idx(B2) = Idx(H2)
Idx(H2) = IdxTemp
End If
If B2 <= H2 Then
B2 = B2 + 1
H2 = H2 - 1
End If
Loop
If H2 > B1 Then Tri B1, H2
If B2 < H1 Then Tri B2, H1
End Sub
Sur ce coup là, Tu aurais avantage à consulter la procédure élaboré par Daniel Maher.
Bien que mon nom soit associé à cette procédure, je n'y suis pour rien !
Je ne le crie pas trop fort , Misange pourrait effectuer le correctif (méprise).
Salutations!
"garnote" a écrit dans le message de news:7Ncqb.9972$ Bonsoir Nancy,
Voici un algorithme de tri du Dieu d'Excel, Laurent Longre.
Serge
Trier les onglets d'un classeur
Comment trier par ordre alphabétique les onglets de mon fichier ? Voilà une macro avec un algorithme de tri très rapide, triant par ordre alphanumérique les *groupes* de feuilles qui commencent par les mêmes chaînes de caractères, et opérant à l'intérieur de ces groupes un tri numérique sur les fins de noms. Si ton classeur contient les feuilles Zaza26, Zaza15, JPS69, 2000, 19, JPS49287, Zaza4 et Feuil10, elles seront triées en: 19, 2000, Feuil10, JPS69, JPS49287, Zaza4, Zaza15 et Zaza26.
Dim Arr(), Idx() As Integer Dim Elt1, Elt2, IdxTemp As Integer Dim I As Integer
Sub TriFeuilles() Dim J As Integer, NF As Integer Dim Nom() As String Dim Calc As Long NF = Sheets.Count ReDim Nom(1 To NF) ReDim Arr(1 To NF, 1 To 2) For I = 1 To NF Nom(I) = Sheets(I).Name For J = Len(Nom(I)) To 1 Step -1 If Not IsNumeric(Mid$(Nom(I), J, 1)) Then Exit For Next J If J = Len(Nom(I)) Then Arr(I, 1) = Nom(I) Else Arr(I, 1) = Left$(Nom(I), J) Arr(I, 2) = CLng(Mid$(Nom(I), J + 1)) End If Next I ReDim Idx(1 To NF) For I = 1 To UBound(Idx) Idx(I) = I Next I Tri 1, NF Erase Arr Calc = Application.Calculation Application.Calculation = xlCalculationManual Application.ScreenUpdating = False For I = 1 To NF Sheets(Nom(Idx(I))).Move Sheets(I) Next I Application.Calculation = Calc End Sub
Private Sub Tri(ByVal B1 As Integer, ByVal H1 As Integer) Dim B2 As Integer Dim H2 As Integer B2 = B1 H2 = H1 Elt1 = Arr(Idx((B1 + H1) 2), 1) Elt2 = Arr(Idx((B1 + H1) 2), 2) Do While B2 < H2 Do While B2 < H1 If Arr(Idx(B2), 1) > Elt1 Then Exit Do If Arr(Idx(B2), 1) = Elt1 Then _ If Arr(Idx(B2), 2) >= Elt2 Then Exit Do B2 = B2 + 1 Loop Do While H2 > B1 If Arr(Idx(H2), 1) < Elt1 Then Exit Do If Arr(Idx(H2), 1) = Elt1 Then _ If Arr(Idx(H2), 2) <= Elt2 Then Exit Do H2 = H2 - 1 Loop If B2 < H2 Then IdxTemp = Idx(B2) Idx(B2) = Idx(H2) Idx(H2) = IdxTemp End If If B2 <= H2 Then B2 = B2 + 1 H2 = H2 - 1 End If Loop If H2 > B1 Then Tri B1, H2 If B2 < H1 Then Tri B2, H1 End Sub