Macros Access
Comment exécuter une macro Access ou une portion de code VBA Access depuis Excel ?
Recopiez la macro qui suit dans un module standard d’Excel.
Vous pourrez ensuite l’exécuter via le menu Outils / Macro / Macros d’Excel.
Exécuter une macro Access depuis Excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub MacroAccess() Dim acApp As New Access.Application ' Démarrer Access Set acApp = New Access.Application ' Ouvrir la base de données concernée acApp.OpenCurrentDatabase ("C:Un chemin vers unebase de données.mdb") ' Exécuter la macro acApp.DoCmd.RunMacro "mac Test" ' Quitter Access acApp.Quit Set acApp = Nothing End Sub |
Dans l’exemple ci-dessus, pensez bien sûr à donner un chemin correct vers votre base de données Access. Remplacez aussi la mention mac Test
par le nom réel de la macro à exécuter.
Exécuter une procédure VBA Access depuis Excel
Dans ce second exemple, je suppose que vous avez une procédure (Sub / End Sub
) nommée Test
, dans un module standard Access, et que cette procédure ne comporte pas de paramètre. Ça pourrait être quelque chose comme :
1 2 3 |
Public Sub Test() MsgBox "Hello !" End Sub |
Dans ce cas, reprenez le listing plus haut en remplaçant la ligne principale :
1 |
acApp.DoCmd.RunMacro "mac Test" |
…par :
1 |
acApp.Run "Test" |
Si la procédure Test
devait recevoir des paramètres, il suffirait de les ajouter à la suite, séparés par des virgules.
Par exemple :
1 |
acApp.DoCmd.RunMacro "Test", 10, "lundi" |
tofatwork > J’ai pris le temps de faire quelques tests complémentaires. La bonne nouvelle : la macro marche toujours correctement avec Access 2010 (en MDB ou ACCDB).
Par contre, les macros qui demandent de l’interaction (genre
MsgBox
en VBA ouMessage
en macro pure) nécessitent qu’Access soit visible. Il suffit de rajouter ceci :… quelque part dans la procédure
MacroAccess
ci-dessus. Par exemple, après cette ligne :merci beaucoup man!!!
tofatwork > Je viens de tester sur Access 2010 + Vista. Ça tourne également dans le vide. Après quelques tests rapides, c’est seulement l’instruction
DoCmd.RunMacro
qui pose problème (le reste fonctionne correctement). Je pencherais soit pour des réglages de sécurité, soit pour un bug (à confirmer).Je n’ai pas encore eu le temps de tester toutes les combinaisons concernant la sécurité. Pour ce qui est du bug (si c’est le cas), il y a peut-être une piste à essayer : le Service Pack 1 de Office 2010 vient tout juste de sortir…
bonjour,
j’utilise ce scripte depuis plusieurs années sans souci … je viens de passer en Office2010 sous W7 et la macro plante. Doit-on adapter le code pour ouvrir une base .accdb ?
Nek > Quels sont les réglages à l’ouverture de la base ? Notamment : y a-t-il une macro AutoExec ou des options de démarrage (Outils / Démarrage) ?
Bonjour ! Merci pour cette réponse rapide 🙂
J’ai pourtant office 2003, sans votre proposition j’ai ma base qui s’ouvre normalement en affichant le menu de base, par contre si je suis votre proposition il ne se passe rien de différent. Par contre j’ai essayer apres le « acApp.OpenCurrentDatabase » de mettre : « acApp.Visible = False », access se fige et n’arrive pas au menu de la base. ce n’est pas l’effet recherché mais déja si l’utilisateur ne voit pas un autre menu cela portera moins a confusion …
je vous tiens au courant si je trouve la méthode miracle 🙂
cordialement
Nek > Ca doit dépendre des packs (je viens de refaire un test avec Office 2003, et on ne voit qu’un bouton Access sur la barre des tâches). Et si tu rajoutes un :
acApp.Visible = False
après cette ligne :
Set acApp = New Access.Application ?
Bonjour ! cette méthode fonctionne parfaitement par contre avec un OpenCurrentDatabase on voit access se lancer cela peut troubler l’utilisateur … y’a t il un moyen de masquer l’apparition d’access ? j’avais pensé a un : Application.ScreenUpdating = False mais sa ne marche qu’avec les feuilles excels …
Cordialement