Tester si une Sub existe grâce à son nom
Orbital38
Messages postés
76
Statut
Membre
-
NHenry Messages postés 15480 Date d'inscription Statut Modérateur Dernière intervention -
NHenry Messages postés 15480 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je voulais savoir si il y avait une commande pour tester par une variable String si une macro du même nom existe.
Du style :
C'est parce que je gère l'appelle de macro part une image dans un UserForm et je crée cette image avec une fonction. Un des paramètres de cette fonction est le nom de la macro. Puis plus loin dans le code, pour appeler la macro je fais
Merci d'avance. J'ai un doute quant à la possibilité de faire ça. x)
Après au fond si ça plante je suis vite fixé pour savoir si un truc va pas mais je voudrais un truc plus soft que le debug.
PS : J'utilise le VBA
Je voulais savoir si il y avait une commande pour tester par une variable String si une macro du même nom existe.
Du style :
For Each Sub in Module1
If nom_macro = Sub.Name Then
Application Run nom_macro
Else
MsgBox "La Macro n'existe pas"
End If
Next Sub
C'est parce que je gère l'appelle de macro part une image dans un UserForm et je crée cette image avec une fonction. Un des paramètres de cette fonction est le nom de la macro. Puis plus loin dans le code, pour appeler la macro je fais
Application Run nom_dans_fonction_image, et la macro se lance. Mais si jamais j'écris mal le nom d'une macro j'aimerai afficher un message plutôt qu'essayer de continuer le code et de tout faire buguer.
Merci d'avance. J'ai un doute quant à la possibilité de faire ça. x)
Après au fond si ça plante je suis vite fixé pour savoir si un truc va pas mais je voudrais un truc plus soft que le debug.
PS : J'utilise le VBA
A voir également:
- Subexiste
- Flash drive tester - Télécharger - Divers Utilitaires
- Tester son pc - Guide
- Tester composant pc - Guide
- Comment retrouver une personne sans son nom sur facebook - Forum Réseaux sociaux
- Comment tester une antenne tv avec un multimètre - Forum TNT / Satellite / Réception
2 réponses
A ma connaissance, cela n'est pas possible en VBA, en VB.NET, c'est faisable avec Reflection, mais en VB6/A, aucun mécanisme n'est prévu.
bonjour,
En vba ....Oui c'est faisable ... il suffit de regarder les codes de manipulation du visual basir editor (vbe).
https://www.mrexcel.com/board/threads/vba-function-to-check-if-a-particular-macro-exists.284317/#post1397461
Pour savoir quelles autres possibilités tu as concernant la manipulation du VBE par VBA.. tu peux regarder ceci : http://www.cpearson.com/excel/vbe.aspx
Tu trouveras aussi de très bons exemples sur developpez.com
https://silkyroad.developpez.com/VBA/VisualBasicEditor/
.
En vba ....Oui c'est faisable ... il suffit de regarder les codes de manipulation du visual basir editor (vbe).
https://www.mrexcel.com/board/threads/vba-function-to-check-if-a-particular-macro-exists.284317/#post1397461
'=================================================================================
'- CHECK IF A MODULE & SUBROUTINE EXISTS
'- VBA constant : vbext_pk_Proc = All procedures other than property procedures.
'- An error is generated if the Module or Sub() does not exist - so we trap them.
'---------------------------------------------------------------------------------
'- VB Editor : Tools/References - add reference TO ......
'- .... "Microsoft Visual Basic For Applications Extensibility"
'----------------------------------------------------------------------------------
'- Brian Baulsom October 2007
'==================================================================================
Sub MacroExists()
Dim MyModule As Object
Dim MyModuleName As String
Dim MySub As String
Dim MyLine As Long
'---------------------------------------------------------------------------
'- test data
MyModuleName = "TestModule"
MySub = "Number2"
'----------------------------------------------------------------------------
On Error Resume Next
'- MODULE
Set MyModule = ActiveWorkbook.VBProject.vbComponents(MyModuleName).CodeModule
If Err.Number <> 0 Then
MsgBox ("Module : " & MyModuleName & vbCr & "does not exist.")
Exit Sub
End If
'-----------------------------------------------------------------------------
'- SUBROUTINE
'- find first line of subroutine (or error)
MyLine = MyModule.ProcStartLine(MySub, vbext_pk_Proc)
If Err.Number <> 0 Then
MsgBox ("Module exists : " & MyModuleName & vbCr _
& "Sub " & MySub & "( ) : does not exist.")
Else
MsgBox ("Module : " & MyModuleName & vbCr _
& "Subroutine : " & MySub & vbCr _
& "Line Number : " & MyLine)
End If
End Sub
Pour savoir quelles autres possibilités tu as concernant la manipulation du VBE par VBA.. tu peux regarder ceci : http://www.cpearson.com/excel/vbe.aspx
Tu trouveras aussi de très bons exemples sur developpez.com
https://silkyroad.developpez.com/VBA/VisualBasicEditor/
.
Jamais entendu parlé de VBE. XD
Merci en tout cas, j'essaierai ça dans 2/3 jours après mon week-end dans le Sud. :p
Si je passe en VB.NET je suppose que, si je n'utilise pas Reflection, je pourrais tout de même écrire :
Merci en tout cas, j'essaierai ça dans 2/3 jours après mon week-end dans le Sud. :p
Si je passe en VB.NET je suppose que, si je n'utilise pas Reflection, je pourrais tout de même écrire :
Set MyModule = VBProject.vbComponents(MyModuleName).CodeModuleou tout du moins son équivalent en VB.NET, non ? Je ne pose la question que sur cette ligne car c'est la seule qui implique obligatoirement du VBA avec ActiveWorkbook (à mes yeux seulement bien sûr ^^).
Je vais DL visual studio community là. Faut bien que je me lance en VB.NET.
Le seul truc dont j'ai peur c'est que Application.Run ne marche plus (ou d'autres trucs du genre).
Je garde le Reflection dans un coin de ma tête en tout cas. ^^
En l'état, si tu y arrive avec un On Error, ce sera plus simple.
Voir ce petit article avant de te lancer :
https://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net
De toute façon je vais y aller mollo. Déjà je vais passer en VB.NET petit à petit mes fonctions/sub/module et y aller pas à pas. Faire des tests à part si j'ai trop d'erreur pour savoir d'où vient le problème de syntaxe. ^^
Par contre je n'ai absolument aucune idée de comment est construit le "framework" (aucune idée de ce que ça veut dire aussi d'ailleurs XD).
Edit : je vais ressortir mes cours de C++ pour revoir la construction typique d'un petit programme avec les constructeur, destructeur, etc...