formateur informatique

Ajouter des articles à la facture client

Accueil  >  Bureautique  >  Access  >  Access Avancé  >  Ajouter des articles à la facture client
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 :


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.

Formulaire Access pour insérer des produits achetés dans la commande du client

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.

Table Access pour archiver temporairement les articles de la commande client

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]

Champ calculé de requête Access pour connaître le montant total acheté

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.

Ajouter un enregistrement de test dans la table Access des achats

Le champ calculé fait effectivement son oeuvre pour produire le total hors taxes de l'article passé en commande.

Total hors taxe de la commande calculé par la requête sur la table des achats

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,
Définir champs de réception de table pour requête Access Ajout

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,
Expression dynamique de correspondance avec formulaire pour insérer de nouvelles valeurs dans table par requête Ajout

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,
Requête Access pour ajouter dynamiquement les informations saisies sur le formulaire dans la table

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,
Lier un sous-formulaire et une requête pour résultats dynamiques sur formulaire Access
  • 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.

Formulaire Access de facturation clients sans code VBA

 
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