Bonjour,
Je cherche à executer du code VBA d'une base de donnée à une autre via RunMacro
J'ai une base de donnée appelée "ExecuteMac.accdb" qui dans son code source VBA va faire appel à une autre base "BaseMac.accdb".
La base "BaseMac" contient une macro qui execute une procédure vba.
J'ai tout simplifié pour vous présenter uniquement ma problématique.
La base de données "ExecuteMac.accdb" de lancement d'une macro contient un formulaire avec un bouton de commande dont voici le code :
1 2 3 4 5 6 7 8 9 10 11 12 13
| Private Sub Commande0_Click()
Dim acApp As New Access.Application
Set acApp = New Access.Application
acApp.OpenCurrentDatabase ("C:\BaseMac.accdb")
' Exécuter la macro
Call acApp.DoCmd.RunMacro("ma_macro")
acApp.Quit
Set acApp = Nothing
End Sub |
La base de donnée "BaseMac" contenant la macro "ma_macro" execute la procédure "ouvremsg()" qui n'affiche qu'un message (!) dont le code est :
1 2 3
| Public Function ouvremsg()
MsgBox "Voici le message :" & vbCrLf & "Cela marche bien !", vbInformation
End Function |
Cela fonctionne à merveille ! Mais (y a toujours un "mais" dans une histoire !) je souhaiterais pouvoir avoir un message dynamique dont le code serait :
1 2 3
| Public Function ouvremsg(Byval pstrMsgPrivee as String)
MsgBox "Voici le message :" & vbCrLf & pstrMsgPrivee , vbInformation
End Function |
Je n'arrive donc pas à modifier ma procédure d'appel pour obtenir le résultat voulu.
Le code envisagé est :
Call acApp.DoCmd.RunMacro("ma_macro", "Mon message privé a afficher")
mais cela ne fonctionne pas lorsque je veux ajouter un paramètre (argument de la procédure appelé par la macro dans pour la procédure "ouvremsg").
En bref, la variable "pstrMsgPrivee" est initialisée par la base de données "ExecuteMac" pour venir s'afficher dans la base "BaseMac" mais j'arrive pas à lui transemttre !
Comment peut-on envoyer une chaine de caractère d'une base à une autre ? cette chaine est ensuite utilisée dans la base contenant la macro. Je suis preneur de toutes les solutions mais une contrainte majeur : il ne faut pas faire appel à des libraires autre que les 2 obligatoires d'Access. Ainsi j'avais eu l'idée de passé par un fichier texte qu'il me suffisait de lire mais j'ai besoin d'un objet de type FileSystemObject et donc cela ne me convient pas car ma base ne doit contenir aucune référence vba à ce stade de mon code.
Dans l'attente de vous lire.
Merci
Partager