cs_nil69
Messages postés23Date d'inscriptionmercredi 4 mai 2005StatutMembreDernière intervention25 août 2005
-
8 mai 2005 à 01:09
cs_nil69
Messages postés23Date d'inscriptionmercredi 4 mai 2005StatutMembreDernière intervention25 août 2005
-
8 mai 2005 à 13:02
Bonjour,
existe-t-il une méthode prédéfinie permettant de trier alphabétiquement
les worksheets d'un workbook ou peut-on jouer avec les index peut-etre
pour les trier ?
jpleroisse
Messages postés1788Date d'inscriptionmardi 7 novembre 2000StatutMembreDernière intervention11 mars 200627 8 mai 2005 à 02:44
Bonsoir,
Voici la méthode complète permettant de trier les feuilles du classeur.
Sub TrierFeuilles()
'Ce code trie les feuilles du classeur actif
'par ordre ascendant.
Dim NomFeuilles() As String
Dim i As Integer
Dim CompteurFeuilles As Integer
Dim Item As Object
Dim AncienneActive As Object
'Aucun classeur actif
If ActiveWorkbook Is Nothing Then Exit Sub
CompteurFeuilles = ActiveWorkbook.Sheets.Count
'Vérifie si le classeur est protéger
If ActiveWorkbook.ProtectStructure Then
MsgBox ActiveWorkbook.Name & " est protéger.", vbCritical, "Impossible de trier les feuilles."
Exit Sub
End If
'Désactive Ctrl + Echap
Application.EnableCancelKey = xlDisabled
'Obtient le nombre de feuilles
CompteurFeuilles = ActiveWorkbook.Sheets.Count
'Redimentionne le tableau
ReDim NomFeuilles(1 To CompteurFeuilles)
'Stocke une référence à l'ancienne feuilles
Set AncienneActive = ActiveSheet
'Rempli le tableau avec le nom des feuilles
For i = 1 To CompteurFeuilles
NomFeuilles(i) = ActiveWorkbook.Sheets(i).Name
Next i
'Trie le tableau par ordre ascendant
Call TriPermutation(NomFeuilles)
'Désactive la mise à jour de l'écran
Application.ScreenUpdating = False
'Déplace les feuilles
For i = 1 To CompteurFeuilles
ActiveWorkbook.Sheets(NomFeuilles(i)).Move _
Before:=ActiveWorkbook.Sheets(i)
Next i
'Réactive la feuille de calcul d'origine
AncienneActive.Activate
End Sub
Sub TriPermutation(Liste() As String)
'Trie le tableau dans ordre ascendant
Dim Premier As Integer, Dernier As Integer
Dim i As Integer, j As Integer
Dim Temp As String
Premier = LBound(Liste)
Dernier = UBound(Liste)
For i = Premier To Dernier - 1
For j = i + 1 To Dernier
If Liste(i) > Liste(j) Then
Temp = Liste(j)
Liste(j) = Liste(i)
Liste(i) = Temp
End If
Next j
Next i
End Sub