|
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 : |
|
|
|
| |
|
la notion de variable leur fait défaut. Exemple : si une macro ouvre un fichier, et si vous changez le nom du fichier, vous
devez corriger la macro en conséquence ; |
|
|
le branchement conditionnel est soit absent, soit très sommaire. Les actions d'une macro s'exécutent séquentiellement. Tout au
plus peut-on rendre une exécution conditionnelle ; |
|
|
le traitement des erreurs n'existe pas. Si une macro provoque une erreur d'exécution, elle affiche un message et s'arrête. |
|
|
|
|
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 : |
|
|
|
| |
|
elle fait gagner du temps ; |
|
|
elle diminue le risque d'erreurs. |
|
|
|
|
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 : |
|
|
|
| |
|
importation |
|
|
reformatage (modifications, suppressions) |
|
|
analyse (requêtes multiples) |
|
|
enregistrement (hors de la BDD, sous un format particulier) |
|
|
impression (états) |
|
|
expédition par courrier électronique |
|
|
exportation (vers une autre base ou un autre ordinateur), etc. |
|
|
|
|
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 "Nouveau" : la fenêtre de création
d'une macro s'ouvre. Il n'existe pas d'assistant, il faut se débrouiller tout seul. |
|
|
|
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 : |
|
|
|
| |
|
l'action "Agrandir" agrandit au maximum la fenêtre active, de telle sorte qu'elle
remplisse complètement la fenêtre Access ; |
|
|
l'action inverse, "Réduire", iconise la fenêtre active, et la place en bas à gauche
de la fenêtre Access ; |
|
|
l'action "Restaurer" rétablit la taille initiale de la fenêtre active agrandie ou
iconisée ; |
|
|
l'action "AfficherTousEnreg" synchronise une table ; |
|
|
l'action "ArrêtMacro" peut marquer la fin de la liste des actions de la macro, ou
arrêter conditionnellement la macro en cours d'exécution ; |
|
|
l'action "Bip" émet un bip sonore, pour attirer l'attention de l'opérateur ; |
|
|
l'action "TrouverSuivant" sélectionne l'enregistrement qui suit l'enregistrement
actif. |
|
|
|
|
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 : |
|
|
|
| |
|
Message : vous pouvez écrire le texte du message qui sera affiché. Mais vous pouvez aussi créer une expression qui
effectuera des calculs ou opérera sur des chaînes, à condition de la faire précéder du signe égal. Par exemple, saisissez
"=Date()" (sans les guillemets), pour afficher la date du jour. Ce sera toujours plus intéressant que d'afficher
"Hello folks", comme on le fait au début des cours de programmation ; |
|
|
Bip : précisez par "Oui" ou par "Non" si vous voulez que l'affichage du message s'accompagne d'un bip
sonore ; |
|
|
Type : définit l'image qui illustrera la boite de message. Pour la date du jour, "Information" fera
l'affaire ; |
|
|
Titre : définit le texte qui s'affiche en haut de la boite de dialogue. Par exemple, "Nous sommes le :"
convient. Notez que l'argument "Titre" peut être traité comme l'argument "Message". |
|
|
|
|
Il ne vous reste plus qu'à appuyer sur le bouton
"Exécuter". Le système vous demande d'enregistrer d'abord la macro, et vous propose le nom "Macro1", ce qui peut
convenir à votre première macro (pour une macro utile, le nom du service rendu serait plus avisé). Merveille ! cela marche (enfin,
nous l'espérons), et vous obtenez le message suivant, à la date près : |
|
|
 |
|
|
|
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
spécifique des macros. |
|
|
|
Sélectionnez votre macro : les icônes "Exécuter"
et "Modifier" deviennent actives. La seconde vous ramène
dans la fenêtre de définition des macros, où vous pouvez retravailler votre premier chef d'oeuvre à loisir. Par exemple, vous pouvez
remplacer "=Date()" par "=Temps()" pour obtenir l'heure, ou par "=Maintenant()" pour obtenir à la fois la
date et l'heure. |
|
|
|
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 : |
|
|
|
| |
|
Type transfert : nous permet de préciser "délimité" ; |
|
|
Format : dans la liste déroulante, nous retrouvons le format d'importation que nous avons créé lors de l'importation
manuelle ; |
|
|
Nom table : nous précisons la table dans laquelle les données seront introduites. Si cette table existe déjà, les
données seront rajoutées à celles déjà présentes ; |
|
|
Nom fichier : le chemin complet d'accès au fichier doit être inscrit ici (exemple : C:\Documents and
Settings\Administrateur\Bureau\Tutoriel\mag.txt) ; |
|
|
Contient noms de champs : la réponse est "Oui" quand la première ligne du fichier texte contient les noms des
champs et que l'on veut les conserver. Présentement, la réponse est "Non". |
|
|
|
|
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 ouvrons la table, car il est impossible de travailler dans une table fermée ; |
|
|
nous plaçons le curseur sur la première ligne ; |
|
|
dans le menu "Édition" nous choisissons "Supprimer l'enregistrement". Nous acquittons le message,
l'enregistrement disparaît, et le curseur passe automatiquement sur la ligne suivante ; |
|
|
nous répétons l'opération une deuxième fois ; |
|
|
nous répétons l'opération une troisième fois. |
|
|
|
|
Nous allons, dans la macro, retrouver à peu de choses près les mêmes étapes. Les actions utilisées sont les
suivantes : |
|
|
|
| |
|
OuvrirTable. Cette action ouvre effectivement la table (si elle n'est pas déjà ouverte).
Il y a trois arguments. Le premier "Nom table" permet de choisir le nom de la table dans la liste déroulante. Pour le
second ("Affichage"), la bonne valeur est "Feuille de données". Pour le troisième ("Mode données"),
le bon choix est "Modification" ; |
|
|
AtteindreEnregistrement. Cette action place le curseur sur une ligne spécifiée de la
table. Il y a quatre arguments, mais seuls les trois premiers nous concernent. La réponse à "Type objet" est
"Table", la réponse à "Nom objet" est le nom de la table, et la réponse à "Enregistrement" est
"Premier" de telle sorte que le curseur se place sur la première ligne. Si la table n'avait pas été ouverte par
l'action précédente, cette action arrêterait la macro avec affichage d'un message d'erreur ; |
|
|
Avertissements. En fixant l'argument "Avertissements actifs" à "Non",
nous rendons la macro silencieuse. Aucune confirmation ne nous sera demandée avant la suppression des lignes. Seuls les
messages inévitables (ex : message d'erreur) sont encore émis. Le but de ce silence est de gagner du temps, une macro étant
faite pour aller vite ; |
|
|
ExécuterCommande. Pour l'unique argument "Commande" il faut choisir
"SupprimerEnregistrement". Cette action supprime la première ligne de la table. La deuxième ligne devient la première, et
le curseur s'y trouve placé ; |
|
|
ExécuterCommande. Pour l'unique argument "Commande" il faut choisir
"SupprimerEnregistrement". Cette action supprime la première (ex-seconde) ligne de la table. La deuxième (ex-troisième)
ligne devient la première, et le curseur s'y trouve placé ; |
|
|
ExécuterCommande. Pour l'unique argument "Commande" il faut choisir
"SupprimerEnregistrement". Cette action supprime la première (ex-troisième) ligne de la table. La deuxième (ex-quatrième)
ligne devient la première, et le curseur s'y trouve placé ; |
|
|
ArrêtMacro. Cette action est facultative. Lorsqu'il n'y a plus d'actions à exécuter, la
macro s'arrête et les avertissements redeviennent actifs. |
|
|
|
|
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. |
|
|