Introduction à Access VBA

Voici une petite introduction à Visual Basic pour Applications, dans sa variante Access (VBA pour Access). Les concepts qui sont expliqués dans la suite sont également applicables à Excel (les exemples, par contre, ne fonctionneront que sous Access).

On démarrera par une introduction (un peu longue, mais nécessaire !) pour les personnes qui ne connaissent pas VBA, avant de terminer par un petit exemple pratique.

Information
Cet article a été publié en tant qu’article invité sur le blog de Lydia Provin (Votre assistante)

Qu’est-ce que VBA ?

Le VBA est un langage de programmation intégré à de nombreux logiciels Microsoft (et non Microsoft, d’ailleurs). Ce langage est fourni pour automatiser des tâches dans votre logiciel, ou en étendre les possibilités.

Ai-je vraiment besoin de VBA dans Access ?

A terme, oui, sans doute, si vous construisez une application professionnelle, ergonomique et évolutive.

Les raisons ? Si vous pratiquez Access, vous savez que les formulaires constituent l’interface graphique de votre base de données (l’endroit où les utilisateurs consultent les données, les mettent à jour). Maintenant, dès que votre projet va grandir, vous allez vite vouloir améliorer l’ergonomie de votre application, ajouter des contrôles de saisie, ou automatiser un grand nombre de tâches (par exemple, un publipostage avec Word). C’est là qu’intervient VBA…

Quelle est la différence entre les macros Access et le VBA ?

En fait, il y a trois langages de programmation dans Access, pas moins !

  • Le langage SQL sert à manipuler les données : c’est grâce à lui que les requêtes fonctionnent ; en d’autres termes, lorsque vous créez une requête graphiquement, Access écrit du code SQL en arrière-plan, pour interroger vos tables.
  • Le langage de macros permet de programmer assez simplement, en français, et par le biais de listes déroulantes. Malgré son nom, il n’a strictement aucun rapport avec les macros Excel, qui se programment en VBA (ci-dessous).
  • Le langage VBA (qui nous intéresse ici) : plus complexe que les macros Access, mais également bien plus riche.

Les macros sont tentantes, parce que plus simples. Mais elles ont également des limites, et sont rapidement difficiles à maintenir et à faire évoluer. C’est pour ces raisons que VBA est un choix plus intéressant.

Où taper du code VBA ?

Le code VBA est tapé dans des modules. Un module est un simple container de texte, une page blanche façon Word, dans laquelle vous tapez du langage VBA.

Un peu comme dans Word, vous devrez respecter une certaine écriture dans votre code informatique : un langage informatique dispose d’une structure, d’une grammaire, d’une orthographe. Un guillemet oublié ou une virgule mal placée, et votre programme ne fonctionnera pas !

La mauvaise nouvelle 😉

Excel dispose d’un enregistreur de macros, qui peut écrire du code VBA automatiquement, pendant que vous faites des actions classiques (déplacement, Copier/Coller, création d’un graphique, etc.). Très pratique pour écrire des macros Excel sans connaître le langage VBA sur le bout des doigts !

Malheureusement, Access ne propose pas vraiment d’outil équivalent : vous devrez donc écrire le VBA par vous-même… 😉

Un petit exemple

Voici un petit exemple pratique, qui permet d’illustrer certaines techniques VBA. Le scénario est le suivant :

  • Ma base de données Access dispose d’une table de personnes (appelée tbl Personnes). Cette table contient seulement quelques champs pour la démonstration, vous pouvez bien sûr l’enrichir.
    Exemple de table Access
  • J’ai construit un formulaire frm Personnes à partir de cette table.
    Exemple de formulaire Access
  • L’idée est de faire en sorte qu’à chaque fois que l’utilisateur se place sur une fiche Personne, le nom et prénom de cette personne s’affichent en rappel dans la barre de titre du formulaire. Le résultat attendu est celui-ci :
    Actualisation automatique de titres sur un formulaire Access

Pour obtenir ce résultat, sur Access 2007 à 2013 :

  1. Ouvrez votre formulaire en mode Création.
  2. Faites apparaître les propriétés du formulaire, en cliquant sur l’icône Feuille de propriétés, sous l’onglet Création du ruban.
    L'icône Feuille de propriétés
  3. Activez l’onglet Événement, dans cette fenêtre Propriétés.
  4. Cliquez dans l’événement Sur activation, qui se produit à chaque fois que l’utilisateur change de fiche dans un formulaire (que ce soit par le clavier, ou par les boutons de déplacement en bas du formulaire). Voir plus loin le paragraphe « A propos des événements ».
  5. Cliquez sur les points de suspension à droite de l’événement.
    Accès au code Visual Basic d'un événement
  6. Dans la boîte qui se présente, choisissez l’option Générateur de code (sous entendu : Générateur de code VBA).
    Choix d'un générateur
  7. Vous basculez dans un nouveau logiciel appelé VBE (Visual Basic Editor, ou l’Editeur Visual Basic). Un module est affiché (il s’agit du module associé à notre formulaire), un bloc de code VBA est créé, et votre curseur positionné à l’intérieur.
    Un bloc de code délimité ainsi par Sub et End Sub s’appelle une procédure en VBA (vous l’appelleriez une macro dans Excel ; on emploie moins ce terme « macro » dans Access VBA, du fait de la confusion avec l’autre langage évoqué plus haut).
    Un événement VBA
  1. A la position du curseur, ajoutez du code VBA de façon à obtenir ce qui suit. Les lignes démarrant par une apostrophe sont des commentaires (vous pouvez taper ce que vous voulez après l’apostrophe, comme notes personnelles ; Access ne prendra pas ces lignes en compte).

  1. Par précaution, il est toujours utile de cliquer sur le menu Débogage / Compiler. Cette option permet de préparer votre code VBA pour l’exécution, et elle en profite pour vérifier si la syntaxe est correcte. En cas d’erreur, pointez les lignes de code surlignées, rectifiez-les, puis recompilez !
  2. C’est terminé ! Vous pouvez ouvrir votre formulaire, vous déplacer de fiche en fiche : la barre de titre se modifie automatiquement. Certes, ce n’est pas encore spectaculaire, mais l’ergonomie du formulaire est meilleure. Et vous avez pu tester la notion d’événement, ainsi que l’impact de VBA sur l’interface graphique.
    Mise à jour automatique de titres sur un formulaire Access
à propos des événements

Comme dans la vraie vie, un événement VBA est « quelque chose qui se produit à un instant précis ». Dans Access, l’événement se déclenche généralement suite à une action de l’utilisateur : ouvrir ou fermer un formulaire, se déplacer dans un formulaire, cliquer sur un bouton, etc.

Associer du VBA à un événement permet d’intervenir à un moment clef du fonctionnement d’Access, et de lui ajouter un comportement sur mesure. La difficulté étant, lorsqu’on est débutant, de trouver l’événement adapté au besoin !

Quelques explications complémentaires

Pour aller plus loin dans la technique, voici quelques compléments :

  • Me (« Moi », en anglais) désigne le formulaire en cours (celui dans lequel vous avez tapé votre code VBA). D’autres syntaxes sont possibles, l’idée est d’aller à l’essentiel dans cet article.
  • Caption est la légende d’un formulaire (ce même réglage que vous trouvez dans les propriétés du formulaire). L’intérêt ici est que nous modifions cette légende dynamiquement, en VBA.
    Légende (Caption) d'un formulaire
  • Me.Nom et Me.Prénom sont les champs du formulaire (et, par extension, de la table associée).
  • Enfin, l’opérateur « & » (qui existe également dans Excel) permet de « concaténer » (coller) plusieurs éléments de texte pour en faire une phrase complète. Si vous écrivez x = "lundi" & "mardi", x est alors égal à "lundimardi« . Pour ajouter un espace, on écrirait : x = "lundi" & " " & "mardi". Comme dans Excel, les chaînes de texte sont délimitées par des guillemets.
  • J’ai supposé que le titre d’en-tête (sur le fond gris en haut du formulaire) avait été créé automatiquement par Access, et qu’il s’appelait par conséquent Auto_Entete0. Si tel n’est pas le cas, notre petit programme VBA échouera à l’exécution. Si votre titre s’appelle autrement, corrigez-le dans le volet Propriétés (onglet Autres, propriété Nom).

J’espère que ce tutoriel vous a donné le goût d’approfondir le langage VBA. Ne vous formalisez pas si vous débutez et que certains ordres vous échappent : une langue ne s’apprend pas en un jour… mais vous avez franchi la première étape !

Vous aimerez aussi...

2 réponses

  1. bobe dit :

    bon jour Herve
    j’utilise ce code dans mon petite base de donnee et sa marche tres tres bien
    mais quand je change l’option regional de mon windows xp ( arabe pour les programme unicode ) me déclenche un erreur de communication ole ou active x voici L’erreur (Cette erreur se produit lorsqu’un événement ne peut pas être exécuté parce que Microsoft Office Access ne peut pas détecter l’emplacement de la logique correspondante. Par exemple, si la propriété OnOpen d’un formulaire est définie sur la valeur =[Field], cette erreur se produit car Access s’attend à ce qu’un nom de macro ou d’événement soit exécuté lors du déclenchement de l’événement.)
    es qu’il ya une methode pour change la langue ds l’option regionale de systeme sans faire dysfonctionne la base de donnee et merci

Laisser un commentaire

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