formateur informatique

Valider et archiver les commandes des clients

Accueil  >  Bureautique  >  Access  >  Access Avancé  >  Valider et archiver les commandes des clients
Livres à télécharger


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

Abonnez-vous gratuitement à la chaîne Youtube Rossetti Stéphane .
Sujets et formations similaires :


Facturer les clients

Dans l'exercice Access précédent, nous avons réussi à construire la commande d'un client. Chaque article acheté se greffe à la suite des autres dans le sous-formulaire. Désormais, nous devons valider cette commande. Tout le détail des achats est inséré dans une table temporaire, grâce à une requête Ajout, exécutée par action de macro, au clic sur le bouton.

La table Commandes doit recevoir la synthèse. Il s'agit du montant total et de la date de la commande. De fait, un nouveau numéro de commande est automatiquement attribué, grâce à la clé primaire auto-incrémentée. Ce numéro doit être réceptionné pour créer toutes les lignes dépendantes dans la table liée Detail_commandes. Elle doit recevoir l'information détaillée sur chaque article acheté.



Base de données source
Avant de poursuivre les travaux, nous devons commencer par réceptionner l'application au dernier indice. La décompression offre le fichier de la base de données accompagné d'un fichier texte. Celui-ci renferme la syntaxe de correspondance nécessaire pour atteindre les contrôles du formulaire. Souvenez-vous, ce dernier est inscrit dans une navigation à onglets. De fait, il est considéré comme un sous formulaire et non comme le formulaire parent.
  • Double cliquer sur la base de données pour l'ouvrir dans Access,
  • Saisir le mot de passe d'accès : abc, puis valider,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
  • Saisir de nouveau le mot de passe : abc, du fait de la régénération,
Le formulaire de navigation principal se propose par défaut. Il regroupe tous les outils de gestion de cette application. Ils sont accessibles par les onglets respectifs.
  • Cliquer sur l'onglet Facturation pour afficher son formulaire,
  • A l'aide de la première liste déroulante, choisir un identifiant client,
Toutes les informations attachées sont instantanément rapatriées dans les contrôles prévus à cet effet.
  • Avec la seconde liste déroulante, choisir un code article,
Tout le détail du produit désigné est aussitôt importé et affiché.
  • Saisir une quantité achetée et cliquer sur le bouton Ajouter,
Le détail de l'article est immédiatement inscrit dans le sous-formulaire. La commande est en cours de construction. C'est une requête avec un champ calculé qui sert de source de données. C'est la raison pour laquelle nous profitons du résultat de synthèse en bout de ligne. Il s'agit du total hors taxes pour l'article, selon la quantité achetée.
  • Avec la seconde liste déroulante, choisir un nouvel article,
  • Saisir une autre quantité et cliquer sur le bouton Ajouter,
Ce deuxième produit s'ajoute à la commande en dessous du précédent. Vous notez la présence de l'information de synthèse, au-dessus du sous formulaire, à droite de la quantité achetée. Elle se met à jour à chaque achat et renseigne sur le total hors taxes de la commande en cours. Ce résultat est précieux pour archiver les données.

Interface Access pour construire les commandes et facturer les clients

Désormais, c'est un clic sur le bouton Valider qui doit enclencher les actions permettant d'archiver la facture du client.
  • En haut du volet de navigation, double cliquer sur la table Commandes pour l'afficher,
Table Access des commandes clients à alimenter automatiquement depuis le formulaire

Elle est vide à ce stade. Nous n'avons pas encore facturé de client. L'information sur le montant total doit être enregistrée, dans le champ Com_montant. Pour établir la liaison avec la table Clients, le numéro du client doit être rappelé dans le champ Com_client. Il est connu, il s'agit de l'identifiant choisi depuis le formulaire à l'aide de la première liste déroulante. La date s'inscrit automatiquement et le numéro de la commande s'auto-incrémente.
  • Dans le volet de navigation, double cliquer sur la table Detail_commandes,
Table Access du détail des commandes clients à enrichir automatiquement depuis le formulaire

Naturellement, elle est vide elle aussi. Cette table offre tout le détail des articles achetés, pour le numéro de commande à rappeler, issu de la table Commandes. Dans les exercices sur les tables, nous avions fractionné l'information et relié ces tables entre elles, grâce aux clés primaires et étrangères.

Nous devons y inscrire la référence de l'article ainsi que la quantité achetée, pour tous les produits de la commande. Ils sont tous enregistrés dans la table Com_temp, qui par le biais de sa requête, restitue les données dans le sous formulaire. Mais cette inscription doit se faire avec le numéro de commande (Det_com) fraîchement créé dans la table parente Commandes. Nous allons donc devoir être en mesure de le récupérer à la volée.



Créer la commande
Nous sommes en phase d'entraînement et de développement. Nous proposons de procéder par étapes. Dans un premier temps, nous souhaitons créer la synthèse de la commande dans la table Commandes. Nous verrons ensuite comment récupérer son numéro pour créer le détail attaché à la commande. Cela signifie que nous serons obligés de supprimer manuellement nos essais, tant que le processus complet d'insertion n'est pas bouclé.

Premièrement, une requête Ajout est nécessaire. Elle doit réceptionner dynamiquement deux informations sur le formulaire : L'identifiant du client à facturer et le montant total de la commande. Les noms des contrôles respectifs sont Id et Montant. C'est par ces noms d'objets que nous pouvons établir la liaison. Mais souvenez-vous, le formulaire est encapsulé dans une navigation à onglets. Pour les atteindre, nous devons descendre la hiérarchie des objets les encapsulant. Donc, la syntaxe du fichier texte, situé à la racine du dossier de décompression, est nécessaire.
  • Fermer les deux tables ainsi que le formulaire de navigation,
  • 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 apparaît, désigner la table Commandes,
Construire une requête Access Ajout pour créer automatiquement de nouvelles commandes clients depuis le formulaire

Nous spécifions ainsi la table à enrichir d'un nouvel enregistrement, celui de la nouvelle commande.
  • Cliquer sur le bouton Ok pour confirmer ce réglage,
La ligne Ajouter à apparaît dans la grille de requête. Elle atteste que nous avons bien transformé la requête en requête insertion. Nous devons l'exploiter pour définir les champs de réception de la table Commandes.
  • Dans la zone Ajouter à de la première colonne, définir le champ Com_client,
  • Dans la deuxième colonne, définir le champ Com_montant,
Désormais, nous devons bâtir les expressions de correspondance associées. Ces syntaxes doivent être composées dans la zone Champ pour chacun d'eux.
  • A la racine du dossier de décompression, ouvrir le fichier texte,
  • Sélectionner toute la syntaxe (CTRL + A) et la copier (CTRL + C),
  • Puis, revenir dans l'éditeur de requête Access,
  • Cliquer droit dans la zone Champ de la première colonne,
  • Dans le menu contextuel, choisir Créer pour afficher le générateur d'expression,
  • Y coller (CTRL + V) la syntaxe précédemment copiée,
  • La compléter avec le nom du champ correspondant entre crochets, soit : [Id],
  • Valider l'expression de correspondance en cliquant sur le bouton Ok du générateur,
La première syntaxe que nous avons bâtie, est donc la suivante :

Formulaires![_F_navig_principal]![SousFormulaireNavigation].[Formulaire]![Id]

Nous devons maintenant établir la correspondance pour le deuxième champ.
  • Cliquer droit dans la zone Champ de la deuxième colonne,
  • Dans le menu contextuel, choisir Créer pour afficher le générateur d'expression,
  • Coller (CTRL + V) la syntaxe précédemment copiée,
  • Puis, la compléter avec le nom du champ correspondant entre crochets, soit : [Montant],
  • Valider l'expression en cliquant sur le bouton Ok du générateur,
Expression de requête Access et correspondance dynamique avec le formulaire des commandes clients

La synaxe complète pour cette seconde liaison dynamique est donc la suivante :

Formulaires![_F_navig_principal]![SousFormulaireNavigation].[Formulaire]![Montant]
  • Enregistrer la requête (CTRL + S) sous le nom : R_Ajout_Com,
  • Puis, la fermer en cliquant sur la croix de son onglet,
  • 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 Valider pour le sélectionner,
  • Activer ensuite l'onglet Evènement de sa feuille de propriétés,
  • Cliquer alors sur le petit bouton placé à l'extrémité droite 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 donc dans l'éditeur de macro Access. Une liste déroulante se propose pour définir les actions à enclencher au clic sur ce bouton. Mais comme vous le savez, l'une d'entre elles n'est pas disponible par défaut. Elle consiste à neutraliser les alertes système déclenchées par l'exécution des requêtes action. Pour l'obtenir, nous devons actionner un bouton du ruban Création.
  • Dans le ruban Création, cliquer sur le bouton Afficher toutes les actions,
  • Ensuite, dérouler la liste des actions dans l'éditeur,
  • Choisir l'action Avertissements et conserver son attribut Avertissements actifs sur Non,
  • Déployer alors la liste déroulante du dessous,
  • Puis, choisir l'action OuvrirRequête,
  • Dans la zone Nom de la requête, choisir R_Ajout_Com,
  • Puis, régler l'attribut Mode Données sur Lecture seule,
Exécuter requête Ajout par macro Access pour alimenter la commande du client dans la table

Comme vous le savez, la macro est loin d'être terminée. Des outils sont manquants. Mais nous souhaitons réaliser le premier test.
  • Dans le ruban Création, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
  • De retour sur le formulaire, cliquer sur la disquette dans la barre d'accès rapide,
Vous pouvez aussi réaliser le raccourci clavier CTRL + S. Il est essentiel de mettre à jour la liaison opérée entre le bouton et la macro.
  • Fermer le formulaire F_Commandes,
  • Puis, double cliquer sur le formulaire _F_navig_principal pour l'ouvrir,
  • Cliquer sur son onglet Facturation pour dresser la première commande,
  • Choisir un identifiant client avec la première liste déroulante,
  • Puis, ajouter quelques articles à la commande,
  • Enfin, cliquer sur le bouton Valider pour la créer,
  • Dans le volet de navigation, double cliquer sur la table Commandes pour l'ouvrir,
Nouvelle commande client archivée dans la table Access au clic sur le bouton du formulaire

La table était vide jusqu'alors. Et comme vous le remarquez, une nouvelle ligne a été créée. Elle rappelle bien l'identifiant sélectionné depuis le formulaire et le montant total consolidé de la commande. Un numéro lui a été attribué. C'est lui que nous devons désormais récupérer pour créer le détail de la commande et le lier.

Cette commande est orpheline. Nous ne pouvons pas la conserver.
  • Cliquer droit sur son étiquette de ligne,
  • Puis, choisir Supprimer l'enregistrement dans le menu contextuel,
  • Valider le message d'avertissement et fermer la table,


Récupérer le dernier numéro de commande
L'idée consiste à créer une requête de mise à jour capable de réceptionner le dernier numéro de commande. Pour cela, elle doit exploiter la fonction MaxDom. Elle retourne la valeur numérique la plus grande d'un champ spécifié en premier paramètre, d'une table désignée en second paramètre. Cette valeur doit être insérée dans le champ produit_numC pour tous les enregistrements de la table Com_Temp. Ainsi, chaque ligne du détail de la commande sera associée à un numéro. Il s'agira enfin de l'exploiter pour archiver le détail dans la table dépendante.
  • Fermer le formulaire de navigation principal,
  • En haut de la fenêtre Access, cliquer sur l'onglet Créer,
  • Cliquer alors sur le bouton Création de requête,
  • Dans la boîte de dialogue qui suit, sélectionner la table Com_Temp,
  • Dans le ruban Créer de l'éditeur de requête, cliquer sur le bouton Mise à jour,
Ainsi, nous transformons la requête en requête action de mise à jour des enregistrements existants. A ce titre, la ligne Mise à jour vient se greffer dans la grille de requête. La seule colonne qui doit être adaptée suite à la création de la commande, est celle du champ produit_numC.
  • Dans la zone Champ de la première colonne, sélectionner le champ champ produit_numC,
  • Ensuite, cliquer droit dans sa zone Mise à jour,
  • Dans le menu contextuel, choisir Créer pour afficher le générateur d'expression,
  • Débuter la syntaxe en tapant le nom de la fonction suivi d'une parenthèse, soit : MaxDom(,
  • Ouvrir les guillemets ('),
  • Dans la liste de gauche, déployer l'arborescence jusqu'à sélectionner la table Commandes,
  • Dans la liste du centre, double cliquer sur le champ Com_num,
  • Fermer les guillemets et taper un point-virgule pour passer dans le second argument,
  • Ouvrir les guillemets et saisir le nom de la table entre crochets : [Commandes],
  • Fermer les guillemets et finir l'expression en fermant la parenthèse de la fonction MaxDom,
Récupérer le numéro de la dernière commande créée avec requête Access grâce à la fonction MaxDom

Comme nous ne posons aucun critère, cette mise à jour est censée s'opérer pour tous les enregistrements de la table Com_Temp.
  • Valider l'expression en cliquant sur le bouton Ok du générateur,
MaxDom('[Commandes]![Com_num]';'[Commandes]')
  • Enregistrer la requête (CTRL + S) sous le nom : R_Maj_NumC,
  • Puis, la fermer en cliquant sur la croix de son onglet,
Il s'agit maintenant de l'exécuter au clic sur le bouton Valider, à la suite des précédentes actions.
  • Ouvrir le formulaire F_Commandes en mode création,
  • Sélectionner le bouton Valider,
  • Puis, cliquer sur le petit bouton de son événement Au clic dans la feuille de propriétés,
Nous sommes de retour dans l'éditeur de macro pour compléter les actions associées au bouton de validation.
  • Déployer la liste déroulante située sous la dernière action,
  • Choisir l'action OuvrirRequête,
  • Dans la zone Nom de la requête, choisir R_Maj_NumC,
  • Puis, régler l'attribut Mode Données sur Lecture seule,
  • Dans le ruban Création, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
  • De retour sur le formulaire, cliquer sur la disquette de la barre d'accès rapide,
  • Fermer alors le formulaire en cliquant sur la croix de son onglet,
  • Exécuter le formulaire _F_navig_principal,
  • Cliquer sur son onglet Facturation pour atteindre le formulaire des commandes,
  • Choisir un identifiant client à l'aide de la première liste déroulante,
  • Puis, ajouter quelques articles,
Les précédents sont toujours présents pour l'instant. Tant que la commande n'est pas complètement validée, nous n'avons aucune raison de vider cette table temporaire.
  • Enfin, cliquer sur le bouton Valider,
Si vous ouvrez la table Commandes, vous constatez la présence de l'enregistrement en bonne et due forme comme précédemment.

Récupération du dernier numéro de commande créé pour établir relation entre les tables Access par clé étrangère

Si vous ouvrez la table Com_Temp, vous remarquez que toutes les lignes sont désormais associées au numéro de commande précédemment créé.
  • Supprimer l'enregistrement de la table Commandes,
  • Puis, fermer les tables et le formulaire de navigation,
Nous disposons désormais de toutes les informations pour valider la facture.

Archiver la facture client
Deux requêtes sont encore nécessaires. La première doit insérer dans la table Detail_commandes, toutes les informations de la table Com_Temp. Et pour sa mise en oeuvre, nous proposons d'exploiter le langage Sql que nous avions découvert à l'occasion d'exercices. Il s'agit d'imbriquer une requête sélection (SELECT) dans une requête ajout (INSERT INTO). Sans clause Where, tous les enregistrements seront considérés, un peu comme le ferait une boucle de programmation en VBA. La seconde doit purger la table Com_Temp, une fois la facture validée. Ainsi, une nouvelle facture vierge pourra être construite. Nous devons donc créer une requête suppression.
  • En haut de la fenêtre Access, cliquer sur l'onglet Créer,
  • Dans son 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,
  • Tout à fait à gauche du ruban Créer, cliquer sur le bouton SQL,
Nous basculons ainsi dans la vue de l'éditeur SQL.
  • A la place du début de syntaxe proposé, saisir l'expression suivante :
INSERT INTO Detail_commandes(Det_com,Det_ref,Det_qte) SELECT produit_numC,produit_ref,qte_achat FROM Com_Temp;

Nous exploitons donc les mots clés INSERT INTO pour initier une requête Ajout. Selon la construction imposée, l'énumération des champs à renseigner doit suivre. Nous les listons entre parenthèses, séparés les uns des autres par une virgule. Ensuite, nous définissons les valeurs à y inscrire. Nous remplaçons l'habituelle clause VALUES par une requête sélection. Dans le même ordre, elle désigne les champs correspondants de la table Com_Temp. Une fois encore, comme aucune clause WHERE n'est définie, tous les enregistrements seront passés en revue et insérés.
  • Enregistrer cette requête sous le nom : R_Ajout_Detail,
  • Puis, la fermer en cliquant sur la croix de son onglet,
  • Cliquer de nouveau sur l'onglet Créer en haut de la fenêtre Access,
  • Dans le 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,
  • Dans le ruban Créer, cliquer sur le bouton Suppression pour transformer la requête,
En l'absence de précision supplémentaire et notamment de critère, soit de clause WHERE, tous les enregistrements sont susceptibles d'être supprimés.
  • Enregistrer la requête sous le nom : R_Suppr_Com,
  • Puis, la fermer en cliquant sur la croix de son onglet,
  • Revenir sur le formulaire F_Commandes en mode conception,
  • Sélectionner le bouton Valider,
  • Cliquer sur le bouton de son événement Au clic, dans la feuille de propriétés,
  • Dans l'éditeur de macro, ajouter l'action OuvrirRequête,
  • Dans la zone Nom de la requête, choisir R_Ajout_Detail,
  • Régler l'attribut Mode Données sur Lecture seule,
  • Ajouter de nouveau l'action OuvrirRequête,
  • Dans la zone Nom de la requête, choisir R_Suppr_Com,
  • Régler son attribut Mode Données sur Lecture seule,
  • Ajouter l'action AfficherTousEnreg pour actualiser les enregistrements,
  • Ajouter enfin l'action ZoneMessage,
  • Dans l'attribut Message, saisir le texte : La facture a été validée avec succès,
  • Régler son attribut Bip sur Non,
  • Puis, saisir le titre suivant : Succès,
Enchaînement des actions de macro Access pour valider et archiver la facture client depuis le formulaire

Il ne nous reste plus qu'à tester. Mais avant cela, toutes les modifications doivent être enregistrées.
  • Dans le ruban Création, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
  • De retour sur le formulaire, cliquer sur la disquette de la barre d'accès rapide,
  • Puis, fermer le formulaire en cliquant sur la croix de son onglet,
  • Exécuter alors le formulaire _F_navig_principal,
  • Cliquer sur son onglet Facturation pour accéder aux commandes,
  • Choisir un identifiant client,
  • Ajouter quelques articles,
  • Enfin, cliquer sur le bouton Valider,
Comme vous le constatez, le message de confirmation de la macro surgit aussitôt.

Message Access pour confirmer la validation de la facture du client depuis le formulaire

Le sous formulaire apparaît complètement vierge, attestant que la table Com_Temp a bien été vidée à l'issue du traitement.
  • Valider la boîte de dialogue de confirmation,
  • Double cliquer sur la table Commandes pour afficher son contenu,
  • Cliquer sur le symbole plus (+) à gauche de l'enregistrement,
Commande archivée avec son détail dans table Access liée par actions de macro depuis formulaire

Cette action a pour effet de déployer l'affichage afin d'accéder à ses dépendances. Et comme vous pouvez le voir, tout le détail de la commande a parfaitement été inséré, rattaché à la commande par le numéro précédemment attribué. Ce numéro, vous pouvez le visualiser en ouvrant la table Detail_commandes.

Bref, nous sommes parvenus à gérer la facturation des clients, sans l'intervention du code VBA, par interactions entre les différents objets Access. Nous avons exploité les tables, les formulaires, les requêtes de différentes natures et les macros sur événement.

 
Sur Facebook
Sur G+
Sur Youtube
Les livres
Contact
Mentions légales



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