Vba Excel - tri de worksheets

Résolu
cs_nil69
Messages postés
23
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
25 août 2005
- 8 mai 2005 à 01:09
cs_nil69
Messages postés
23
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
25 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 ?

2 réponses

jpleroisse
Messages postés
1788
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
11 mars 2006
27
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

jpleroisse
3
cs_nil69
Messages postés
23
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
25 août 2005
2
8 mai 2005 à 13:02
Merci beaucoup,

Je vais juste le modifier pour qu'il prenne un workbook en parametre de
facon à ce que l'algo soit utilisable de facon plus générale ;)
0