Logique sheetsExiste

patricktoulon

XLDnaute Barbatruc
allez je met la mienne version Wagadougou 😁
elle teste l'existence de la feuille sur le classeur même de la macro ou dans un des classeur ouverts dans la même instance d'Excel par son index ou son nom
inutile de dire pour ceux qui connaissent, qu'elle sert aussi pour tester le classeur ouvert ;)
VB:
Sub testX()
'test dans le classeur meme
    MsgBox sheetsExiste(ThisWorkbook, "feuil2")
End Sub

Sub testy()
'test dans le 2d classeur de la même instance du classeur contenant  la macro
    Dim wbk As Workbook
    'Set wbk = Workbooks(2) 'par son index
    Set wbk = Workbooks("toto.xlsm")    ' identifié par son nom
    MsgBox sheetsExiste(wbk, "feuil3")
End Sub

Function sheetsExiste(wbk As Workbook, sname As String) As Boolean
    sheetsExiste = Not IsError(Evaluate("='[" & wbk.Name & "]" & Replace(sname, "'", "''") & "'!A1:A2"))
End Function
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @patricktoulon :),

Ta proposition de sheetExiste() ne semble pas fonctionner si la feuille est une feuille de type "Graphique" (et aussi de type Boîte de dialogue Microsoft Excel 5 mais dont l'usage doit être tombé aux oubliettes)

Je propose plutôt :
VB:
Function sheetsExiste(wbk As Workbook, sname As String) As Boolean
    On Error Resume Next: sheetsExiste = wbk.Sheets(sname).Index > 0
End Function
 

patricktoulon

XLDnaute Barbatruc
Bonjour @mapomme oui c'est exact
c'est une question qui a été souvent relevée
perso quand j'utilise des sheets graphique je les nommes avec des noms spécifiques
ainsi dans ma recherche je n'utilise jamais de nom avec le même suffixe et/ou préfixe
bref je n'ai jamais de télescopage
de la même manière que l'on conseille de ne pas utiliser d'expression vb(a) pour les noms de variables
;)
 

Nairolf

XLDnaute Accro
Salut,

Si on parle uniquement d'usage dans les formules, je viens de trouver la fonction standard FEUILLE() qui peut être exploitée pour le même usage :
Code:
=NON(ESTERREUR(FEUILLE("Feuil2")))
Elle se rapproche fortement de la proposition de mapomme car elle ressort le numéro d'index de la feuille mais pour un fonctionnement uniquement interne à un classeur.

Fonction exploitable à partir de la version Excel2013.
 

patricktoulon

XLDnaute Barbatruc
Bonjour @Nairolf
et voila comment utiliser cette formule en VBA
VB:
Sub test()
MsgBox sheetsExist("Feuil1")
End Sub

Function sheetsExist(feuille)
    sheetsExist = Evaluate("=NOT(ISERROR(SHEET(""" & feuille & """)))")
End Function
 

Nairolf

XLDnaute Accro
@patricktoulon,
Evaluate n'est pas une des méthodes que j'utilise en VBA, mais il faudra que je la garde à l'esprit, j'utilise plutôt WorksheetFunction pour utiliser des fonctions Excel quand elles sont plus simple à exploiter que du VBA pur et aussi par habitude pour certaines.
 

patricktoulon

XLDnaute Barbatruc
dans ce cas la se serait 3 worksheetfunction imbriquées je sais pas si ça peu marcher
worksheetfunction.sheet("nomfeuille")ne fonctionne pas
le mot sheet étant un object pour vba ça me parait compromis ton idée
 

Nairolf

XLDnaute Accro
@patricktouon,
Je me suis mal exprimé, je voulais juste dire qu'en général j'utilise la méthode WorksheetFunction, je ne parlais pas de ce cas en particulier.
J'avais vu que la fonction FEUILLE() n'a pas été implémenté en VBA, car il existe déjà la méthode exploitée par mapomme : Classeur.Sheets(NomFeuille).Index
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG