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
 

Grand Chaman Excel

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

Mmmm ok je vois.
C'est plus compliqué que la demande initiale.
Les noms n'ont pas tous le même format. Normal que la macro ne fonctionne pas.

"Note 0 XXXXX" (un seul chiffre + espace)
"Note 3.2 XXX" (un niveau + espace)
"Note 3.4.2 XXXX" (deux niveau + espace)
"Note 4.4-XXXXX" (un niveau + tiret)

Je vais y penser...
 

Grand Chaman Excel

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

Bonsoir,
Alors voici une solution qui semble fonctionner malgré les différents combinaisons de noms d'onglets.
Les feuilles qui ne commencent pas par "Note" sont placées à la fin.

Voici la macro principale. Voir dans le fichier joint pour les 2 autres macros.

VB:
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

A+
 

Pièces jointes

  • Copie de test vba1 modif macro tri.xlsm
    299.5 KB · Affichages: 68

pierrejean

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

Re

@ Anna Vois si cela te convient (macro trifeuilles())
@ Grand Chaman J'ai omis de te saluer , toutes mes excuses
 

Pièces jointes

  • test vba1 modif macro tri.xlsm
    296.1 KB · Affichages: 52
  • test vba1 modif macro tri.xlsm
    296.1 KB · Affichages: 55
  • test vba1 modif macro tri.xlsm
    296.1 KB · Affichages: 53

Grand Chaman Excel

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

Bonjour pierrejean,
Ta solution est beaucoup simple que la mienne, toutefois si les onglets doivent être triées en ordre alphabétique aussi (après les numéros), ça ne semble pas fonctionner.

À voir ce que Anne a besoin au final.

Exemple :
NOTE 4.0 Tableau new (30 juin)
NOTE 4.0 Résultat financier

Ceci dit, ça m'aura permis de "m'amuser" :confused: un peu ;) avec les expressions régulières.

A+
 

Anna_2013

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

Bonjour
J'ai essayé de lancer la macro cependant j'ai une erreur d'exécution à cette ligne
If Right("00000" & Split(Sheets(i).Name, " ")(1), 5) > Right("00000" & Split(Sheets(j).Name, " ")(1), 5) Then
Par ailleurs comme indiqué par Grand Chaman Excel je souhaiterais qu'il y ait un ordre également alphabétique
Exemple :
NOTE 4.0 Tableau new (30 juin)
NOTE 4.0 Résultat financier
Pouvez vous svp m'aider à la modifier?
Merci par avance pour votre aide,
 

pierrejean

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

Re

Pour le fun !! (les feuilles NOTE sont classées en priorité les autres ensuite mais également classées)
Mais sans garantie concernant les futurs ajouts de feuilles nommées 'artistiquement'
 

Pièces jointes

  • test vba1 modif macro tri.xlsm
    296.5 KB · Affichages: 53
  • test vba1 modif macro tri.xlsm
    296.5 KB · Affichages: 54
  • test vba1 modif macro tri.xlsm
    296.5 KB · Affichages: 57

Anna_2013

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

Un grand merci pour votre aide.
Cependant les feuilles NOTE 10 et 12 ne sont pas classées après la NOTE 9.

Le système binaire ne reconnait pas les dizaines. Comment puis je svp faire pour solutionner ce point?

Merci
 

Anna_2013

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

Bonjour
Je n'arrive pas à les classer dans l'ordre numérique et alphabétique :
1. Les notes 10 et 12 sont toujours comprises entre celles 0 et 2
2. Le classement par ordre alphabétique ne fonctionne pas :(
 

Discussions similaires

Statistiques des forums

Discussions
312 330
Messages
2 087 347
Membres
103 526
dernier inscrit
HEC