VBA & Excel: Vérifier si une Feuille existe 2


Dans cet article, vous trouverez une fonction VBA très utile – vérification si une Feuille particulière existe dans le Classeur Excel. Cette fonction peut être utilisée telle quelle, il vous suffit de la copier dans un Module de votre Projet VBA.

VBA – vérifier si une Feuille existe

Pour éviter des erreurs lors d'exécution d'un code VBA, il est préférable de s'assurer que tous les Objets (Classeurs, Feuilles,…) qui doivent être manipulés existent bel et bien. Rien de plus pénible qu'une macro bloquée parce que l'utilisateur a supprimé une des Feuilles requises. Il est préférable de s'assurer soi-même si tous les éléments nécessaires à la macro sont présents et si ce n'est pas le cas, cela nous permettra de terminer la macro "proprement" avec (éventuellement) un message d'erreur indiquant ce qui empêche l'exécution correcte de la macro. Ceci fait tout simplement partie des bonnes pratiques de la programmation

La fonction VBA qui suit teste si la Feuille (dont le nom est utilisé comme argument de la fonction), est présente dans le Classeur. Elle retourne VRAI ou FAUX (ou TRUE / FALSE) en tant que Boolean.

Et voici donc le code de la fonction VBA prêt à l'utilisation:

Public Function FeuilleExiste(FeuilleAVerifier As String) As Boolean
'fonction qui vérifie si la "FeuilleAVerifier" existe dans le Classeur actif
'par Excel-Malin.com ( https://excel-malin.com )

On Error GoTo SiErreur
Dim Feuille As Worksheet
    
    FeuilleExiste = False
    For Each Feuille In Worksheets
        If UCase(Feuille.Name) = UCase(FeuilleAVerifier) Then
            FeuilleExiste = True
            Exit Function
        End If
    Next Feuille
Exit Function

SiErreur:
    FeuilleExiste = CVErr(xlErrNA)
End Function

 

Exemple d'utilisation de la fonction

L'exemple suivant teste si la Feuille "Test_1" est présente dans le Classeur et si oui, la renomme en "Test_2". Si la Feuille n'existe pas, un message est affiché à l'utilisateur.

Attention: pour faire fonctionner cet exemple, vous avez besoins des deux codes VBA (le code de la fonction plus haut & le code de l'exemple qui suit).

Sub Test()
'exemple d'utilisation de la fonction "FeuilleExiste"

    If FeuilleExiste("Test_1") = True Then
        Sheets("Test_1").Name = "Test_2"
    Else
        MsgBox "La Feuille 'Test_1' n'existe pas!"
    End If
    
End Sub

 

Évitez les solutions faciles!

Vous allez peut-être trouver cette fonction "longue" par rapport à ce qu'elle fait. Et c'est vrai que sur internet, vous pouvez trouver des solution plus "courtes" mais attention aux solutions trop faciles!

Nombreux fonctions que vous pouvez trouver sur le net utilisent la méthode "directe" – c'est-à-dire activer (Activate) directement la Feuille que l'on veut tester et ensuite vérifier si la fonction fonctionne ou se solde par une erreur. Si la Feuille "MaFeuille" n'existe pas et on fait Sheets("MaFeuille").Activate, cela déclenche une erreur. Et certains utilisent ce déclenchement d'erreur comme preuve que la Feuille en question n'existe pas…

Mais ce n'est vraiment pas une manière professionnelle de créer une programme. Dans des macros / applications VBA plus complexes, cela ne peut que créer des problèmes. Donc, cette solution "miracle" est à éviter si vous voulez produire un travail sérieux et (ré)utilisable…

Pourrait également vous intéresser

Et pour terminer, voici quelques autres articles qui pourraient vous être utiles…

 

27 0

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

2 commentaires sur “VBA & Excel: Vérifier si une Feuille existe

  • Raphaël

    Effectivement plus propre. Mais il faut rajouter des UCase dans la comparaison des noms des feuilles. En effet, pour Excel, deux feuilles ne peuvent pas avoir le nom "Feuil1" et "feuil1".

    • excel-malin.com Auteur de l’article

      Merci pour votre remarque Raphaël.
      Elle est tout à fait pertinente.
      Si on a une feuille 'test',
      le code Sheets("test").Range("A1").Value = 5 va fonctionner
      mais le code Sheets("Test").Range("A1").Value = 5 va fonctionner également même si la feuille 'Test' "n'existe pas"…
      J'adapte le code pour tenir compte de votre remarque.
      Cordialement, Martin