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

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Apprendre comment faire une extraction flexible des noms de feuilles avec une fonction générique VBA pour Excel,
Un billet blog de Philippe Tulliez

Le , par Philippe Tulliez

0PARTAGES

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
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
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

Une erreur dans cette actualité ? Signalez-nous-la !