Suite à des demandes d’abonnés concernant le VBA, j’ai proposé à Hervé Inisan du blog Le grenier Access d’écrire un article invité à ce sujet, comme je l’ai proposé il y a quelque temps à Thierry, mais, cette fois-ci, sur Access :)
Bonjour à tous, je me présente : Hervé Inisan, consultant et formateur en informatique. J’ai été gentiment invité par Lydia à vous proposer un article sur Microsoft Access, qui est l’un de mes domaines d’intervention.
À ce titre, j’ai écrit une dizaine d’ouvrages sur Access, et j’ai depuis 2001 la mention « Most Value Professional » (MVP) attribuée par Microsoft.
Enfin, j’anime le site http://www.self-access.com et le blog http://grenier.self-access.com avec des tutoriels, des forums…
Voici une petite découverte de 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.
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 ?
À 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.
- J’ai construit un formulaire frm Personnes à partir de cette table.
- 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 :
Vous retrouverez cette base de données dans l’Espace Membres.
Pour obtenir ce résultat, sur Access 2007 à 2013 :
- Ouvrez votre formulaire en Mode Création .
- 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.
- Activez l’onglet Événement, dans cette fenêtre Propriétés.
- 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 « À propos des événements ».
- Cliquez sur les points de suspension à droite de l’événement.
- Dans la boîte de dialogue qui se présente, choisissez l’option Générateur de code (sous-entendu : Générateur de code VBA) et cliquez sur Ok.
- Vous basculez dans un nouveau logiciel appelé VBE (Visual Basic Editor, ou l’Éditeur 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).
- À 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).
Private Sub Form_Current()
‘ Modifier la barre de titre (légende) du formulaire
Me.Caption = « Fiche de : » & Me.Nom & » » & Me.Prénom
‘ Modifier le titre placé en en-tête
‘ en y recopiant la légende du formulaire
Me.Auto_EnTete0.Caption = Me.Caption
End Sub
- 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 !
- 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.
À 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.
- 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 une 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 !
Téléchargez « Introduction à Access VBA (article invité) » au format PDF
Je vous propose un fichier annexe dans l’Espace Membres contenant la base de données utilisée dans ce tutoriel.