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

  • Initiateur de la discussion Initiateur de la discussion Anna_2013
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

A

Anna_2013

Guest
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
 
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
 
Re : VBA excel trier les feuilles dans l'ordre

Oui mais cela ne marchait pas : les feuilles note sont dans le désordre et Note 10 et 12 après note 0 et 1

Merci
 
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

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

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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
15
Affichages
784
Réponses
7
Affichages
454
Réponses
4
Affichages
732
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…