Accueil Recherche | Plan Technique | Liens | Actualités | Formation | Emploi | Forums | Base
TUTORIEL cerig.efpg.inpg.fr 
Vous êtes ici : Accueil > Formation > Tutoriels > Bases de données relationnelles > Les macros (début)
        Révision : 03 janvier 2003
 
                  Les bases de données
relationnelles
                 
Chap.
précéd.
Plan du
tutoriel
Liste des
tutoriels
Chap.
suivant
 
Chapitre 26 : les macros (début)
 
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 :
Boite affichée par la macro
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é :
Résultat de la macro d'importation
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.  
Exécution d'une macro pas à pas
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.
Chapitre précédent Plan du tutoriel Liste des tutoriels Chapitre suivant
Accueil | Technique | Liens | Actualités | Formation | Emploi | Forums | Base
Copyright © CERIG/EFPG 1996-2003
Réalisation et mise en page : J.C. Sohm