|
Voici une façon particulièrement simple de renvoyer la liste triée des feuilles d'un classeur. On utilise la propriété .Sorted d'un contrôle ListView, ainsi quelques lignes suffisent. Cette méthode est susceptible de fonctionner également pour toutes sortes de collections de chaînes de texte (les nombres sont triés comme du texte).
Function TriListeWs(Optional Wb As Workbook) As Collection 'Ti Dim Liste As New ListView, Ws As Worksheet, Bcle% If Wb Is Nothing Then Set Wb = ActiveWorkbook With Liste .Sorted = True For Each Ws In Wb.Worksheets .ListItems.Add Text:=Ws.Name Next Ws Set TriListeWs = New Collection For Bcle = 1 To .ListItems.Count TriListeWs.Add .ListItems(Bcle).Text Next Bcle End With End Function
Sub ListeFeuilles() Dim Feuilles As Collection 'renvoi de la liste des feuilles triées du classeur actif Set Feuilles = TriListeWs 'pour lister les feuilles d'un classeur particulier, on pourrait 'appeler la fonction ainsi : 'Set Feuilles = TriListeWs(Workbooks("NomDuClasseur")) 'Feuilles est une collection, c'est à dire qu'on peut manipuler ses éléments ' dans une boucle For Each ... In et qu'on peut en connaître le 'nombre avec sa propriété Count. 'Dim Item 'For Each Item In Feuilles ' MsgBox Item 'Next Item
'ou alors :
'Dim Bcle% 'For Bcle = 1 To Feuilles.Count ' MsgBox Feuilles(Bcle) 'Next Bcle
End Sub une évolution de la méthode précédente permet de renvoyer tout aussi simplement une liste triée sans doublons. Pour simplifier cet exemple, j'utilise des nombres (qui ne seront pas triés correctement puisqu'ils sont considérés comme du texte) mais en situation réelle, on remplacera ces nombres aléatoires par des chaînes de texte.
Function TriListe(Col As Collection) As Collection 'Ti Dim Liste As New ListView, Item, Bcle% With Liste .Sorted = True For Each Item In Col .ListItems.Add Text:=Item Next Item Set TriListe = New Collection For Bcle = 1 To .ListItems.Count TriListe.Add .ListItems(Bcle).Text Next Bcle End With End Function
Sub ListeTriee() Dim Feuilles As Collection, Bcle%, Nbre% Set Feuilles = New Collection On Error Resume Next For Bcle = 1 To 5000 Nbre = Int((5000 * Rnd) + 1) Feuilles.Add Nbre, CStr(Nbre) Next Bcle 'pour vérifier combien de doublons ont été éliminés MsgBox 5000 - Feuilles.Count & " doublons ont été éliminés sur 5000 valeurs" Set Feuilles = TriListe(Feuilles) End Sub
Date de création : 24/05/2005 - 19:00
Dernière modification : 25/05/2005 - 23:10
Catégorie : Feuille
Page lue 3456 fois
Prévisualiser la page
Imprimer la page
|
|