Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Ajouter des produits à la facture
Dans cette
formation Access, nous apportons la solution pour simuler la
facturation d'un client sans l'intervention du
code VBA. Dans la formation précédente, nous avions appris à enrichir un
formulaire en fonction des choix réalisés dans deux
listes déroulantes. La première permet de désigner un client. La seconde permet de sélectionner un produit à acheter.
Désormais, nous souhaitons ajouter chacun de ces produits à la commande, dans un sous formulaire. Cette action doit se produire au clic sur un bouton et intégrer la quantité achetée.
Source et présentation de la problématique
Il est nécessaire de reprendre les travaux là où nous les avions laissés. Ainsi, nous concentrerons l'étude sur les techniques permettant l'insertion des données sélectionnées dans des tables.
Comme l'indique le volet des objets Access sur la gauche de l'écran, cette
base de données est constituée de 4 tables. La
table Clients recense tous les clients déjà connus. La
requête dynamique Sel_Client a été conçue sur cette dernière pour extraire les informations d'un client sélectionné sur le formulaire. La
table Produits recense tous les articles disponibles à l'achat. La
requête dynamique Sel_Produit a été conçue sur cette dernière pour extraire les informations du produit désigné depuis le formulaire. La
table Remises ne nous intéresse pas dans ce cas pratique. La
table Com_Temp est particulière. Elle a été créée pour les besoins de cette application. Elle doit recevoir les informations des articles achetés au fur et à mesure de la création de la commande.
- Dans le volet de gauche, double cliquer sur la table Com_Temp pour l'afficher en mode feuille de données,
Elle est vide pour l'instant. Aucune commande n'est en cours.
Elle est prévue pour recevoir certaines informations. Pour chaque commande, nous devons renseigner la référence de l'article, sa désignation, son prix et la quantité achetée.
- Fermer cette table en cliquant sur la croix de son onglet,
- Dans le volet de gauche, double cliquer sur le formulaire Cli_Com pour l'exécuter,
- Choisir un numéro à l'aide de la première liste déroulante,
Comme vous le constatez, les informations correspondantes sur le nom et le prénom du client ainsi désigné, sont rapatriées.
- A l'aide de la seconde liste déroulante, choisir une référence produit,
Cette fois, ce sont les données de l'article correspondant qui sont extraites et restituées dans les zones de texte dédiées. Il s'agit des travaux que nous avons aboutis lors de la formation précédente.
Désormais, ces renseignements doivent être ajoutés les uns en dessous des autres, en fonction de la quantité tapée, dans la partie inférieure du
formulaire. Il s'agit d'un
sous formulaire vierge pour l'instant. En effet, il n'est encore lié à aucune source de données. Chaque insertion doit se produire au clic sur le
bouton Ajouter. Rappelez-vous du défit de ce cas pratique : Aucun code VBA ne doit intervenir.
Dans ce sous formulaire, c'est le niveau de détail décrit par la
table Com_Temp qui doit être restitué. Cependant, nous souhaitons une information supplémentaire. Il s'agit du total hors taxes acheté pour le produit. Ce total correspond à la multiplication du prix unitaire par la quantité commandée.
Le raisonnement est le suivant. A chaque clic sur le
bouton Ajouter, une
requête Action doit être exécutée pour insérer les informations de l'article commandé dans la
table Com_Temp. Mais ce n'est pas cette table qui doit servir de lien au sous formulaire puisque qu'elle ne propose pas l'information de synthèse sur le total par article. Donc, nous proposons de bâtir une
requête sélection sur cette table avec un
champ calculé. C'est lui qui doit réaliser les multiplications à la volée. En conséquence, cette requête doit servir de source pour nourrir le sous formulaire.
Requête Access de synthèse
Nous devons commencer par bâtir une requête sélectionnant toutes les informations de la
table Com_Temp. Et dans cette
requête, nous devons créer un
champ dynamique capable de calculer le montant total acheté, pour chaque
enregistrement. Nous avions appris à concevoir ces
champs calculés au travers de différentes formations.
- En haut de la fenêtre Access, cliquer sur l'onglet Créer pour activer son ruban,
- Dans la section Requêtes du ruban, cliquer sur le bouton Création de requête,
- Dans la boîte de dialogue qui suit, sélectionner la table Com_Temp,
- Puis, cliquer sur le bouton Ajouter et sur le bouton Fermer,
- Glisser tous les champs de la représentation schématique de la table vers la grille de requête,
- Après le dernier champ, créer le champ calculé THT comme suit :
THT:[qte_achat]*[produit_prix]
Un
champ calculé doit tout d'abord être désigné par son nom
THT suivi du symbole deux points (:). Ensuite, dans l'opération à réaliser, les champs impliqués doivent être spécifiés entre crochets.
- Enregistrer la requête (CTRL + S) sous le nom Com_Req,
- Puis, cliquer sur la croix de son onglet pour la fermer,
Si vous ajoutez un enregistrement arbitraire et temporaire dans la
table Com_Temp, vous pouvez constater l'incidence dans la
requête Com_Req.
Le
champ calculé fait effectivement son oeuvre pour produire le
total hors taxes de l'article passé en commande.
Requête Access d'insertion
Nous sommes en train de construire tous les objets nécessaires permettant d'ajouter des produits à la facture. La table de réception est la
table Com_Temp. La
requête Com_Req quant à elle, doit servir de source au sous formulaire. Mais pour que les articles apparaissent à chaque clic sur le bouton, encore faut il les ajouter dans la table. C'est la raison pour laquelle nous avons besoin de construire une
requête Ajout. Elle doit réceptionner les informations du formulaire pour les ajouter dans la table.
Si vous aviez ajouté un enregistrement test dans la
table Com_Temp, il est nécessaire de le supprimer préalablement.
- Cliquer sur l'onglet Créer en haut de la fenêtre Access pour activer son ruban,
- Dans la section Requêtes du ruban, cliquer sur le bouton Création de requête,
- Dans la boîte de dialogue qui apparaît, ne sélectionner aucune table,
- Puis, cliquer sur le bouton Fermer,
- Dans la section Type de requête du ruban Créer, cliquer sur le bouton Ajout,
- Dans la zone Ajouter à de la boîte de dialogue qui suit, choisir la table Com_Temp,
- Puis, valider par Ok,
Nous transformons ainsi la requête sélection classique en une
requête Ajout. Vous notez l'apparition de la zone
Ajouter à dans la grille de requête. Elle doit indiquer les champs de réception pour la table désignée.
- Dans les quatre premières colonnes, définir les champs respectifs de réception à l'aide de la liste déroulante qui se propose,
Nous devons maintenant définir quelles sont les valeurs à ajouter dans chacun de ces champs de réception. Ces données sont dynamiques. Elles dépendent des informations inscrites dans les contrôles du formulaire au moment de la demande. Nous devons donc exploiter le
générateur d'expression pour effectuer cette correspondance. Et ces expressions doivent être construites dans la
zone Champ de la grille de requête.
- Pour le premier champ de réception produit_ref, cliquer droit dans sa zone Champ,
- Dans le menu contextuel, choisir Créer,
- Dans la liste de gauche du générateur d'expression, déployer l'arborescence des formulaires jusqu'à sélectionner le formulaire Cli_Com,
- Dans la liste centrale, double cliquer sur le contrôle ref_prod,
- Puis, valider l'expression ainsi construite en cliquant sur le bouton Ok,
La syntaxe s'inscrit dans la zone Champ de la première colonne. Elle indique que la valeur sélectionnée dans la
liste déroulante ref_prod du
formulaire, doit être insérée dans le
champ produit_ref de la
table Com_Temp. Nous devons établir les correspondances pour les trois champs restants, selon le même protocole. Dans la deuxième colonne, nous devons établir la correspondance entre le
contrôle qte_achat du formulaire et le champ du même nom de la
table Com_Temp :
Formulaires![Cli_Com]![qte_achat]
Dans la troisième colonne, le lien doit être construit entre le
contrôle nom_prod du formulaire et le
champ produit_nom de la table de réception :
Formulaires![Cli_Com]![nom_prod]
Enfin, dans la quatrième colonne, la liaison doit être établie entre le
contrôle prix_prod du formulaire et le
champ produit_prix de la table de destination :
Formulaires![Cli_Com]![prix_pod]
- Construire ces trois syntaxes respectives à l'aide du générateur d'expression,
Cette requête d'insertion est dynamique. Elle ne peut être exploitée que lorsque le formulaire est actif. En l'absence de valeurs saisies, elle ne peut insérer aucune nouvelle donnée.
- Enregistrer cette requête (CTRL + S) sous le nom : Com_Ajout,
- Puis, cliquer sur la croix de son onglet pour la fermer,
Interactions pour l'ajout d'articles
Nous devons désormais imbriquer et articuler les différents éléments que nous avons construits. Au clic sur le
bouton Ajouter, les données du
formulaire doivent être insérées dans la
table Com_Temp. En conséquence, une macro doit être déclenchée pour exécuter la
requête Com_Ajout. Les éléments de la commande doivent être résumés dans le sous formulaire situé dans la partie inférieure du formulaire parent. Donc, nous devons définir sa source de données sur la
requête Com_Req. Souvenez-vous, c'est elle qui ajoute l'information dynamique sur le
total hors taxes, Ã partir de la
table Com_Temp, en fonction de chaque enregistrement inséré.
- Revenir sur le formulaire en mode conception,
- Sélectionner le sous formulaire nommé Detail_com,
- Activer l'onglet Données de sa feuille de propriétés,
- Régler sa propriété Objet source sur la requête Com_Req,
- Cliquer alors sur le bouton Ajouter pour le sélectionner,
- Activer l'onglet Evènement de sa feuille de propriétés,
- Cliquer sur le petit bouton à l'extrémité 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 qui permet d'empiler les actions. L'une d'entre elles consiste à exécuter la
requête Ajout. Et comme nous l'avions appris dans la
formation Access pour créer un formulaire d'ajout d'enregistrements, cette exécution déclenche des messages d'alerte système. Nous souhaitons les ignorer. Pour ce faire, en amont, nous devons ajouter une commande spécifique.
- Dans la section Afficher/Masquer du ruban création, cliquer sur le bouton Afficher toutes les actions,
- Dans la liste déroulante au centre de l'écran, ajouter l'action Avertissements,
Par défaut, son attribut Avertissements actif est réglé sur non. De fait, tous les potentiels messages systèmes seront interceptés et ignorés.
- En dessous, ajouter l'action OuvrirRequête,
- Dans la zone Nom de la requête, choisir la requête Com_Ajout,
- Régler sa propriété Mode de données sur lecture seule,
- En dessous, ajouter l'action AfficherTousEnreg,
Cette dernière action permet d'actualiser les enregistrements et les liaisons. Suite à l'exécution de la
requête Ajout en effet, son but est de réactualiser l'affichage de la
requête Com_Req, pour restituer la commande en cours de construction dans le
sous formulaire.
- Dans le ruban, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
- De retour sur le formulaire, réaliser le raccourci CTRL + S pour l'enregistrer à son tour,
- Puis, enfoncer la touche F5 du clavier pour l'exécuter,
- Désigner un client avec la première liste déroulante,
- Choisir une référence article avec la seconde liste déroulante,
- Taper une quantité achetée dans la zone de saisie prévue à cet effet,
- Puis, cliquer sur le bouton Ajouter,
Comme vous le remarquez, l'article est instantanément ajouté à la commande dont l'affichage est parfaitement restitué dans le
sous formulaire. Et comme la source de ce dernier est définie sur la requête du champ calculé, nous bénéficions du résultat de synthèse sur le
total hors taxes par article.
- De la même façon, ajouter de nouveaux articles avec d'autres quantités,
Tous les produits viennent s'ajouter les uns en dessous des autres. Nous avons donc réussi le tour de force de cette formation, consistant à résoudre une partie importante de la facturation client, sans faire intervenir le
code VBA. C'est une
requête Ajout qui est exécutée par une
action de macro au clic sur le
bouton du formulaire. Le résultat est restitué grâce à une requête se permettant de réaliser un calcul intermédiaire sur chaque nouvelle donnée insérée. La dernière
action AfficherTousEnreg est primordiale pour actualiser l'affichage et visualiser la commande.
Dans une prochaine formation, nous verrons, toujours sans code VBA, comment il est possible d'insérer tous les enregistrements d'une table dans une autre. En effet, il est nécessaire de finaliser l'
application de facturation. Et pour cela, la commande doit être validée, donc insérée dans les tables liées.