formateur informatique

Formulaire Access de commande à onglets

Accueil  >  Bureautique  >  Access  >  Access Avancé  >  Formulaire Access de commande à onglets
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 :


Alimenter les commandes

Dans les exercices Access précédents, nous avons finalisé la conception des formulaires d'action. Et comme ils sont encapsulés dans des formulaires de navigation, nous avons dû construire des expressions de correspondance assez complexes. C'est ainsi que les requêtes ont pu récolter les données des contrôles pour agir sur les tables sources. Dans cet exercice, nous reprenons le formulaire le plus important. Il s'agit de celui destiné à facturer les clients. Dans un premier temps, l'objectif consiste à ajouter les articles achetés à la commande. Et comme ce formulaire est lui-même imbriqué dans une navigation à onglets, des expressions de correspondance appropriées sont nécessaires. Il est néanmoins situé au premier étage de cette navigation et non au deuxième comme dans les exercices précédents.

Sources et présentation de la problématique
Notre application doit une fois de plus évoluer pour tendre vers l'objectif final. Il est donc tout d'abord nécessaire de la récupérer au dernier indice. La décompression fournit le fichier de la base de données accompagné d'un fichier texte. Ce dernier renferme la syntaxe de correspondance nécessaire à nos travaux. C'est elle qui permet de bâtir les expressions capables d'atteindre les contrôles encapsulés dans un formulaire de navigation simple.
  • Double cliquer sur le fichier de la base de données pour l'ouvrir dans Access,
  • Dans la boîte de dialogue qui s'impose, taper le mot de passe d'accès : abc,
  • Cliquer ensuite sur le bouton Activer le contenu du bandeau de sécurité,
  • Puis, renseigner de nouveau le mot de passe : abc, et valider,
L'activation de la base de données émanant d'une source externe provoque sa régénération. C'est la raison pour laquelle le mot de passe est demandé deux fois lors de la première ouverture. Le formulaire de navigation principal se propose par défaut grâce à une macro AutoExec.
  • Cliquer sur le quatrième onglet intitulé Facturation pour atteindre son formulaire,
Formulaire Access pour créer les commandes des clients

Nous accédons ainsi à l'interface qui doit permettre de construire les commandes du client. Il s'agit du formulaire F_Commandes imbriqué dans ce système de navigation par onglets.

Si vous sélectionnez un identifiant client à l'aide de la première liste déroulante, vous constatez que toutes les informations attachées sont instantanément rapatriées. Si vous choisissez une référence article avec la seconde liste déroulante, vous notez de même que tout le détail correspondant est importé.

Désormais, un clic sur le bouton Ajouter doit construire la commande dans la zone du sous formulaire. Pour le client désigné, le détail de l'article avec sa quantité achetée doit se cumuler à la liste des références commandées.

Bouton de formulaire Access pour ajouter tour à tour les articles et leur détail à la facture

Pour cela, nous devons remplir une table avec ces informations. Et cette table doit servir de source de données au sous-formulaire.
  • En haut du volet de navigation, double cliquer sur la table Com_Temp,
Elle est vide comme vous le remarquez. C'est elle en effet qui est prévue pour recevoir le détail des articles achetés par les clients. C'est donc cette table que nous allons enrichir à chaque clic sur le bouton Ajouter du formulaire de facturation. Et pourtant, ce n'est pas celle que nous allons exploiter pour enrichir le sous-formulaire.
  • Dans le volet de navigation, cliquer droit sur la requête Com_Req,
  • Puis, dans le menu contextuel, choisir Mode création,
Requête Access avec champ calculé pour synthétiser total de la commande du client construite depuis le formulaire

Nous basculons ainsi dans l'éditeur de requête Access. Cette requête est conçue sur la table Com_Temp. Mais elle offre une information supplémentaire précieuse. Un champ calculé, nommé THT, livre le total commandé par article acheté.

Pour chaque article acheté, nous devons donc certes alimenter la table Com_Temp. Ainsi, la requête Com_Req livrera les totaux hors taxes instantanément. C'est donc elle qui doit servir de source de données au sous-formulaire.

Alimenter la commande par requête Ajout
La technique consiste donc à bâtir une requête insertion capable de prélever les données issues du formulaire. Elle doit alors être exécutée au clic sur le bouton par action de macro. Ainsi, chaque article sera inséré dans la table Com_Temp avec son détail. Dès lors, nous pourrons lier le sous-formulaire et la requête Com_Req qui restituera toutes ces informations avec le total hors taxes par ligne.

Souvenez-vous néanmoins que ce formulaire de facturation est amené à être exploité depuis le formulaire de navigation. Il est donc encapsulé. De fait, pour établir la liaison, la requête Ajout doit exploiter la syntaxe de correspondance archivée dans le fichier texte, à la racine du dossier de décompression.
  • Fermer la table ainsi que la requête et le formulaire,
  • 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, cliquer sur le bouton Fermer pour n'ajouter aucune table,
  • Dans le ruban Créer de l'éditeur de requête, cliquer sur le bouton Ajout,
  • Dans la boîte de dialogue qui surgit, désigner la table Com_Temp,
Créer une requête Access Ajout pour recevoir les articles de la commande du client

Nous transformons ainsi la requête classique en requête Ajout. Désormais, la table Com_Temp est définie comme celle devant recevoir les nouvelles données à insérer.
  • Cliquer sur le bouton Ok pour valider ce réglage,
Vous notez l'apparition d'une ligne nommée Ajouter à dans la grille de requête. C'est sur cette ligne et dans différentes colonnes que nous devons spécifier les champs de réception.
  • Ajouter les champs produit_ref, qte_achat, produit_nom et produit_prix,
Désigner les champs pour recevoir les données dynamiques de la requête Ajout Access

Le premier champ, produit_numC, est destiné à recevoir le numéro de la commande. Cette information sera connue à validation de la facture, lors de la création du nouvel enregistrement dans la table Commandes. Temporairement, nous y inscrirons le chiffre zéro. Pour tous les autres en revanche, il convient d'établir la liaison avec les contrôles correspondants du formulaire.

Le champ produit_ref doit recevoir l'information de la liste déroulante nommée Reference. Le champ produit_nom correspond au contrôle Designation. Le champ produit_prix doit être lié au contrôle nommé Prix. Enfin, la correspondance doit être établie entre le champ qte_achat et le contrôle Qte. Pour l'instant, nous ne considérons pas l'éventuelle promotion en vigueur sur l'article. Nous simplifions la problématique. Nous l'exploiterons en temps voulu.
  • A la racine du dossier de décompression, double cliquer sur le fichier texte pour l'ouvrir,
  • Sélectionner intégralement la syntaxe proposée (CTRL + A) et la copier (CTRL + C),
  • Puis, revenir dans l'éditeur de requête Access,
  • Cliquer droit dans la zone Champ de la deuxième colonne (produit_ref),
  • Dans le menu contextuel, choisir Créer pour afficher le générateur d'expression,
  • Coller (CTRL + V) l'expression de correspondance,
  • Puis, ajouter le nom du contrôle à lier entre crochets, soit : [Reference],
Liaison dynamique entre requête Access et contrôles de formulaire pour ajouter de nouveaux articles à la commande

L'expression dynamique est donc la suivante :

Formulaires![_F_navig_principal]![SousFormulaireNavigation].[Formulaire]![Reference]
  • Cliquer sur le bouton Ok du générateur d'expression pour la valider,
Comme elle est inscrite dans la colonne du champ produit_ref, elle indique que la valeur issue de la liste déroulante du formulaire y sera insérée.
  • En suivant le même procédé, bâtir les expressions dynamiques pour les autres champs :
Qte_achat :
[Formulaires]![_F_navig_principal]![SousFormulaireNavigation].[Formulaire]![Qte],
produit_nom :
[Formulaires]![_F_navig_principal]![SousFormulaireNavigation].[Formulaire]![Designation]
produit_prix :
[Formulaires]![_F_navig_principal]![SousFormulaireNavigation].[Formulaire]![Prix],
  • Enregistrer la requête (CTRL + S) sous le nom R_Ajout_Commande,
  • Puis, la fermer en cliquant sur la croix de son onglet,
Elle apparaît désormais listée dans la catégorie des requêtes. Elle est repérée par une icône explicitement différente, indiquant qu'il s'agit d'une requête action d'ajout.

Ajouter les articles à la commande
Cette requête doit désormais être exécutée au clic sur le bouton du formulaire, par action de macro. Il va aussi s'agir de définir la source de données du sous formulaire.
  • Dans le volet de navigation, cliquer droit sur le formulaire F_Commandes,
  • Dans le menu contextuel, choisir Mode création,
  • Dans la vue en conception, cliquer sur le bouton Ajouter pour le sélectionner,
  • Activer ensuite l'onglet Evènement de sa feuille de propriétés,
  • Cliquer alors sur le petit bouton à l'extrémité de son évènement Au clic,
  • Dans la boîte de dialogue qui suit, choisir Générateur de macro et valider par Ok,
Nous basculons ainsi dans l'éditeur de macro Access. Une liste déroulante se propose pour définir les actions à exécuter au moment du clic sur le bouton. Mais comme nous l'avons appris lors des exercices précédents, l'une d'entre elles n'est pas disponible par défaut. Elle consiste à neutraliser les alertes système dues à l'exécution d'une requête action. Pour jouir de la librairie complète des actions, un bouton du ruban Création doit être actionné.
  • Dans le ruban Création, cliquer sur le bouton Afficher toutes les actions,
  • Déployer ensuite la liste déroulante de l'éditeur,
  • Choisir tout d'abord l'action Avertissements,
  • Conserver son attribut Avertissements actifs réglé sur Non,
Ainsi placée en entête des actions à suivre, elle permettra de neutraliser ces fameuses alertes.
  • Dans la liste du dessous, choisir la commande Si,
Une condition doit être satisfaite en effet. Pour ajouter un article à la commande, encore faut-il qu'une référence et une quantité aient été désignées.
  • Dans la zone Expression conditionnelle, écrire l'expression suivante :
[Reference]<>'' Et [Qte]<>''

Comme vous le savez, un champ s'exprime entre crochets. Grâce à l'inégalité, nous vérifions qu'ils ne sont pas vides, donc renseignés. Et c'est l'opérateur Et qui permet de recouper les deux critères.
  • Dérouler alors la liste du dessous et choisir l'action OuvrirRequête,
  • Dans la zone Nom de la requête, choisir R_Ajout_Commande,
  • Puis, régler son attribut Mode Données sur Lecture seule,
  • Déployer la liste déroulante du dessous et choisir l'action AfficherTousEnreg,
Cette action est importante. Nous l'avons exploitée à maintes reprises dans nos formations et exercices. Elle permet de mettre à jour les liaisons et sources de données. C'est elle qui permettra de rafraîchir le contenu de la requête Com_Req et donc du sous formulaire. A ce titre, ce dernier n'est pas encore lié.
  • Cliquer ensuite sur le lien Ajouter sinon en bas à droite du bloc Si,
  • Dans la liste déroulante qui se propose, choisir l'action ZoneMessage,
  • Dans la zone Message, saisir l'indication : Une référence et une quantité doivent être spécifiées,
  • Régler l'attribut Bip sur Non et saisir le titre suivant : Erreur,
Actions de macro Access pour alimenter la facture du client depuis le formulaire

La macro est terminée. Nous devons désormais nous soucier de la liaison du sous formulaire.
  • Dans le ruban Création, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
  • De retour sur le formulaire, cliquer sur le sous-formulaire pour le sélectionner,
  • Activer ensuite l'onglet Données de sa feuille de propriétés,
  • Dans sa propriété Objet source, choisir la requête Com_Req : Requête.Com_Req,
  • Cliquer alors sur la disquette de la barre d'accès rapide pour enregistrer les modifications,
  • Puis, fermer le formulaire en cliquant sur la croix de son onglet,
Comme vous le savez en effet, ce dernier est amené à être exploité uniquement depuis le formulaire de navigation principal.
  • Dans le volet de navigation, double cliquer sur le formulaire _F_navig_principal ,
  • Activer ensuite son onglet Facturation,
  • Choisir une référence client avec la première liste déroulante,
  • Choisir un code article avec la seconde liste déroulante,
  • Saisir une quantité achetée, puis cliquer sur le bouton Ajouter,
Comme vous le remarquez, toutes les informations de l'article s'ajoutent dans le détail de la commande, dans le sous-formulaire. Et grâce au champ calculé de la requête, l'information du total par article vient se greffer.
  • Ajouter d'autres articles avec d'autres quantités,
Construction de la commande du client par ajout des articles avec quantités depuis le formulaire Access

Comme le formulaire est relativement grand, à chaque ajout, nous sommes obligés de recaler son affichage. Mais nous le verrons, lorsque nous épurerons l'espace de travail, il occupera toute la place disponible. De fait, le problème ne se posera plus.

Calculer le total de la commande
Avant de finaliser cet exercice qui est une étape de la facturation, nous devons récolter la somme des totaux hors taxes. Ce résultat de synthèse doit être affiché dans la zone de texte du montant total. Elle est située à droite de la zone de saisie pour la quantité achetée.
  • Fermer le formulaire _F_navig_principal,
  • Dans le volet de navigation, cliquer droit sur le formulaire F_Commandes,
  • Dans le menu contextuel, choisir Mode création,
  • Sélectionner alors la zone de saisie du montant total,
  • Puis, activer l'onglet Données de sa feuille de propriétés,
  • Dans sa propriété Source contrôle, saisir l'expression suivante :
=RechDom('Sum([THT])';'Com_Req')

Nous avons découvert et compris l'intérêt de la fonction Access RechDom dans les exercices précédents. Elle peut être exploitée avec un troisième paramètre pour définir la condition. Elle permet d'extraire l'information de champ stipulé en premier paramètre à partir de la table désignée en second paramètre. Ici, nous réalisons une opération de synthèse sur le champ THT. Il s'agit de la somme. Tous les articles sont concernés. Donc aucune condition n'est à émettre.
  • Cliquer sur l'icône de la disquette dans la barre d'accès rapide pour enregistrer,
  • Puis, fermer le formulaire F_Commandes,
  • Exécuter alors le formulaire _F_navig_principal puis activer son onglet Facturation,
Nous retrouvons les traces de notre précédente commande. En effet, cet exercice est une étape. Tant que la facture n'est pas validée, la table temporaire n'est pas vidée. Nous pourrions néanmoins déclencher une macro à l'ouverture ou à la fermeture du formulaire pour vider cette table, en exécutant une requête. Bref, nous sommes ici en phase de développement. Donc, nous poursuivons.
  • Choisir un identifiant client puis ajouter des articles à la commande,
Consolider le total de la commande du client sur le formulaire Access grâce à la fonction RechDom

Comme vous pouvez le voir, le résultat de synthèse sur le total de la commande en cours, s'actualise parfaitement à chaque ajout d'article.

Remarque : A l'affichage, les résultats monétaires sont arrondis à deux décimales. Cela explique quelques petits écarts visuels. Mais, les données considérées pour les calculs sont bien les valeurs strictes, à la décimale près.

Quoiqu'il en soit, l'implémentation de la commande depuis un formulaire de navigation à onglets, est un succès. Dans la prochaine étape, nous devrons valider la facture du client. Il va s'agir de créer la commande dans la table parente et d'insérer le détail des articles achetés dans la table dépendante. A l'issue, la table temporaire devra être vidée. De nombreuses requêtes très spécifiques sont à prévoir.

 
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