Appeler du code VBA à partir d’une macro

Comment peut-on appeler du code VBA à l’aide d’une macro Access ?

La fonction VBA

Tout d’abord, il faut que vous prévoyiez une fonction VBA, à l’intérieur d’un module standard. En voici un exemple :

Cette fonction reçoit une chaîne en entrée, et se contente de l’afficher par MsgBox. Pas grand chose de spectaculaire (ni de très utile !).

Important
La portion de code doit bien être une fonction (un bloc Function / End Function), et non pas une procédure (un bloc Sub / End Sub). Sinon, la macro ne fonctionnera pas !

La macro

Reste à appeler cette fonction dans une macro.

  1. Créez une nouvelle macro.
  2. Choisissez l’action ExécuterCode.
  3. Dans la zone « Nom de la fonction », tapez : AfficherMessage("Hello")
    Pas de = au départ, ni de signe quelconque, en fait.
    Et entre les parenthèses, écrivez la chaîne à afficher (puisque c’est ce qu’attend la fonction plus haut).

Voici ce que ça donne sous Access 2010 :

Dans notre exemple, nous avons appelé la macro AutoExec. Elle va donc s’exécuter automatiquement à l’ouverture de la base. Fermez la base, puis rouvrez-la pour vérifier.

Et si la fonction VBA ne comporte pas de paramètre ?

Dans ce cas, vous devez quand même prévoir des parenthèses dans la macro. Vous taperiez, comme nom de fonction : AfficherMessage()

Vous aimerez aussi...

3 réponses

  1. beda dit :

    merci pour ce que vs faites pour nous apprenants

  2. Hervé Inisan dit :

    JeanPaulR > Le principe est le même. Les seules choses à changer, dans ce cas, sont les Sub de la procédure SendOLMail, qu’il faut remplacer par Function. Une fois la procédure transformée en fonction, elle peut-être appelée par la méthode décrite dans cet article. Mais il y a sans doute plus simple que :

    1. Avoir la fonction SendOLMail dans un module.
    2. Ecrire une macro pour appeler la fonction.
    3. Associer la macro à un bouton.

    Le plus simple étant :

    1. Garder la procédure SendOLMail en l’état (Sub / End Sub), dans un module.
    2. Faire apparaître les propriétés du bouton, onglet Evénement.
    3. Renseigner l’événement Sur clic sur « Propriété événementielle ».
    4. Cliquer sur les points de suspension, à droite. On obtient le code VBA du bouton.
    5. Appeler la procédure SendOLMail tel qu’expliqué dans l’article qui détaille SendOLMail.

    Ça paraît plus long à expliquer comme ça, mais il y a quelques avantages à moyen terme :

    • Pas de macro intermédiaire entre le bouton et le code VBA.
    • Donc moins de gestion et de maintenance à long terme, puisqu’on « économise » un objet dans la base.
    • Un seul langage (VBA) au lieu de deux (VBA et langage de macros Access).
    • L’approche VBA pure permet une meilleure gestion du mail. Notamment, s’il faut plus tard construire un mail de façon dynamique, en piochant des données dans le formulaire. Ça serait plus vite une « usine à gaz » par macro.

    Ouala !

  3. JeanpaulR dit :

    Bonjour,
    Mais quel code écrire dans function si l’on veut lancer votre procédure envoi d’Email par SendOLMail comme décrit dans votre post : ‘ENVOYER UN MAIL DEPUIS ACCESS, AVEC PIECES JOINTES. En fait le chainage complet pour lancer d’un bouton formulaire une macro « executercode » pour envoyer un mail avec votre code VBA.
    J’attends votre réponse avec impatience et vous en remercie par avance.
    Bonne soirée.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *