I. Introduction▲
Mon ami, Benoît Lecodeur, m'a dit qu'il était devenu passionné depuis qu'il utilisait les macros pour automatiser des tâches, mais qu'il comprenait mal ce qu'était le VBA, pouvait-il l'utiliser seul ? Était-ce le nom du Visual Basic employé par les utilisateurs d'Office ? Etc.
Benoît Lecodeur n'étant pas un professionnel du développement et ne comptant pas le devenir, je décidai de lui faire un topo à sa portée pour clarifier les points essentiels et cadrer les choses les plus importantes.
II. Préambule▲
Ceci étant un tutoriel pour débutant, nous emploierons des notions générales sur lesquelles les puristes voudront bien fermer les yeux, de même que s'il n'est pas question de négliger les frottements pour les calculs nécessaires à l'envoi de satellites dans l'espace, c'est courant de le faire à des fins pédagogiques en terminale pour enseigner les bases de la physique.
On décrira donc, ici par exemple, le VBA comme un langage orienté objet sans approfondir la chose.
III. VBA l'origine : Les macro-commandes▲
Le VBA n'est pas apparu parallèlement avec les premières versions d'Office Windows. À l'origine, il y avait les applications Microsoft Office qui disposaient de macro-commandes classiques comme beaucoup de programmes (Lotus 1-2-3 et Multiplan (source Microsoftlien vers source Microsoft) en possédaient déjà, entre autres).
Une macro-commande est une suite d'instructions qui peut s'exécuter à l'aide d'une commande unique (clavier ou souris) et qui a été obtenue via l'enregistreur de macro-commandes. Celui-ci, une fois déclenché mémorise les actions effectuées par l'utilisateur jusqu'à ce qu'on le stoppe. Il mémorise ces actions dans un miniprogramme nommé macro-commande.
La particularité des programmes informatiques est qu'on peut généralement avoir accès aux lignes de code ainsi créées, ce qui n'est pas le cas des macro-commandes obtenues par le même moyen dans des appareillages courants tels que les télécommandes d'appareils électroniques, certaines manettes de jeux vidéo ou tout simplement la mémorisation d'un numéro de téléphone dans le répertoire d'un téléphone…
Les macro-commandes ont eu un succès considérable car elles permettaient d'automatiser des tâches récurrentes et fastidieuses relativement facilement et faisaient, ainsi, gagner énormément de temps et de fiabilité.
Le langage VBA en est la suite logique et permet d'aller beaucoup plus loin, tout en permettant à celui qui le veut de se cantonner à l'enrichissement des macros obtenues via l'enregistreur de macros disponible dans certaines applications.
IV. Les macro-commandes dans Office▲
Les macros étaient très utilisées dans les tableurs qui ont été le vecteur principal de leur développement et de celui du VBA.
Elles ont été intégrées en premier dans Excel de 1992 (N° 4) puis dans Excel 93 (N° 5) qui a été le premier programme Microsoft voyant apparaître le langage VBA (voir définition par la suite), ces deux versions utilisaient des feuilles de classeurs spécifiques pour stocker les macros dites XL4 (nom issu de la dernière version d'Excel avant l'ère VBA, elles ont été conservées depuis Excel 95 pour des raisons de compatibilité).
Word 95(N° 6) incluait lui WordBasic, un langage de macros spécifique à Word, Access possédait quant à lui Access Basic (tous ces langages étant incompatibles), etc.
Office 97 avec Excel 97 (N° 8) et Word 97, institutionnalise le VBA en l'incorporant à tous les logiciels de la suite Office comme langage de programmation et, surtout, en lui attribuant un éditeur de code à part entière : le VBE.
Il est à noter que les versions d'Excel 2010 d'Office sont toujours compatibles avec les macros XL4 que l'on peut appeler via le VBA pour des contextes très particuliers. Les macros XL4 recèlent des fonctions qui n'ont pas leurs équivalents directs en VBA, Microsoft a entrepris de compléter le VBA à ce niveau dans Excel 2010 pour permettre une migration complète des anciennes applications tournant encore. Aussi peut être pour permettre l'éradication de l'utilisation des macros XL4 ?
À partir d'Office 97, Microsoft a donc voulu homogénéiser les langages de macro-commandes entre les différentes applications et en développer la puissance pour permettre aux utilisateurs de programmer carrément des codes puissants au travers d'un langage « embarqué ».
V. Le VBA▲
Plutôt que de réinventer la poudre, ils ont fort opportunément utilisé les bases de Visual Basic (un langage de programmation à part entière de Microsoft) pour créer le VBA, sigle de Visual Basic for Application.
D'où les confusions nombreuses entre les deux langages, alors que, s'il y a de nombreuses similitudes (orientation objet et filiation de VBA), les différences dans leur emploi sont conséquentes.
Le VBA ne peut exister qu'au sein d'une application hôte. On ne peut accéder à son éditeur de façon séparée et celui-ci n'est accessible qu'au travers de l'application qui l'héberge.
Le VBA est basé sur la manipulation d'objets qui représentent les éléments principaux de l'application employée et d'interfaces de pilotage. Ce modèle objet est organisé selon un modèle hiérarchique d'éléments tels des matriochkas.
À la base, pour tous les programmes supportant le VBA, il y a l'objet Application qui représente le programme visé et sert de conteneur aux objets particuliers à ce programme.
On manipule ces objets par programmation via leurs propriétés (teinte d'une couleur par exemple), leurs méthodes (ajout d'un élément par exemple) et leurs événements (réaction à un clic de souris par exemple).
Les objets sont référencés au sein de bibliothèques d'objets qui permettent de disposer de toutes leurs caractéristiques selon l'environnement où l'on se trouve. On peut, à travers elles, piloter aisément une application supportant le VBA à partir d'une autre. Elles permettent aussi à d'autres langages objet de piloter Office (comme Visual Basic entre autres).
L'intérêt du VBA est aussi que la façon de le manipuler sera identique sur le fond pour tous les programmes qui le supportent. Il suffira de s'imprégner du modèle objet de l'application voulue pour la piloter.
Le fait que le VBA soit lié à une application entraîne aussi, qu'avant toutes choses, il est nécessaire de savoir manipuler l'application en question avant de se lancer dans la construction d'un programme qui la concerne.
Le VBA, comme tout langage, possède une syntaxe. Mais, en tant que langage de programmation, il ne tolère aucune erreur quant à celle-ci. Un espace omis ou mal placé, un point à la place d'une virgule et ce sera le blocage du programme (l'éditeur VBE nous aide bien sur ce point). C'est pourquoi, sur les forums d'entraide, les contributeurs paraissent si rigoristes. Le meilleur moyen de gagner du temps est d'étudier, en premier lieu, les bases du langage au travers de formations, de livres ou de tutoriels disponibles, ce qui est, de plus, plus agréable que de passer son temps à gérer des erreurs basiques.
Une autre particularité du VBA, qui découle de ce qu'on a déjà décrit, est que le code qui est produit est stocké dans le corps d'un fichier de l'application qui a servi au développement et non dans un fichier indépendant. Ceci explique aussi le fait qu'il est impossible de faire un programme exécutable indépendant en VBA. Le code produit au moyen du VBA sera toujours exécuté au travers du programme hôte (celui utilisé pour son écriture).
Une autre conséquence de la particularité du VBA en tant que langage hébergé est qu'au niveau de la documentation, des livres, des forums, vous trouverez rarement quelque chose ciblé VBA en général, mais toujours VBA pour XXXX (telle application).
Il n'en demeure pas moins qu'une fois ce concept de base maîtrisé, vous pourrez tout à fait consulter avec bonheur la littérature VBA liée à une autre application que celle que vous utilisez pour peu que le sujet traite de points qu'elles ont en commun ou qui font partie de ce qu'on pourrait considérer comme un tronc général du VBA.
Il conviendra toutefois d'utiliser en parallèle une alliée précieuse qui se nomme l'Aide VBA liée à l'application ! Celle-ci vous permettra généralement de prendre connaissance des subtilités diverses qui peuvent exister pour un élément apparemment identique dans divers contextes.
VI. Répercussions du VBA sur les formats de fichiers Office▲
Si pendant longtemps les fichiers Office contenant du code ne se distinguaient pas de façon précise, l'activité mal intentionnée des créateurs de virus, qui en ont tiré parti, a renforcé la création de filtres de sécurité par rapport à leur emploi, allant crescendo jusqu'à l'apparition de formats de fichiers particuliers à partir d'Office 2007.
À partir d'Office 2007, les fichiers comportant du code VBA ont une extension bien distincte à tel point que le fait d'enregistrer un fichier avec code sous un format de fichier ordinaire entraînera la disparition totale des tous les modules de code.
Présentation des nouvelles extensions de noms de fichiers par Microsoftlien Presentation des nouvelles extensions de noms de fichiers par Microsoft
VII. Le VBA en dehors d'Office Microsoft▲
D'autres applications, pas forcément de chez Microsoft, ont aussi opté pour le langage VBA pour permettre de programmer leur interfaçage telles que : AutoCad, MicroStation (CAO), Catia V5-6 (Dassault / CAO), Wordperfect Office X5 (Corel), CorelDraw (Corel), Visio, Solidworks (CAO), etc.
VIII. Le VBA en dehors d'Office Windows▲
Le VBA existe aussi dans certaines versions de Mac Office, la compatibilité entre les versions Windows et Mac étant limitée principalement par les différences de syntaxe des systèmes (séparateurs de chemins par exemple) et les modèles objets (contrôles Active X etc.).
IX. Conclusions▲
Connaître ces quelques notions de départ vous permettra de savoir dans quel cadre vous vous situez, de ne pas partir sur des choses irréalisables (.exe en VBA) ou mieux, d'imaginer des choses plus puissantes comme l'interaction entre plusieurs applications supportant le VBA.
Aussi et surtout, savoir, pour ceux qui utilisent les moteurs de recherche, distinguer sur quel genre de site vous avez atterri : Visual Basic, VBA pour l'application que vous cibliez ou VBA pour une autre application.
X. Remerciements▲
Je tiens à remercier :
Pour leur relecture et leurs conseils techniques : Heureux-oli, Pierre Fauconnier, omen999
Pour leurs relectures orthographiques : ClaudeLELOUP, CinePhil, zoom61