Comment vérifier si une feuille Excel existe ?

Comment vérifier si une feuille Excel existe ? - VB/VBA/VBS - Programmation

Marsh Posté le 24-07-2007 à 15:03:15    

Bonjour à tous,
 
Je voudrais savoir comment est il possible de créer une variable booléenne qui me renvoie si une feuille, nommée "mafeuille" par exemple, existe ou nom dans mon classeur excel.
 
J'espère avoir été clair, merci d'avance

Reply

Marsh Posté le 24-07-2007 à 15:03:15   

Reply

Marsh Posté le 24-07-2007 à 15:11:00    

Cette fonction minimaliste devrait t'aider :

Public Function FeuilleExiste(sNomFeuille As String) As Boolean
    On Error GoTo Err_FeuilleExiste
    FeuilleExiste = False
    FeuilleExiste = Not ActiveWorkbook.Worksheets(sNomFeuille) Is Nothing
Err_FeuilleExiste:
End Function


À utiliser, par exemple, comme suit :

If FeuilleExiste("Feuil1" ) Then...

Reply

Marsh Posté le 24-07-2007 à 19:26:01    

Ca marche nickel, merci pour tout

Reply

Marsh Posté le 30-10-2010 à 18:18:58    

J'ai mieux :)
 
La fonction suivante retourne la valeur "Vrai" si la feuille existe.
 
Public Function FeuilleExiste (ByVal strNomFeuille As String) As Boolean
'Retourne TRUE si strNomFeuille est le nom d'une feuille qui existe dans le classeur actif
' FALSE dans le cas contraire

 
    FeuilleExiste = Not (IsError(Evaluate("='" & strNomFeuille & "'!A1" )))
 
End Function

 
Jacknight
www.bluebirdcommunication.ch


Message édité par Jacknight le 30-10-2010 à 18:21:10
Reply

Marsh Posté le 03-11-2010 à 17:58:26    

bof, faire intervenir la gestion d'erreur c'est sale.
 
aussi bien celle de VBA que celle des formules :o
 
 


Public Function IsWorksheet(strName As String) As Boolean
   Dim objWorksheet As Worksheet
   IsWorksheet = False
   For Each objWorksheet In ActiveWorkbook.Worksheets
      If objWorksheet.Name = strName Then
         IsWorksheet = True
      End If
   Next
End Function


 

Reply

Marsh Posté le 03-11-2010 à 21:54:26    

Xxxaaavvv a écrit :

bof, faire intervenir la gestion d'erreur c'est sale.
 
aussi bien celle de VBA que celle des formules :o
 
 


Public Function IsWorksheet(strName As String) As Boolean
   Dim objWorksheet As Worksheet
   IsWorksheet = False
   For Each objWorksheet In ActiveWorkbook.Worksheets
      If objWorksheet.Name = strName Then
         IsWorksheet = True
      End If
   Next
End Function



 
Ajouter un "Exit for" optimiserait un peu la procédure.
Toutefois, l'utilisation d'une boucle n'est pas aussi efficace dans le cas présent. D'une part parce qu'une grande quantité de feuilles à "vérifier" affecte la rapidité de la procédure. De plus l'usage répété à un échelon supérieur fait ressortir ce problème.
 
Il y a un inconvénient à la gestion des erreurs VBA : c'est qu'on "suppose" que l'erreur générée est déclenchée par l'évênement qui nous intéresse. Alors qu'en réalité, il existe d'autres sources de génération d'erreur (débordement mémoire, etc..) qui peuvent conduire (rarement c'est vrai mais quand même) à un résultat qui est faux.
 
Alors que dans le cas de la verification d'une formule, celle-ci est précisément orientée sur le problème qu'elle est susceptible de générer. Iserror n'est pas une gestion d'erreur à proprement parlé :) mais une vérification gérée nativement par Excel et donc optimisée dans ce but. Et, je ne vois pas ce qu'il y a de sale :)
 
---
Jacknight
www.bluebirdcommunication.ch


Message édité par Jacknight le 03-11-2010 à 23:27:47
Reply

Marsh Posté le 04-11-2010 à 09:37:16    

Une simple erreur de syntaxe dans la formule inclue dans le evaluate peut être ?
 
ça a beau être tout fait en une seule ligne, le fait de devoir interpreter une formule, la faire planter, de récupérer l'erreur pour dire que "non" elle n'y est pas, c'est pas génial, c'est moyen détourné comme pour l'autre.
 
sinon oui il manque l'exit for pour optimiser ma boucle, mais aussi le "activeworkbook" qu'il faudrait éliminer si je voulais être extrémiste.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed