IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Philippe Tulliez

[Actualité] Extraction flexible des noms de feuilles avec une fonction générique VBA pour Excel

Noter ce billet
par , 30/07/2023 à 09h20 (6375 Affichages)
Introduction
Dans cet article, je vous propose une fonction qui renvoie une liste des noms de feuilles d'un classeur. Cette fonction est générique et flexible, ce qui signifie qu'elle peut être adaptée à diverses situations.
Elle peut renvoyer tous les noms de feuilles ou seulement ceux qui correspondent à certains critères. De plus, vous pouvez choisir de renvoyer le nom d'affichage (la propriété Name) ou le nom de code (la propriété CodeName) de chaque feuille.

Comprendre le fonctionnement de la procédure
Une fois que nous avons compris le but de la fonction, il est essentiel d'aborder son fonctionnement interne pour tirer le meilleur parti de ses capacités.
Un élément central de cette fonction est l'utilisation de la clause LIKE dans la recherche de critères. Cela signifie que vous pouvez utiliser des caractères génériques dans vos critères pour rendre votre recherche plus flexible.
Par exemple, vous pouvez utiliser l'astérisque (*) pour représenter n'importe quel nombre de caractères et le point d'interrogation (?) pour représenter un caractère unique
Voici quelques exemples de chaîne de caractères que vous pouvez passer à l'argument Criteria
"*Bilan*" ) renverra toutes les feuilles dont le nom contient "Bilan" n'importe où dans le nom, "Bilan*" renverra toutes celles dont le nom commence par "Bilan" et "*Bilan" les feuilles dont le nom se termine par bilan.
Si vous passez à l'argument Criteria, la chaîne "*20??", la fonction renverra toutes les feuilles dont le nom se termine par "20" et deux caractères quelques soit leurs valeurs comme "2020", "2021", "2022", etc.
Pour une compréhension plus approfondie de l'utilisation de la clause LIKE et des caractères génériques, vous pouvez consulter le tutoriel de Fabrice Constans L'opérateur LIKE que je recommande fortement.

Outre le paramètre Criteria, la fonction GetSheetList, a deux autres arguments

Code de la procédure
Cette fonction nommée GetSheetList a trois arguments Criteria, oWorkbook et CodeName, tous optionnels

Criteria est une chaîne de caractères dont vous avez eu l'explication dans le chapitre Comprendre le fonctionnement de la fonction si celle-ci est vide, la liste retournée contiendra tous les noms de feuilles
oWorkbook est un objet Workbook qui désigne par défaut le classeur actif si aucun autre n'est spécifié
CodeName est un booléen. Si l'on souhaite avoir la liste des feuilles par leur propriété CodeName, il faut mettre cet argument à True. La critère de recherche porte également sur cette propriété.

Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
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
Function GetSheetList(Optional Criteria As String, _
                      Optional oWorkbook As Workbook, _
                      Optional CodeName As Boolean) As Variant
  ' Renvoie la liste des feuilles du classeur définit par
  '    l'argument oWorkbook. Si Nothing = le classeur actif
  '    en fonction de [Criteria] (si vide renvoie la liste complète)
  ' Philippe Tulliez (https://magicoffice.be)
  ' Arguments
  '  [Criteria]   Chaîne à chercher dans le nom
  '  [oWorkbook]  Objet Workbook dont on veut la liste des feuilles
  '  [CodeName]   La liste et le critère porte sur le CodeName
  Dim t As Variant
  Dim e As Integer
  Dim c As Integer
  Dim n As String
  If oWorkbook Is Nothing Then Set oWorkbook = ActiveWorkbook
  If Len(Criteria) = 0 Then Criteria = "*"
  With oWorkbook
   For e = 1 To .Sheets.Count
     With .Sheets(e)
       n = IIf(CodeName, .CodeName, .Name)
       If n Like Criteria Then
          If c Then ReDim Preserve t(c) Else ReDim t(c)
          t(c) = n: c = c + 1
       End If
     End With
   Next
  End With
  GetSheetList = t
End Function

Exemple d'une procédure qui l'invoque
Dans cet exemple, nous cherchons la liste de toutes les feuilles du classeur actif dont le CodeName commence par sht
Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Sub TestGetSheetList()
  Const s As String = "sht*"  ' Critère de recherche
  Dim t As Variant
  Dim m As String
  t = GetSheetList(Criteria:=s, CodeName:=True)
  If IsArray(t) Then
     m = Join(t, vbCrLf)
   Else
     m = "Pas de feuilles correspondantes à " & s
  End If
  MsgBox m
End Sub

Ressources
Tutoriels ou billets à lire éventuellement sur les sujets abordés

Envoyer le billet « Extraction flexible des noms de feuilles avec une fonction générique VBA pour Excel » dans le blog Viadeo Envoyer le billet « Extraction flexible des noms de feuilles avec une fonction générique VBA pour Excel » dans le blog Twitter Envoyer le billet « Extraction flexible des noms de feuilles avec une fonction générique VBA pour Excel » dans le blog Google Envoyer le billet « Extraction flexible des noms de feuilles avec une fonction générique VBA pour Excel » dans le blog Facebook Envoyer le billet « Extraction flexible des noms de feuilles avec une fonction générique VBA pour Excel » dans le blog Digg Envoyer le billet « Extraction flexible des noms de feuilles avec une fonction générique VBA pour Excel » dans le blog Delicious Envoyer le billet « Extraction flexible des noms de feuilles avec une fonction générique VBA pour Excel » dans le blog MySpace Envoyer le billet « Extraction flexible des noms de feuilles avec une fonction générique VBA pour Excel » dans le blog Yahoo

Mis à jour 30/07/2023 à 21h13 par Malick (Ajout balises code)

Catégories
VBA Excel

Commentaires