Vba Excel - tri de worksheets [Résolu]

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

2 réponses

Meilleure réponse
jpleroisse 1788 Messages postés mardi 7 novembre 2000Date d'inscription 11 mars 2006 Dernière intervention - 8 mai 2005 à 02:44
3
Merci
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

Merci jpleroisse 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

cs_nil69 23 Messages postés mercredi 4 mai 2005Date d'inscription 25 août 2005 Dernière intervention - 8 mai 2005 à 13:02
0
Merci
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 ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.