Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Est-ce que tous les onglets commencent par "Note"?
Si oui, est-ce qu'il y a seulement un espace entre "Note" et le chiffre et ce, pour tous les onglets?

Est-il possible de joindre votre classeur?
 

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

Anna_2013

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

Merci pour votre aide

Lorsque je lance la macro j'ai une erreur sur WBSSortKey2 pour la syntaxe Ref = WBSSortKey2(Split(.Execute(ar(i, 1))(0), " ")(1)

Merci par avance
 

pierrejean

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

Re

Peux-tu poster une copie de ton fichier sans les données ?
PS: As-tu d'autres feuilles que celles comportant NOTE ?
PS_b: As-tu une feuille NOTE sans chiffre derrière ?
 

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" 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
 

pierrejean

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

Re

Le système binaire n'a rien à faire ici !!
Pas forcement idiot de nommer NOTE 09 au lieu de NOTE 9
Dans quel cas le classement alphabétique ne fonctionne-t-il pas ???
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…