Tester si une Sub existe grâce à son nom
Orbital38
Messages postés
71
Date d'inscription
Statut
Membre
Dernière intervention
-
NHenry Messages postés 15219 Date d'inscription Statut Modérateur Dernière intervention -
NHenry Messages postés 15219 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
- Tester son pc - Guide
- Flash drive tester - Télécharger - Divers Utilitaires
- Tester composant pc - Guide
- Changer le nom de son iphone - Guide
- Tester disque dur - Télécharger - Informations & Diagnostic
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...