XL 2016 Pourquoi Evaluate s'exécute toujours 2 fois ?

Lu76Fer

XLDnaute Occasionnel
Bonjour,

J'ai testé sur différente version d'excel et le résultat est le même :
VB:
Function TestEval() As Boolean
    Debug.Print "TEST EN COURS ..."
    TestEval = True
End Function

Sub TestAppel()
Dim b As Boolean
    b = Evaluate("TestEval()")
    'b = [TestEval()] 'Même résultat
End Sub
Résultat :
TEST EN COURS ...
TEST EN COURS ...

Qui aurait des explications ou un lien pour m'éclairer ?
 

patricktoulon

XLDnaute Barbatruc
c'est bien de savoir quelles sont les possibilités technique
allez si c'est pour tester si une fonction existe

comme ça vite fait
ici on va tester si dans le module2 il y a la fonction testEval3()
VB:
Sub testX()
'******************************************************
'activer la référence Microsoft visual basic for application Extensibility 5.X
'*********************************************************
Set m = ThisWorkbook.VBProject.VBComponents("Module2") 'le module
code = m.CodeModule.Lines(1, m.CodeModule.CountOfLines)'le code entier du module
fonctionrecherchée = "TestEval3()"'la fonction que l'on recherche
MsgBox code Like "*Function*" & fonctionrecherchée & "*" 'alo!!
End Sub
voici comment on fait ;)

et tes fonction tu leur ajoute pas des setting et tout les sottises que l'on peut imaginer ;)
 

Lu76Fer

XLDnaute Occasionnel
Bonsoir
En parlant de possibilité technique, il y a quand même Application.Run NomProc avec NomProc une variable String contenant le nom de la Sub à exécuter qui serait à mon avis plus adapté.
Tout à fait pertinant !!
Merci encore !
C'est d'ailleurs aussi grâce à cette Macro que je communique entre 2 instances Excel. Il suffit de faire passer Application en paramètre qui est le seul objet qui peut être passé au travers de cette macro. Ensuite l'autoroute est ouverte ...
👏
 

patricktoulon

XLDnaute Barbatruc
re
la même qui cherche la fonction dans tout les modules
Code:
Sub testX2()
Dim code$
'******************************************************
'activer la référence Microsoft visual basic for application Extensibility 5.X
'*********************************************************
For Each m In ThisWorkbook.VBProject.VBComponents
If m.CodeModule.CountOfLines > 0 Then code = m.CodeModule.Lines(1, m.CodeModule.CountOfLines)
fonctionrecherchée = "TestEval3()"
If code Like "*Function*" & fonctionrecherchée & "*" Then MsgBox "oui"
Next
End Sub
 

Lu76Fer

XLDnaute Occasionnel
re
la même qui cherche la fonction dans tout les modules
Code:
Sub testX2()
Dim code$
'******************************************************
'activer la référence Microsoft visual basic for application Extensibility 5.X
'*********************************************************
For Each m In ThisWorkbook.VBProject.VBComponents
If m.CodeModule.CountOfLines > 0 Then code = m.CodeModule.Lines(1, m.CodeModule.CountOfLines)
fonctionrecherchée = "TestEval3()"
If code Like "*Function*" & fonctionrecherchée & "*" Then MsgBox "oui"
Next
End Sub
Pour ce type de code, il faut des autorisations particulières. Ce code est toujours intéressant mais pour un projet plus ambitieux...
La solution de Dranreb est encore et toujours la plus judicieuse !
 

Discussions similaires

Réponses
6
Affichages
294

Statistiques des forums

Discussions
312 207
Messages
2 086 244
Membres
103 162
dernier inscrit
fcfg