Préambule
Que ce soit pour effectuer une sélection simple ou multiple, une copie, un transfert, il est fréquent que nous ayons besoin d'obtenir la liste des feuilles d'un classeur quelconque dont le nom.
- commence par
- se termine par
- contient
- et évidemment égal à
Il y a quelques années, j'ai écrit une fonction générique qui renvoie la liste des feuilles d'un classeur suivant critère. C'est cette fonction que je publie et commente dans ce billet.
Code de la procédure
La fonction générique nommée GetSheetList renvoie la liste des feuilles dont le nom (propriété Name ou CodeName) répond au critère (Argument Name de la fonction)
Tous les arguments sont optionnels. Si aucun argument n'est utilisé la fonction renvoie la liste de toutes feuilles (propriété CodeName) du classeur actif.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| Function GetSheetList(Optional Name As String, _
Optional oWorkbook As Workbook, _
Optional UsedSheetName As Boolean) _
As Variant
' Renvoie la liste des feuilles Sheet et Worksheet
' soit suivant leus CodeName (Défaut) soit par rapport à la propriété Name
' - Non sensible à la casse
' - Les caractères génériques * et ? sont autorisés
'
' Philippe Tulliez www.magicoffice.be
' Arguments
' [Name] Nom du CodeName ou Name de la feuille à trouver (Par défaut toute la liste)
' [oWorkbook] Objet Classeur (ActiveWorkbook par défaut)
' [UseSheetName] True pour la propriété Name (CodeName par défaut)
'
Dim c As Integer, i As Integer, n As String, t As Variant
If oWorkbook Is Nothing Then Set oWorkbook = ActiveWorkbook
If Len(Name) = 0 Then Name = "*"
'
With oWorkbook
For i = 1 To .Sheets.Count
With .Sheets(i)
n = IIf(UsedSheetName, .Name, .CodeName) ' N prend la valeur Name ou CodeName
End With
If LCase(n) Like LCase(Name) Then
If c Then ReDim Preserve t(c) Else ReDim t(c)
t(c) = n: c = c + 1
End If
Next
End With
GetSheetList = t
End Function |
Exemple d'une procédure l'invoquant
Dans la procédure ci-dessous, la fonction GetSheetList renvoie la liste des feuilles dont le nom commence par le mot Bilan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Sub TestGetSheet()
Const txt As String = "Bilan*"
Dim Msg As String, Tbl As Variant, e As Integer
'
Tbl = GetSheetList(Name:=txt, UsedSheetName:=True) ' Renvoie la liste des feuilles (Propriété Name)
'
If IsArray(Tbl) Then
Msg = "Feuilles trouvées dans le classeur "
For e = LBound(Tbl) To UBound(Tbl)
Msg = Msg & vbCrLf & String(5, 32) & Tbl(e)
Next
Msg = Msg & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf
Else
Msg = "Pas trouvé de feuille correspondant aux critères " & ""
End If
MsgBox Msg, Title:="Sélection des feuilles " & txt
End Sub |
Quelques syntaxes pour l'argument Name
Name:= "Bilan*", le nom commence par Bilan
Name:= "*Bilan", le nom se termine Bilan
Name:= "*Bilan*", le nom contient Bilan
Name:= "Dupon?", le début de la chaîne de caractères du nom est égal à "Dupon" et le dernier caractère peut avoir n'importe quelle valeur
Tutoriel ou billet pour en savoir plus