VBA excel trier les feuilles dans l'ordre

Anna_2013

XLDnaute Junior
Bonjour

Je souhaiterais développer la macro suivante : une fois que les feuilles ont été compilées dans le classeur je souhaiterais les classer par ordre croissant.
J'ai la macro suivante cependant les feuilles concernées commencent par le mot NOTE comme NOTE 0 ou NOTE 1.

Le nombre de feuilles est aléatoire.

Merci par avance pour votre aide

Sub TrierOnglets()

Dim Boucle As Integer, Compteur As Integer

For Boucle = 1 To Sheets.Count
If Sheets(Boucle).Visible = true then
For Compteur = 1 To (Boucle - 1)
If Sheets(Compteur).Visible = true then
If (UCase(Sheets(Boucle).Name) < UCase(Sheets(Compteur).Name)) Then
Sheets(Boucle).Move before:=Sheets(Compteur)
Exit For
End If
EndIf
Next Compteur
EndIf
Next Boucle
End Sub
 

Anna_2013

XLDnaute Junior
Re : VBA excel trier les feuilles dans l'ordre

j'ai repris ce programme générique.

Cependant
1. Les notes 10 et 12 sont toujours comprises entre celles 0 et 2
2. Le classement par ordre alphabétique ne fonctionne pas

Option Explicit

Sub TriFeuilles()
Dim i As Integer, ar
Dim RegExp As Object
Dim Ref As Double

Application.ScreenUpdating = False
ReDim ar(1 To Sheets.Count, 1 To 2)
For i = 1 To Sheets.Count
ar(i, 1) = ThisWorkbook.Sheets(i).Name
Next i

Set RegExp = CreateObject("VBScript.RegExp")
With RegExp
.MultiLine = False
.Global = False
.IgnoreCase = True
.Pattern = "(Note )(\d+(\.\d+)*)"

On Error Resume Next
For i = 1 To UBound(ar, 1)
If .test(ar(i, 1)) Then
Ref = WBSSortKey2(Split(.Execute(ar(i, 1))(0), " ")(1))
ar(i, 2) = .Replace(ar(i, 1), "$1" & Ref)
Else
ar(i, 2) = "ZZZZ" & ar(i, 1)
End If
Next i
End With

'Trier les feuilles
Sort2DVert ar, 2, "A"
For i = 1 To UBound(ar, 1)
Sheets(ar(i, 1)).Move before:=Sheets(i + 1)
Next i
Application.ScreenUpdating = True
End Sub



Function WBSSortKey2(v As Variant) As Double
Dim s() As String, i As Integer
s = Split(v, ".")
For i = 0 To UBound(s)
WBSSortKey2 = WBSSortKey2 + CDbl(s(i)) / 100# ^ i
Next
End Function

Public Sub Sort2DVert(avArray As Variant, iKey As Integer, sOrder As String, Optional iLow1, Optional iHigh1)
Dim iLow2 As Integer, iHigh2 As Integer, i As Integer
Dim vItem1, vItem2 As Variant

On Error GoTo PtrExit

If IsMissing(iLow1) Then iLow1 = LBound(avArray)
If IsMissing(iHigh1) Then iHigh1 = UBound(avArray)

iLow2 = iLow1: iHigh2 = iHigh1
vItem1 = avArray((iLow1 + iHigh1) \ 2, iKey)

Do While iLow2 < iHigh2
If sOrder = "A" Then
Do While avArray(iLow2, iKey) < vItem1 And iLow2 < iHigh1: iLow2 = iLow2 + 1: Loop
Do While avArray(iHigh2, iKey) > vItem1 And iHigh2 > iLow1: iHigh2 = iHigh2 - 1: Loop
Else
Do While avArray(iLow2, iKey) > vItem1 And iLow2 < iHigh1: iLow2 = iLow2 + 1: Loop
Do While avArray(iHigh2, iKey) < vItem1 And iHigh2 > iLow1: iHigh2 = iHigh2 - 1: Loop
End If
If iLow2 < iHigh2 Then
For i = LBound(avArray, 2) To UBound(avArray, 2)
vItem2 = avArray(iLow2, i)
avArray(iLow2, i) = avArray(iHigh2, i)
avArray(iHigh2, i) = vItem2
Next
End If
If iLow2 <= iHigh2 Then
iLow2 = iLow2 + 1
iHigh2 = iHigh2 - 1
End If
Loop

If iHigh2 > iLow1 Then Sort2DVert avArray, iKey, sOrder, iLow1, iHigh2
If iLow2 < iHigh1 Then Sort2DVert avArray, iKey, sOrder, iLow2, iHigh1

PtrExit:
End Sub
 

Grand Chaman Excel

XLDnaute Impliqué
Re : VBA excel trier les feuilles dans l'ordre

Bonjour à tous,

1. Les notes 10 et 12 sont toujours comprises entre celles 0 et 2
2. Le classement par ordre alphabétique ne fonctionne pas

Dans le fichier de test, il n'y avait pas d'onglet nommé "NOTE 10" et "NOTE 12" ?? Est-ce une autre différence?
Est-ce que tous les onglets sont écrits de la même façon (NOTE en majuscule) ?

J'ai fait une petite correction à la macro pour régler un problème dans le tri.
Pouvez-vous tester le fichier joint?

Merci.
 

Pièces jointes

  • Copie de test vba1 modif macro tri (1).xlsm
    286.4 KB · Affichages: 46

pierrejean

XLDnaute Barbatruc
Re : VBA excel trier les feuilles dans l'ordre

Re

On s'acharne on s'acharne !!!
Une autre version avec la complicité d'une feuille supplémentaire
A tester également
Et toujours sans garantie de l'apparition de feuilles nommée de manière disons 'exotique'

Nb: les 13 Old (2) etc sont assez vicieux !!!
 

Pièces jointes

  • test vba1 modif macro tri.xlsm
    297.1 KB · Affichages: 46
  • test vba1 modif macro tri.xlsm
    297.1 KB · Affichages: 44
  • test vba1 modif macro tri.xlsm
    297.1 KB · Affichages: 36

Anna_2013

XLDnaute Junior
Re : VBA excel trier les feuilles dans l'ordre

Bonsoir
Merci pour votre aide à tous les 2

Voici le fichier avec tous les onglets sans données comprenant les NOTE 10 et 12 incluant la macro de Chaman.
Les onglets ne sont pas mis apres la note 9

Merci
 

DoubleZero

XLDnaute Barbatruc
Re : VBA excel trier les feuilles dans l'ordre

Bonjour, le Fil, le Forum,

Je n'ai pas suivi la totalité des messages...

Toutefois, si l'ajout d'un onglet "Sommaire" n'est pas un obstacle, une autre suggestion en pièce jointe.

A bientôt :)
 

Pièces jointes

  • 00 - Anna_2013 - Onglets trier.xls
    71 KB · Affichages: 53

pierrejean

XLDnaute Barbatruc
Re : VBA excel trier les feuilles dans l'ordre

Re

Salut DoubleZero

Je te propose une petite modification pour le contrôle de validité de la liste :

Code:
 If Range("aa1") <> Sheets.Count * 2 Then

au lieu de

Code:
 If Range("aa1") Mod 2 = 1 Then
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote