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

Bonjour,

j'ai essayé ce code cependant le lien pour changer le nom de la feuille ne fontionne plus.
La macro ne me permet pas de trier les feuilles du fichier excel.

Toutes les feuilles commencent par le mot NOTE et sont suivies d'un numéro avec ou sans espace du type : NOTE1 ou NOTE 0.

Merci par avance
 

pierrejean

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

Bonjour Anna_2013

Salut DoubleZero

A tester:

Code:
Sub trifeuilles()
x = 1
num = CInt(Replace(Sheets(1).Name, "NOTE", ""))
While x < Sheets.Count + 1
 For n = x To Sheets.Count
   If CInt(Replace(Sheets(n).Name, "NOTE", "")) > num Then
     num = CInt(Replace(Sheets(n).Name, "NOTE", ""))
   End If
 Next
 Sheets("NOTE" & num).Move before:=Sheets(1)
 x = x + 1
num = 0
Wend
End Sub
 

Anna_2013

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

Bonjour
J'ai essayé cette syntaxe mais rien ne se passe quand je l'exécute.
Par ailleurs je ne parviens pas à classer les onglets NOTE 10 11 et 12 après l'onglet 9 car vba les considère comme des onglets 1

Merci par avance
 

Grand Chaman Excel

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

Bonjour à tous,

À tester :
VB:
Sub TriFeuilles()
   Dim i As Integer, j As Integer
   
   For i = 1 To Sheets.Count
      For j = i To Sheets.Count
         If Right("00000" & Split(Sheets(i).Name, " ")(1), 5) > Right("00000" & Split(Sheets(j).Name, " ")(1), 5) Then
            Sheets(j).Move before:=Sheets(i)
         End If
      Next j
   Next i
End Sub
 

Anna_2013

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

Le message suivant apparaît quand je lance cette macro l'indice n'appartient pas à la sélection.
Mes onglets sont nommés NOTE puis suivi d'un espace et d'un chiffre comme NOTE 1, NOTE 2 ect....
 

Anna_2013

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

j'utilise cette macro mais elle me met les onglets NOTE 11 et NOTE 12 entre les onglets NOTE 0 et NOTE 2. Je souhaiterai les mettres après l'onglet NOTE 9

Merci par avance

Sub TriChaqueFeuilles()
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
 

pierrejean

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

Re

Il eut été bien de parler de cet espace depuis le debut !!!

A tester:

Code:
Sub trifeuilles()
x = 1
num = CInt(Replace(Sheets(1).Name, "NOTE ", ""))
While x < Sheets.Count + 1
 For n = x To Sheets.Count
   If CInt(Replace(Sheets(n).Name, "NOTE ", "")) > num Then
     num = CInt(Replace(Sheets(n).Name, "NOTE ", ""))
   End If
 Next
 Sheets("NOTE " & num).Move before:=Sheets(1)
 x = x + 1
num = 0
Wend
End Sub
 

Pièces jointes

  • Anna.xlsm
    16.8 KB · Affichages: 84
Dernière édition:

Grand Chaman Excel

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

Je n'ai pas de message d'erreur quand je teste.
Néanmoins, voici le code avec une petite correction :

VB:
Sub TriFeuilles_AvecNumero()
   Dim i As Integer, j As Integer
   
   For i = 1 To Sheets.Count - 1
      For j = i + 1 To Sheets.Count
         If Right("00000" & Split(Sheets(i).Name, " ")(1), 5) > Right("00000" & Split(Sheets(j).Name, " ")(1), 5) Then
            Sheets(j).Move before:=Sheets(i)
         End If
      Next j
   Next i
End Sub

A+
 

Anna_2013

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

Bonjour

Le code utilisé ne fonctionne pas j'ai un message d'erreur indiquant une incompatibilité sur cette ligne
If CInt(Replace(Sheets(n).Name, "NOTE ", "")) > num Then

Merci pour votre aide

Sub trifeuilles()
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
ChDrive ThisWorkbook.path: ChDir ThisWorkbook.path
FileName = Dir("*.xlsx", vbNormal)
X = 1
num = CInt(Replace(Sheets(1).Name, "NOTE ", ""))
While X < Sheets.Count + 1
For n = X To Sheets.Count
If CInt(Replace(Sheets(n).Name, "NOTE ", "")) > num Then
num = CInt(Replace(Sheets(n).Name, "NOTE ", ""))
End If
Next
Sheets("NOTE " & num).Move before:=Sheets(1)
X = X + 1
num = 0
Wend
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 194
Messages
2 086 069
Membres
103 110
dernier inscrit
Privé