formateur informatique

Macros Access pour formulaires de création

Accueil  >  Bureautique  >  Access  >  Access Avancé  >  Macros Access pour formulaires de création
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Formulaires de création

Cet exercice Access s'inscrit dans la suite logique de l'application des acquis sur les macros. Nous disposons d'une application offrant de nombreux outils. Parmi eux, les formulaires permettant de créer de nouveaux clients et produits, sont en attente de finalisation. Dans les exercices sur les requêtes, nous en avons créé certaines capables d'ajouter des informations dans les tables. Dans cet exercice, il s'agit de les relier aux formulaires pour prélever dynamiquement les données à insérer. L'enjeu consiste alors à exécuter ces requêtes depuis le formulaire sur ordre, soit au clic sur un bouton. Et c'est là que les macros entrent en jeu. Nous allons donc faire interagir ces différents objets Access pour fabriquer des instruments totalement opérationnels.

Source et présentation de la problématique
Dans l'exercice précédent, nous avons actualisé les données des formulaires d'action offrant des listes déroulantes. Grâce à une action de macro, nous avons réussi à importer toutes les informations attachées. A chaque étape nous progressons. Nous devons donc récupérer les travaux là où nous les avons laissés. Il s'agit d'une sécurité que nous avons mise en place pour restreindre l'accès à l'application. C'est une macro AutoExcec qui exploite la fonction Access BEntrée. Cette dernière génère une boîte de dialogue avec une zone de saisie. Dès que le mot de passe est validé, le formulaire principal de navigation apparaît. Néanmoins, la base de données étant issue d'une source externe, nous devons encore l'activer.
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
Cette action a pour effet de regénérer la base de données. De fait, le mot de passe est de nouveau demandé.
  • Saisir le mot de passe abc et valider par la touche Entrée,
  • Cliquer sur le dernier onglet (Outils actions) du formulaire de navigation,
Mot de passe administrateur requis pour accéder aux formulaie Access Actions

Cette fois, c'est un mot de passe administrateur qui est requis. Il sécurise l'accès à ces formulaires spécifiques.
  • Taper le mot de passe abc123 et valider par Entrée,
Dès lors, une nouvelle navigation se propose.

Navigation verticale des formulaires Access Actions imbriquée dans onglets horizontaux

Tous les formulaires d'action sont accessibles par un jeu d'onglets, cette fois disposés à la verticale. Seuls les deux premiers nous intéressent dans cet exercice. Nous devons rendre fonctionnelles la création d'un nouveau client et la création d'un nouvel article.

Le formulaire pour créer un client est actif par défaut. L'utilisateur doit renseigner toutes les informations demandées et cliquer sur le bouton Créer Client. Cette action doit insérer les données récoltées dans la table Clients.
  • Cliquer sur le deuxième onglet intitulé Créer un produit,
Formulaire Access à développer pour créer de nouveaux produits

Fort logiquement, le principe est le même. Après avoir renseigné toutes les informations demandées, l'utilisateur doit cliquer sur le bouton Créer produit pour procéder à l'insertion des données dans la table source. Ce sont ces deux boutons que nous devons rendre fonctionnels. Un clic doit enclencher une macro exécutant une requête Ajout dont les données sont dynamiquement récoltées depuis le formulaire, au moment de la demande.

Pour matérialiser ces liaisons dynamiques, nous avons besoin de connaître les noms des contrôles hébergeant les informations saisies. Nous proposons donc d'accéder à ces deux formulaires indépendamment.
  • Fermer le formulaire de navigation en cliquant sur la croix de son onglet,
  • Dans le volet de navigation, cliquer droit sur le formulaire F_creer_client,
  • Dans le menu contextuel, choisir Mode création,
Pour faire un état des lieux, la feuille de propriétés doit être visible. Comme vous le savez, c'est le bouton du même nom dans le ruban contextuel Création qui permet de l'afficher comme de la masquer.
  • Cliquer tour à tour sur la liste déroulante et les quatre zones de texte pour consulter leurs noms dans la feuille de propriétés,
Consulter les noms des contrôles sur formulaire Access grâce à la feuille de propriétés

Comme vous le remarquez, ils se nomment respectivement : Civilite, Nom, Prenom, CP et Ville. Ce sont ces noms d'objets qui doivent être pointés par la première requête pour procéder à l'ajout d'information qu'ils contiennent.
  • Fermer le formulaire en cliquant sur la croix de son onglet,
  • Dans le volet de navigation, cliquer droit sur le formulaire F_creer_produit,
  • Dans le menu contextuel, choisir Mode création,
  • Cliquer tour à tour sur les cinq zones de texte et les deux listes déroulantes pour consulter leurs noms dans la feuille de propriétés,
Ils se nomment donc respectivement : Reference, Designation, Prix, Poids, Visites, Stock et Promo. Ces noms d'objet sont à retenir.

Requêtes dynamiques d'insertion
Dans les exercices sur les requêtes, nous avions appris à créer des requêtes d'ajout. Nous allons répliquer ce que nous savons pour réaliser l'insertion de ces données. Et pour récolter ces informations depuis le formulaire, c'est le générateur d'expression qui permet d'établir la correspondance.
  • Fermer le formulaire en cliquant sur la croix de son onglet,
  • En haut de la fenêtre Access, cliquer sur l'onglet Créer pour activer son ruban,
  • Dans la section Requêtes, cliquer sur le bouton Création de requête,
  • Dans la boîte de dialogue qui suit, cliquer sur le bouton Fermer pour n'ajouter aucune table,
  • Dans le ruban Créer, cliquer sur le bouton Ajout,
  • Dans la boîte de dialogue qui suit, désigner la table Clients avec la liste déroulante,
Définir table de destination pour requête Ajout Access à lier au formulaire

Nous transformons ainsi une requête classique en requête insertion. La table Clients est désormais définie comme la table de réception des données à ajouter.
  • Cliquer sur le bouton Ok pour valider ces réglages,
La grille de requête, en bas de l'interface, se dote d'une nouvelle ligne intitulée : Ajouter à. Nous devons y spécifier les 5 champs de réception pour la table Clients.
  • Dans les 5 premières colonnes, définir respectivement les champs Client_civilite, Client_nom, Client_prenom, Client_dep et Client_ville,
Définir les champs de réception pour la requête ajout dynamique Access

Nous avons volontairement ignoré le champ Client_id. Il s'agit de la clé primaire auto-générée. C'est ainsi que nous l'avions définie dans les tous premiers exercices sur les tables.

Désormais, les données respectives à insérer doivent être renseignées dans la zone Champ, pour chaque colonne. C'est là qu'il s'agit d'établir la liaison avec le nom du contrôle correspondant, issu du formulaire, pour réceptionner son information au moment de la demande.
  • Cliquer droit dans la zone Champ pour la première colonne (Client_civilite),
  • Dans le menu contextuel, choisir la commande Créer,
Nous affichons ainsi le générateur d'expression.
  • Dans la liste de gauche, déployer l'arborescence des formulaires jusqu'à sélectionner le formulaire F_creer_client,
  • Dans la liste du centre, double cliquer sur le contrôle Civilite,
Expression de correspondance entre champ de requête Ajout et formulaire Access

Il s'agit de la liste déroulante des civilités sur le formulaire. Aussitôt, la syntaxe de correspondance s'inscrit dans la partie supérieure du générateur d'expression :

Formulaires![F_creer_client]![Civilite]
  • Cliquer sur le bouton Ok pour la valider,
L'expression s'inscrit alors dans la zone Champ de la première colonne. La civilité renseignée sur le formulaire sera ajoutée dans le champ Client_civilite de la table Clients, au moment du clic sur le bouton du formulaire. Nous devons reproduire le même processus de liaison pour les quatre autres champs.
  • Dans la deuxième colonne, générer l'expression suivante :
Formulaires![F_creer_client]![Nom]
  • Dans la troisième colonne, générer l'expression suivante :
[Formulaires]![F_creer_client]![Prenom]
  • Dans la quatrième colonne, générer l'expression suivante :
Formulaires![F_creer_client]![CP]
  • Dans la cinquième colonne, générer l'expression suivante :
Formulaires![F_creer_client]![Ville]
  • Enregistrer la requête sous le nom R_creer_client,
Maintenant qu'elle existe, son exécution doit être ordonnée par une action de macro au moment du clic sur le bouton.

Expressions de correspondance de requête Ajout Access avec informations du formulaire au moment de la demande

Mais avant cela, nous devons bâtir la seconde requête pour l'insertion dynamique d'un nouveau produit. Le procédé est strictement identique. Nous devons adapter la table, les champs et noms de contrôles.
  • Fermer la requête R_creer_client,
  • Puis, créer la requête R_creer_produit,
Cette requête doit créer de nouveaux enregistrements dans la table Produits. Les correspondances dynamiques respectives des champs doivent être les suivantes :

produit_ref : Formulaires![F_creer_produit]![Reference],
produit_nom : Formulaires![F_creer_produit]![Designation],
produit_prix : Formulaires![F_creer_produit]![Prix],
produit_poids : Formulaires![F_creer_produit]![Poids],
produit_vues : Formulaires![F_creer_produit]![Visites],
produit_stock : Formulaires![F_creer_produit]![Stock],
produit_code : Formulaires![F_creer_produit]![Promo],


Requête Access dynamique pour créer de nouveaux articles en fonction des données du formulaire au moment de la demande

Les deux requêtes dynamiques sont désormais en attente d'exploitation. Elles doivent être fermées.

Exécuter une requête sur un formulaire
La suite des opérations est triviale. En effet, le plus dur de la conception est passé. Nous devons désormais déclencher l'exécution de ces requêtes aux clics sur les boutons. C'est maintenant que les macros entrent en jeu.
  • Dans le volet de navigation, cliquer droit sur le formulaire F_creer_client,
  • Dans le menu contextuel, choisir Mode création,
  • Dans la vue en conception, sélectionner le bouton Créer Client,
  • Activer l'onglet Evènement de sa feuille de propriétés,
  • Cliquer sur le petit bouton situé à l'extrémité droite de son évènement Au clic,
  • Dans la boîte de dialogue, choisir Générateur de macro et valider par Ok,
Nous basculons ainsi dans l'éditeur de macro Access.
  • Avec la liste déroulante, choisir l'action OuvrirRequête,
  • Dans la zone Nom de la requête, choisir R_creer_client,
  • Dans la zone Mode données, choisir Lecture seule,
Macro Access pour exécuter une requête insertion de données au clic sur le bouton de formulaire

Dans tous les cas, cette requête ne s'ouvrira pas. En effet, il ne s'agit pas d'une requête sélection. Elle s'exécutera donc au clic sur le bouton désigné.
  • Dans le ruban Création, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
Avant de procéder à un premier essai, nous proposons de calibrer l'autre bouton, dont la vocation est de fermer le formulaire en cours.
  • Sélectionner le bouton Fermer Formulaire,
  • Dans sa feuille de propriétés, cliquer sur le petit bouton de son évènement Au clic,
  • Dans la boîte de dialogue, choisir Générateur de macro et valider par Ok,
  • Dans l'éditeur de macro, choisir l'action FermerFenêtre,
  • Dans la zone Type d'objet, choisir Formulaire,
  • Dans la zone Nom d'objet, désigner le formulaire F_creer_client,
  • Dans la zone Enregistrer, choisir Oui,
Action de macro Access pour fermer le formulaire au clic sur un bouton

Cet attribut permet de sauvegarder les éventuelles modifications sans message de confirmation.
  • Dans le ruban Création, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
Nous sommes de retour sur le formulaire en mode création.
  • Cliquer sur l'icône de la disquette dans la barre d'accès rapide pour l'enregistrer,
Nous mettons ainsi à jour la liaison entre les boutons et leur macro.
  • Enfoncer la touche F5 du clavier pour exécuter le formulaire,
  • Taper le mot de passe Administrateur : abc123, puis valider par la touche Entrée,
  • Renseigner les 5 informations requises,
  • Puis, cliquer sur le bouton Créer Client,
Créer un nouveau client au clic sur le bouton de formulaire Access déclenchant une macro exécutant une requête dynamique

Aussitôt, une alerte système apparaît. En effet, la requête va toucher au coeur de la base de données pour greffer un nouvel enregistrement dans la table Clients.
  • Valider cette alerte ainsi que celle qui suit,
La vue reste alors figée sur le formulaire. Ceci est tout à fait naturel dans la mesure où aucune autre action n'est enclenchée après la requête Ajout. Nous aurions pu commander l'ouverture de la table Clients pour visualiser le résultat.
  • Cliquer sur le bouton Fermer Formulaire,
Ainsi, nous pouvons attester qu'il est fonctionnel.
  • Dans le volet de navigation, double cliquer sur la table Clients,
  • Puis, atteindre la fin de ses enregistrements,
Nouvel enregistrement en double dans la table Clients créé au clic depuis le formulaire Access

L'enregistrement est bien présent. Par contre, il apparaît en doublon. Ce phénomène étonnant s'explique pourtant fort logiquement, et c'est tout l'intérêt de cette formation. Il existe deux procédés pour créer un formulaire d'ajout. Le premier est plus complexe mais aussi plus puissant pour paramétrer les actions dans l'enchaînement de l'insertion. Il s'agit de la méthode que nous venons de démontrer exécutant une requête dynamique par action de macro. Le deuxième consiste à bâtir le formulaire sur la table d'origine et à basculer sa propriété Entrée de données sur Oui. Dès lors, le simple fait de fermer ce dernier au clic sur le bouton, suffit à déclencher un évènement générant l'insertion du nouvel enregistrement.

A vous donc de choisir la méthode qui vous convient. Mais force est de constater qu'il n'est pas très logique d'exécuter ce genre d'opération à la fermeture du formulaire. C'est pourquoi, nous proposons d'apporter certains correctifs, dont la neutralisation des messages d'alerte Access au moment de l'exécution.
  • Supprimer l'un des deux enregistrements en double,
  • Puis, fermer la table Clients,
  • Dans le volet de navigation, cliquer droit sur le formulaire F_creer_client,
  • Dans le menu contextuel, choisir Mode création,
Par défaut, c'est le formulaire qui est actif. Nous allons en profiter pour régler sa fameuse propriété d'insertion de données.
  • Activer l'onglet Données de sa feuille de propriétés,
  • Puis, basculer sa propriété Entrée de données sur Non,
Empêcher formulaire de créer nouvel enregistrement en double à la place de la macro

Désormais, l'insertion automatique ne doit plus se produire. Le deuxième bouton doit simplement se contenter de fermer le formulaire. Mais pour exploiter notre méthode, notre formulaire ne doit plus être lié à sa source de données afin d'éviter toute modification inopinée.
  • Vider la propriété Source du formulaire,
  • Puis, pour chaque zone de saisie, vider la propriété Source contrôle,
  • Faire de même pour la liste déroulante des civilités,
  • Sélectionner maintenant le bouton Créer Client,
  • Activer l'onglet Evènement de sa feuille de propriétés,
  • Cliquer sur le petit bouton de son évènement Au clic,
Comme des actions sont déjà attachées à cet évènement, nous basculons cette fois directement dans l'éditeur de macro. Nous allons enrichir cette dernière. Certaines actions spéciales ne sont pas proposées par défaut. Access considère qu'elles s'adressent à des utilisateurs aguerris. Et c'est le cas de l'action consistant à neutraliser les alertes système.
  • Dans le ruban Créer, cliquer sur le bouton Afficher toutes les actions,
  • Déployer ensuite la liste déroulante située sous l'action OuvrirRequête,
  • Choisir l'action Avertissements et conserver son attribut Avertissements actifs sur Non,
  • Puis glisser son bloc au-dessus de l'action OuvrirRequête,
Elle doit effectivement intervenir en amont pour intercepter les alertes déclenchées.
  • Déployer la liste déroulante du dessous,
  • Tout en bas de la liste, choisir l'action ZoneMessage,
  • Dans la zone Message, saisir l'information suivante : Le client a été créé avec succès,
  • Dans la zone Bip, choisir Non,
  • Dans la zone Titre, taper le texte : Confirmation,
Action de macro Access pour confirmer création enregistrement avec message dans boîte de dialogue

Tous les réglages étant finalisés, il ne nous reste plus qu'à tester.
  • Dans le ruban Créer, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
  • De retour sur le formulaire, cliquer sur l'icône de la disquette dans la barre d'accès rapide,
  • Enfoncer la touche F5 du clavier pour l'exécuter,
  • Saisir le mot de passe abc123,
  • Renseigner toutes les informations du nouveau client,
  • Puis, cliquer sur le bouton Créer client,
Message sur formulaire Access pour confirmer création nouveau client par action de macro

Comme vous le constatez, les alertes système ne se déclenchent plus et laissent place à notre message personnalisé.
  • Valider ce dernier puis cliquer sur le bouton Fermer Formulaire,
  • Ouvrir la table Clients et atteindre la fin des enregistrements,
Le nouveau client a parfaitement été inséré et cette fois, il n'apparaît pas en double.

A titre de mise en pratique, vous devez désormais paramétrer le second formulaire pour permettre la création d'un nouveau produit. Vous pouvez préférer la première méthode, celle du formulaire d'insertion automatique. C'est pourquoi, lors d'un exercice nous avions réalisé et conservé ces réglages. Mais dans ce cas, il est préférable de supprimer le bouton de création. Idéalement, le second bouton, après avoir commandé la fermeture du formulaire doit le rouvrir dans l'enchaînement. Il apparaîtra ainsi vidé de ses informations et l'insertion aura bien eu lieu. Nous avions démontré la construction de cette insertion automatique à l'occasion d'une formation.

Mais dans le cas de notre application, ce formulaire est amené à être exploité depuis le formulaire de navigation principal. Il est donc encapsulé dans la construction par onglets. De fait, sa fermeture n'est pas du meilleur goût. Pour cette seconde méthode, vous devez donc :
  • Basculer la propriété Entrée de données du formulaire F_creer_produit sur non,
  • Vider sa propriété Source,
  • Vider la propriété Source contrôle de toutes les zones de texte et listes déroulantes,
  • Déclencher l'action FermerFenêtre (Type : Formulaire, Nom : F_creer_produit, Enregistrer : Oui) au clic sur le second bouton,
  • Déclencher les actions Avertissements, OuvrirRequête et ZoneMessage, au clic sur le premier bouton,
Actions de macro Access pour créer de nouveaux produits depuis le formulaire par exécution de requête liée

N'oubliez pas d'enregistrer toutes les modifications, y compris celles du formulaire. Pour confirmer le bon fonctionnement, sachez qu'un tri croissant sur les stocks est actif dans la table Produits. De fait, le nouvel article n'apparaîtra pas nécessairement à la fin des enregistrements.

Nous le verrons dans les prochains exercices, l'imbrication des formulaires dans des navigations à plusieurs étages révèle des surprises. Les liaisons dynamiques sont fortement remises en cause.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn