Voir le flux RSS

Pierre Fauconnier

VBA Excel: Vérifier qu'une feuille existe dans un classeur, trouver une feuille par son nom dans un classeur

Noter ce billet
par , 17/10/2019 à 09h00 (200 Affichages)
Salut

Il arrive souvent que l'on doive manipuler une feuille dans Excel, et se pose la question de savoir si elle existe. Sur les forums, on voit alors des "solutions" telles que l'utilisation de On Error... censée gérer le fait que la feuille n'est pas trouvée, ou encore une boucle For Each... avec un sale Exit For dès qu'on a trouvé la feuille... Beerkkk

La gestion des exeptions (ce que fait On Error) n'a pas sa place ici. La "programmation par l'erreur" n'est à mon sens pas une bonne programmation. Quant à l'utilisation de Exit dans du code, j'ai déjà dit ce que j'en pensais dans ce billet.

Je vous propose deux codes, l'un pour trouver la feuille par son nom, l'autre par son codename. Ces fonctions reçoivent le nom (ou le codename) en premier argument obligatoire, et en second argument optionnel, le classeur (ouvert) dans lequel il faut chercher ladite feuille. Si ce classeur n'est pas précisé, le code cherchera la feuille dans le classeur actif.

Snippet pour rechercher une feuille par son nom (le nom de l'onglet)
Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Function getSheetByName(Name As String, Optional wb As Workbook) As Object
  Dim sh As Object
  Dim Counter As Long
 
  If wb Is Nothing Then Set wb = ActiveWorkbook
  Counter = 1
  Do While Counter <= wb.Sheets.Count And getSheetByName Is Nothing
    If StrComp(wb.Sheets(Counter).Name, Name, vbTextCompare) = 0 Then Set getSheetByName = wb.Sheets(Counter)
    Counter = Counter + 1
  Loop
End Function


Snippet pour rechercher une feuille par son CodeName (le nom VBA de la feuille).
Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Function getSheetByCodeName(CodeName As String, Optional wb As Workbook) As Object
  Dim sh As Object
  Dim Counter As Long
 
  If wb Is Nothing Then Set wb = ActiveWorkbook
  Counter = 1
  Do While Counter <= wb.Sheets.Count And getSheetByCodeName Is Nothing
    If StrComp(wb.Sheets(Counter).CodeName, CodeName, vbTextCompare) = 0 Then Set getSheetByCodeName = wb.Sheets(Counter)
    Counter = Counter + 1
  Loop
End Function


Ces codes permettent de manipuler directement la feuille ou de l'affecter à une variable. Pour déterminer qu'une feuille existe sans vouloir l'affecter à une variable, il suffira de déterminer que la fonction renvoie autre chose que Nothing. Fidèle à ma volonté de me simplifier la vie, j'ai donc créé les fonctions qui permettent uniquement de savoir si une feuille existe.

Fonction qui vérifie qu'une feuille existe avec le nom d'onglet souhaité
Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Function SheetByNameExists(Name As String, Optional wb As Workbook) As Boolean
  SheetByNameExists = Not getSheetByName(Name, wb) Is Nothing
End Function

Fonction qui vérifie qu'une feuille existe avec le CodeName souhaité
Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Function SheetByCodeNameExists(CodeName As String, Optional wb As Workbook) As Boolean
  SheetByCodeNameExists = Not getSheetByCodeName(CodeName, wb) Is Nothing
End Function


Bien entendu, ces fonctions trouveront leur place dans le module générique xlTools que j'embarque dans tous mes développements.

NB: Mes snippets sont toujours indépendants de Option Compare et Option Base. C'est pourquoi j'utilise la fonction StrCompare et pas la simple égalité, car par défaut (pas de Option Compare ou Option Compare Binary), VBA réalise la comparaison en différenciant les majuscules des minuscules.

Envoyer le billet « VBA Excel: Vérifier qu'une feuille existe dans un classeur, trouver une feuille par son nom dans un classeur » dans le blog Viadeo Envoyer le billet « VBA Excel: Vérifier qu'une feuille existe dans un classeur, trouver une feuille par son nom dans un classeur » dans le blog Twitter Envoyer le billet « VBA Excel: Vérifier qu'une feuille existe dans un classeur, trouver une feuille par son nom dans un classeur » dans le blog Google Envoyer le billet « VBA Excel: Vérifier qu'une feuille existe dans un classeur, trouver une feuille par son nom dans un classeur » dans le blog Facebook Envoyer le billet « VBA Excel: Vérifier qu'une feuille existe dans un classeur, trouver une feuille par son nom dans un classeur » dans le blog Digg Envoyer le billet « VBA Excel: Vérifier qu'une feuille existe dans un classeur, trouver une feuille par son nom dans un classeur » dans le blog Delicious Envoyer le billet « VBA Excel: Vérifier qu'une feuille existe dans un classeur, trouver une feuille par son nom dans un classeur » dans le blog MySpace Envoyer le billet « VBA Excel: Vérifier qu'une feuille existe dans un classeur, trouver une feuille par son nom dans un classeur » dans le blog Yahoo

Mis à jour 17/10/2019 à 11h21 par Pierre Fauconnier

Catégories
VBA , Excel , MS Office , Snippet

Commentaires