|
Chapitre 24 :
les macros |
|
|
1 - Introduction aux macros |
|
||||||||||
|
|
|
Le
terme "macro" est
l'abréviation de "macro-instruction". Une instruction (ou commande)
est un ordre donné à un ordinateur pour qu'il exécute une action. En langage
machine ou en assembleur, on manie des instructions élémentaires que
l'ordinateur comprend directement. Dans un langage de plus haut niveau
(exemple : Visual Basic, C, etc.), une instruction
entraîne en général l'exécution de plusieurs instructions élémentaires. Si
l'on monte encore d'un cran, on trouve la macro-instruction, dont l'exécution
correspond à celle de plusieurs instructions. En clair, une seule
macro-instruction entraîne l'exécution d'un grand nombre de tâches
élémentaires. |
|
|||||||||
|
|
|
Cependant,
les macros ne sont pas utilisées pour faire de la programmation à proprement
parler, et ce pour les raisons suivantes : |
|
|||||||||
|
|
|
|
|
|||||||||
|
|
|
Le
véritable usage des macros, c'est l'automatisation des tâches répétitives,
que l'on utilise Access ou tout autre logiciel. Une telle automatisation
présente deux avantages importants, qui justifient généralement le temps
passé à écrire les macros : |
|
|||||||||
|
|
|
|
|
|||||||||
|
|
|
Bien
entendu, il ne faut automatiser que des opérations qui ont été rodées manuellement,
et qui sont bien au point. Il s'agit là d'une remarque de bon sens, qui
déborde largement le cadre des macros. |
|
|||||||||
|
|
|
Les
macros sont très spécifiques d'un logiciel donné ; les macros
d'Access, par exemple, sont très différentes de celles d'Excel. On trouve des
macros dans de nombreux logiciels, et même dans certains systèmes
d'exploitation. Leur conception, leur facilité d'usage, et les services
qu'elles rendent, varient beaucoup d'un logiciel à l'autre. |
|
|||||||||
|
|
||||||||||||
|
|
2 - Le rôle des macros dans les SGBD |
|
||||||||||||||||||||||
|
|
|
Il
est fréquent qu'une BDD soit alimentée de manière régulière en données, et
que les nouvelles données fassent l'objet d'opérations récurrentes telles
que : |
|
|||||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||
|
|
|
Des
macros peuvent regrouper toutes les actions répétitives associées à
ces opérations, et c'est là leur principale application. |
|
|||||||||||||||||||||
|
|
|
Une
application secondaire des macros consiste à associer des actions à des
boutons. Tous les utilisateurs de SGBD qui aiment le décorum parsèment leurs
formulaires et leurs menus de boutons. Lorsqu'on examine la liste des actions
que permettent les macros d'Access, on voit clairement qu'un certain nombre
d'entre elles ont été créées dans ce but. C'est un aspect des macros que nous
signalons, mais que nous n'approfondirons pas. |
|
|||||||||||||||||||||
|
|
|
On
notera que les professionnels qui utilisent Access pour développer des
applications, se servent généralement assez peu des macros. Ils préfèrent
utiliser VBA (Visual Basic for Applications), une
extension du langage Visual Basic qui permet de
manipuler les objets d'Access, sans présenter les limitations des macros. Les
utilisateurs non professionnels se trouvent plutôt dans la situation inverse,
parce qu'apprendre à se servir des macros est beaucoup -- beaucoup -- plus
rapide que se familiariser avec VBA. C'est la raison pour laquelle nous avons
inclus ce chapitre dans le présent tutoriel dédié
aux bases de données relationnelles. |
|
|||||||||||||||||||||
|
|
|
Comme
pour les autres chapitres, nous utiliserons le SGBD Access comme support
pratique de ce tutoriel (ou tutorial, ou cours en
ligne). Nous n'examinerons pas toutes les actions utilisables pour créer une
macro, car il en existe une bonne cinquantaine. Notre but sera plutôt de
montrer ce que l'on peut faire, et de souligner ce que l'on ne peut pas
faire, avec les macros. Notre choix comporte fatalement une forte part
d'arbitraire, si bien que nous acceptons par avance toutes les remarques et
suggestions. |
|
|||||||||||||||||||||
|
|
||||||||||||||||||||||||
|
|
3 - L'objet macro dans Access |
|
||||||||||||||||||||||
|
|
|
"Getting started", comme
disent les anglophones ! Dans la colonne de gauche de la fenêtre
"Base de données", sélectionnez l'objet "Macro". Si vous
n'avez pas encore créé de macro, la fenêtre de droite est vide. Cliquez sur
le bouton |
|
|||||||||||||||||||||
|
|
|
Le
haut de la fenêtre comporte la grille de définition de la macro. La colonne
de gauche, intitulée "Action",
comporte une liste déroulante qui propose, par ordre alphabétique, toutes les
actions disponibles, de "Actualiser" à "TrouverSuivant".
Comme vous le constatez, une macro d'Acces est
constituée d'actions. Ces actions s'exécutent les unes après les autres, dans
l'ordre où vous les placez sur la grille. |
|
|||||||||||||||||||||
|
|
|
Toujours
dans le haut de la fenêtre, la colonne de droite permet d'écrire des commentaires.
Ils seront ignorés lors de l'exécution de la macro, mais ils se révéleront
bien utiles le jour où vous voudrez modifier une macro un peu ancienne. |
|
|||||||||||||||||||||
|
|
|
Le
bas de la fenêtre comporte, à gauche, une liste d'arguments spécifiques de
l'action que vous avez sélectionnée dans la liste déroulante. Certaines
actions très simples n'ont pas d'argument, mais c'est un peu l'exception.
Exemples : |
|
|||||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||
|
|
|
En
bas à droite de la fenêtre s'affiche un commentaire spécifique de l'action
que vous avez sélectionnée, ou de l'argument que vous êtes en train de
définir. En appuyant sur la touche de fonction F1, vous obtenez une aide contextuelle. |
|
|||||||||||||||||||||
|
|
||||||||||||||||||||||||
|
|
4 - L'affichage d'un message |
|
|||||||||||||
|
|
|
Nous
commencerons par un exemple fort simple (et fort classique), qui ne comporte qu'une
seule action. Cette dernière consiste à afficher une boîte de message, que
l'opérateur ferme en l'acquittant. |
|
||||||||||||
|
|
|
Dans
la grille de création de macro, choisissez l'action "BoîteMsg".
Cette fois, des arguments sont nécessaires : |
|
||||||||||||
|
|
|
|
|
||||||||||||
|
|
|
Il
ne vous reste plus qu'à appuyer sur le bouton |
|
||||||||||||
|
|
|||||||||||||||
|
|
|||||||||||||||
|
|
|||||||||||||||
|
|
|
Acquittez
le message et fermez la fenêtre de définition de la macro. Dans la partie
droite de la fenêtre "Base de données" figure désormais votre
macro, sous le nom "Macro1", précédée de l'icône |
|
||||||||||||
|
|
|
Sélectionnez
votre macro : les icônes |
|
||||||||||||
|
|
|
Les
messages sont souvent utilisés en fin de macro, pour avertir l'utilisateur qu'il
doit reprendre la main, et lui rappeler éventuellement ce qu'il doit faire. |
|
||||||||||||
|
|
|||||||||||||||
|
|
5 - L'importation de données |
|
||||||||||||||||
|
|
|
Nous
avons montré au chapitre précédent comment importer dans Access les données d'un
fichier texte. Si une telle opération est répétée régulièrement, on gagnera
du temps en l'automatisant à l'aide d'une macro. |
|
|||||||||||||||
|
|
|
Nous
avons vu que l'on pouvait enregistrer le format personnalisé d'importation
(boutons "Avancé...", puis "Enregistrer sous..."). Ce
format contient la plupart des réponses aux questions posées par l'assistant.
On peut le réutiliser à chaque importation manuelle, et nous allons nous en
servir pour créer la macro d'importation. |
|
|||||||||||||||
|
|
|
L'action
correspondant à une importation de fichier texte s'appelle "TransférerTexte"
et possède sept arguments, dont les cinq premiers seulement nous
concernent : |
|
|||||||||||||||
|
|
|
|
|
|||||||||||||||
|
|
|
La
macro est prête, il ne reste plus qu'à l'enregistrer, puis à l'exécuter. Bien
entendu, la macro n'est réutilisable que si les noms de fichier, de table, et
de format ne changent pas : nous butons là sur le fait que la notion de
variable n'existe pas dans les macros. En reprenant tel quel l'exemple du
chapitre précédent, nous obtenons le résultat déjà cité : |
|
|||||||||||||||
|
|
||||||||||||||||||
|
|
||||||||||||||||||
|
|
||||||||||||||||||
|
|
|
Dans
la version 2002 d'Access, l'importation via une macro est une opération
rapide (ce n'était pas le cas des versions plus anciennes). A titre
d'exemple : sur un PC de milieu de gamme, un fichier texte de
10 Mo, contenant 50.000 lignes de 10 champs chacune
(20 octets d'information en moyenne par champ), s'importe en moins de
10 secondes. |
|
|||||||||||||||
|
|
||||||||||||||||||
|
|
6 - La suppression d'enregistrements |
|
||||||||||||||||||||||
|
|
|
Nous
allons maintenant écrire une macro qui efface les trois premières lignes de
la table précédente. Rappelons-nous qu'une macro ne fait qu'enchaîner de
manière automatique des opérations qui sinon seraient effectuées une à une
par l'opérateur. Pour supprimer manuellement les trois premières lignes de la
table, nous procédons de la manière suivante : |
|
|||||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||
|
|
|
Nous
allons, dans la macro, retrouver à peu de choses près les mêmes étapes. Les actions
utilisées sont les suivantes : |
|
|||||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||
|
|
|
Enregistrez
la macro, et refermez sa fenêtre. Dans la fenêtre Access, placez côte à côte
la fenêtre "Base de données" et la fenêtre de la table dans
laquelle la macro opère. Lancez la macro d'un double-clic, et observez bien.
Dans la fenêtre de la table, les trois premières lignes disparaissent l'une
après l'autre en moins de 2 secondes. |
|
|||||||||||||||||||||
|
|
|
Si
vous le désirez, vous pouvez également exécuter la macro pas à pas pour voir
l'effet de chaque action. Ouvrez la macro en mode "Modifier",
activez l'icône "Pas à pas" de la barre d'outils, et lancez l'exécution
de la macro. La fenêtre suivante s'ouvre, qui vous permet d'exécuter la macro
pas à pas, de l'arrêter, ou de l'exécuter en continu. A chaque pression sur
le bouton "Pas à pas", ou sur la touche P, une action s'exécute.
Vous voyez ainsi la fenêtre s'ouvrir, le curseur se mettre en place, la ligne
s'effacer, etc. |
|
|||||||||||||||||||||
|
|
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
|
|
|
La
macro que nous venons de créer comporte sept actions. Chaque action correspond
en gros à une instruction en VBA. Vous voyez ainsi d'où provient le terme de
macro-instruction. |
|
|||||||||||||||||||||
|
|
|
On
peut regrouper les deux macros précédentes, si bien que la suppression des
trois premières lignes de la table suit immédiatement l'importation des
données. |
|
|||||||||||||||||||||
|
|
||||||||||||||||||||||||