Cours Access vba : introduction aux Macro Commandes
…
Une macro autonome n'est pas liée à un événement spécifique et peut être exécutée quelle que soit la fenêtre active.
Nous allons créer une macro qui va ouvrir la table Clients et son formulaire :
La partie supérieure de la fenêtre (le tableau) est destinée aux différentes actions qui vont composer la macro. La plupart des actions ont des paramètres (par exemple l'action OuvrirTable qui ouvre une table demande en paramètre le nom de la table qu'elle va ouvrir), les paramètres (par exemple ici, le nom de la table) sera indiqué dans la partie inférieure de la fenêtre.
Comme vous pouvez le constater, il existe un très grand nombre d'actions possible, en fait, tout ce qu'on peut faire dans Access se retrouve dans ce menu. Pour avoir la liste des actions possibles, utilisez l'aide intégrée à Access qui décrit le fonctionnement de chaque action.
Nous voulons ouvrir une table, nous choisissons l'action "OuvrirTable".
Comme vous pouvez le constater, dans le champ "Nom table" apparaissent les noms de toutes les tables de la base, on choisit "Clients".
Deux autres champs peuvent paramètrer l'action :
?? Affichage : détermine si la table sera ouverte en mode création ou en mode feuille
?? Mode données : Trois choix : Ajout (on peut ajouter des enregistrements à la table), Modification (on peut ajouter, modifier ou supprimer des enregistrements) et Lecture Seule (seule la consultation est permise).
Vous l'avez remarqué, le tableau de la fenêtre "Macros" contient plusieurs lignes, on peut exécuter plusieurs actions les unes à la suite des a
L'Action "OuvrirFormulaire" a plus de paramètres :
?? Affichage : identique aux tables
?? Mode données : identique aux tables
?? Nom Filtre : on peut indiquer ici le nom d'une requête contenant les critères nécessaires à la sélection des enregistrements.
?? Mode fenêtre : indique comment le formulaire va être affiché : Standard (comme défini dans Affichage), Masquée (le formulaire est ouvert et automatiquement caché), Icône (le formulair
?? Condition Where : plus tard...
Sauvez votre macro.
Comme pour les requêtes, cliquez sur l'icône 'Point d'exclamation'. Access va alors exécuter toutes les lignes de la macro et s'arrêter dès qu'il va rencontrer une ligne vide, ou dès qu'il va rencontrer l'action "ArretMacro".
Pour analyser le déroulement d'une macro, on peut l'exécuter pas à pas, c'est-à -dire, action après action. Pour cela :
 Access affiche la première action ainsi que ses paramètres, cliquez sur :
?? Pas à pas : pour exécuter cette a
?? Continuer : Pour poursuivre l'exécution de la macro en mode normal
Pour modifier une macro, ouvrez là en mode création et positionnez vous sur l'action à modifier, cliquez dessus avec le bouton droit : vous pouvez alors la supprimer ou en insérer une autre.
Certaines macros doivent être exécutées en réponse à un événement lié au formulaire (ouverture, fermeture, fermeture...), d'autres dépendent d'un événement lié à un contrôle du formulaire (clic, valeur du contrôle, etc.). Dans le premier cas, la macro doit être insérée dans la feuille de propriétés
Il faut définir précisément quel est l'événement qui va déclencher l'exécution de la
Prenons un exemple, nous voulons refuser l'enregistrement d'une commande si la date de cette commande n'a pas été saisie. (Nous pourrions dans les propriétés du champ date, indiquer dans la propriété Null Interdit Oui).
La qu
L'événement "passer à un nouvel enregistrement" est lié au formulaire et pas au contrôle "Date", l'événement sera donc associé au formulaire.
Voici la liste des principaux événements qui peuvent être associés à un formulaire :
Evénement Sur Ouverture La macro doit s'exécuter A l'ouverture du formulaire
Sur Fermeture A la fermeture du formulaire
Sur Activation Lorsque Access accède à un enregistrement du formulaire
Sur Insertion Lorsqu'on précise la valeur d'un champ d'un nouvel enregistrement
Sur Suppression Lorsqu'on va supprimer un enregistrement
Avant MAJ Après avoir quitté un enregistrement modifié et avant l'enregistrement des modifications
Après MAJ Après avoir quitté un enregistrement modifié et après l'enregistrement des modifications.
En résumé, ces événements concernent l'ouverture, la fermeture du formulaire et la gestion des enregistrements.
Evénement Sur Clic La macro doit s'exécuter : Quand on clique sur le contrôle
Sur Double Clic Quand on double-clique sur un contrôle
Sur Sortie Lorsqu'on quitte un contrôle
Avant MAJ Après avoir quitté un contrÃ
Après MAJ Après avoir quitté un contrôle modifié et après sa mise à jour
Dans notre exemple, il faut que la macro s'exécute lorsqu'on va accéder à un nouvel enregistrement, on va donc l'affecter à l'événement "AvantMAJ" du formulaire : il faut que la vérification de la bonne saisie de la date se fasse lorsque l'on veut changer d'enregistrement mais avant qu'Access n'enregistre quoi que ce soit.
Pour afficher un message pendant une macro, on utilise l'action "BoîteMsg", "BoîteMsg" va afficher une boîte de dialogue Windows avec le texte et les caractèristiques qu'on va indiquer dans les paramètres de l'action.
L'action "BoîteMsg" a les paramètres suivants :
?? Message : texte à afficher
?? Bip : Emet un bip sonore lors de l'affichage du texte
?? Type : Icône à afficher à côté du texte (point d'exclamation, d'interrogation, etc...) ?? Titre : titre de la fenêtre où va s'afficher le texte
Une fois le message d'erreur affiché, il va falloir positionner le curseur automatiquement sur le
?? AtteindreContrôle : Déplace le curseur sur un contrôle spécifié
?? AtteindrePage : Déplace le curseur sur le premier contrôle de la page spécifiée
?? AtteindreEnregistrement : Déplace le curseur sur l'enregistrement spécifié ou sur un nouvel enregistrement.
Nous devons déplacer le curseur dans le formulaire sur le contrôle du champ "Date", nous utiliserons donc l'action "AtteindreContrôle" :
Quoi de neuf dans cette fenêtre ?
Sur la première ligne on a la condition : si la date de la commande est vide, on affiche le message d'erreur, mais après avoir affiché l'erreur que fait-on ? on va faire plusieurs choses, et pour indiquer que les autres actions que l'on va faire
", autrement dit, à chaque fois qu'Access va rencontrer comme condition "...", il va reprendre la condition spécifiée explicitement plus haut.
Donc, après avoir affiché l'erreur, on va exécuter l'action "AnnulerEvénement". A quoi sert cette action ? Normalement, après avoir modifié le formulaire, Access va mettre à jour les champs correspondants dans les tables liés à ce formulaire. Juste avant de faire cette mise à jour, Access va appeler la macro associée à l’évènement « AvantMAJ ». La macro va être exécutée, puis la mise à jour sera faite. Il faut qu’on annule
Enfin, on va déplacer le curseur sur le contrôle "Date de la commande" grâce à l'action "AtteindreContrôle", Ainsi le curseur clignotera directement sur le contrôle où l’utilisateur devra saisir la date.
Choisissez l'événement auquel vous voulez associer la macro, dans le menu déroulant s'affichent toutes les macros existantes, on choisit "Date Obligatoire".
Une fois la macro associée à l'événement, il suffit d'entrer une commande dans laquelle on omet de saisir la date pour vérifier que la macro va s'éxecuter (message d'erreur et repositionnement sur le contrôle) :
On peut, grâce à une macro modifier le contenu d'un champ d'une table. Imaginons que nous voulions que le nom de chaque client saisi soit en majuscule, on pourrait bien sur le faire en modifiant la propriété "Masque de saisie" du contrôle "nom du client", mais nous allons voir comment le faire à partir d'une macro. Pouvoir modifier le contenu d'un champ lors d'un événement peut s'avérer très utile.
Nous allons créer une nouvelle macro et utiliser l'action "DéfinirValeur"
Quels sont les paramètres de l'action "DéfinirValeur" ?
?? Elément indique qu'est-ce qui est à modifier, ce peut être comme ici le nom d'un champ, mais ce peut être aussi une propriété d'un contrôle par exemple.
?? Expression : Indique la nouvelle valeur de l'élément indiqué précédemment, ce peut être une valeur indiquée explicitement, le contenu d'un autre champ, le résultat d'un calcul, ou, comme ici le résultat d'une fonction. La fonction "Majuscule( )" renvoie la chaîne de caractère passé en paramètre en majuscule.
Comme précédemment, on va affecter cette macro à l'événement "AvantMAJ" su formulaire.
Nous avions vu rapidement dans les formulaires que, parmi les contrôles existants, il y avait un contrôle nommé "Bouton de Commande". Ce bouton, placé sur un formulaire, permet d'exécuter soit n'importe quelle action d'Access, soit, et c'est ce qui nous intéresse ici, une macro.
Nous allons créer une macro qui imprimera le formulaire :
Un petit peu compliqué pour imprimer un bon de commande ? La macro comporte trois actions, pourquoi ?
Si on n'utilise que l'action "Imprimer", Access va imprimer tous les bons de commande, il faut donc limiter l'impression au bon de commande courant, pour cela, on procède en trois étapes :
?? D'abord, on appelle l'action "ExecuterCommande", "ExecuterCommande" permet d'exécuter toutes les opérations possibles dans Access, on va donc choisir parmi la liste proposée, l'action "SélectionnerEnregistrement", cette action va sélectionner l'enregistrement courant. Une fois cet enregistrement sélectionné, on va pouvoir l'imprimer.
?? Ensuite, on appelle l'action "Imprimer", parmi les paramètres de cette commande, il y a la définition de ce qui a à imprimer : toutes les pages, un groupe, une sélection, ... on choisit la sélection.
?? Enfin, on appelle l'action "AtteindreContrôle", cette action va positionner le curseur sur le contrôle passé en paramètre, ce qui a pour effet de supprimer la sélection.
 On insère ensuite un bouton de commande dans le formulaire, la fenêtre suivante s'affiche :
 On peut choisir toutes les actions possibles, parmi celles-ci, dans la catégorie "Divers", il y a "Executer une macro", après avoir cliqué sur suivant, Access nous demande le nom de cette macro, on choisit celle que l'on vient de créer, puis le texte ou l'icône du bouton.
Vous pouvez essayer, ca marche !
Si par la suite, vous allez regarder les propriétés du bouton qui vient d'être créé, vous verrez que la macro a été affectée à l'événement "Sur Clic", ce qui signifie, qu'à chaque fois qu'on cliquera sur le bouton, la macro se déclanchera, vous pouvez la placer ailleurs, par exemple sur l'événement "Sur Double Clic", il faudra alors double-cliquer sur le bouton pour imprimer.
Nous allons ajouter un bouton sur le bon de commande, ce bouton affichera les informations complêtes sur le client concerné par le bon de commande :
D'abord, on crée une macro qui va ouvrir le formulaire :
On indique qu'on ouvre le formulaire "Clients", et ici, on utilise la condition Where qu'on avait vu plus tôt, on va indiquer que dans le formulaire qui va être ouvert, le champ [Nclient] (numéro de client) va être égal à [Formulaires]![bon de commande + ]![Nom Client]. Ce qui signifie que le champ [Nclient] dans le formulaire "Clients" va être égal au contenu du contrôle "Nom Client" dans le formulaire "Bon de commande+".