formateur informatique

Etat pour créer la facture avec un formulaire Access

Accueil  >  Bureautique  >  Access  >  Access Avancé  >  Etat pour créer la facture avec un formulaire Access
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 :


Editer la facture Client

Dans cet exercice Access, nous proposons de finaliser l'application consistant à facturer les clients. D'un côté, nous disposons d'un formulaire pour construire les commandes et les archiver. De l'autre côté, nous disposons d'un état synthétisant les commandes passées par les clients. Nous devons établir la jonction précise entre les deux. A validation d'une commande depuis le formulaire, la facture du client doit pouvoir être éditée par le biais de cet état. Comme nous avons réglé de judicieux sauts de section, chaque commande est restituée sur une page indépendante. L'enjeu consiste donc à déclencher l'aperçu depuis le formulaire, en pointant sur la bonne page.



Source et présentation de la problématique
Pour aboutir ces travaux, il convient premièrement de réceptionner l'application au dernier indice de développement. La décompression fournit le fichier de la base de données associé à un fichier texte. Il renferme une expression de correspondance. Cette dernière sert à atteindre les contrôles des formulaires encapsulés dans des formulaires de navigation. Elle permet donc de produire des critères dynamiques, notamment pour les requêtes prélevant l'information issue de ces formulaires.
  • 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, saisir le mot de passe d'accès : abc,
  • Puis, cliquer sur le bouton Activer le contenu du bandeau de sécurité,
  • Du fait de la régénération, valider de nouveau ce même mot de passe,
Le formulaire de navigation se charge automatiquement, grâce à une macro Access.
  • Cliquer sur son onglet Facturation pour accéder au formulaire de commandes,
Bouton de formulaire Access pour valider la commande client et éditer la facture

Comme vous le savez, c'est le bouton Ajouter qui permet d'empiler les articles achetés. Pour cela, il faut bien sûr avoir défini un client et un article. C'est le rôle des deux listes déroulantes. Le bouton Valider permet d'archiver la commande dans les tables liées. Désormais, à l'issue de ce traitement, il doit être proposé à l'utilisateur d'éditer la facture du client venant de passer commande.

Etat et clause Where
Deux solutions s'offrent à nous. Et nous proposons de commencer par la plus simple. Une action de macro peut commander l'affichage d'un état sur une page précise. C'est ce que l'on appelle une clause Where. Littéralement, il s'agit d'un critère. Ce critère doit permettre de pointer sur le numéro de commande fraîchement créé. Comme l'état est bâti sur une requête intégrant ce numéro, il restitue automatiquement cette commande, au milieu des autres.

Néanmoins, sachez que pour mettre en place cette solution, les travaux que nous avons réalisés précédemment, ne sont pas anodins. En l'absence de sauts de section judicieusement placés, les commandes sont mélangées et aucune ne possède d'adresse spécifique à atteindre. C'est pourquoi nous livrerons une autre solution dans un deuxième temps. Il ne vous restera plus qu'à choisir celle qui vous convient le mieux.
  • Fermer le formulaire de navigation en cliquant sur la croix de son onglet,
  • Dans le volet de navigation, cliquer sur la catégorie Formulaires, pour la déployer,
  • Cliquer droit sur le formulaire F_Commandes,
  • Dans le menu contextuel, choisir Mode création,
Formulaire Access pour construire et valider les commandes des clients

Il s'agit de l'outil que nous venons de commenter, accessible par le biais de l'onglet Facturation, sur le formulaire de navigation. Pour poursuivre son développement, nous y accédons donc indépendamment, en mode création.
  • Cliquer sur le bouton Valider pour le sélectionner,
  • Puis, activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer alors sur le petit bouton à l'extrémité droite de son événement Au clic,
Nous basculons ainsi directement dans l'éditeur de macro Access. En effet, de nombreuses actions lui sont déjà associées. Nous les avons implémentées au fil des exercices sur les formulaires.

L'édition de la facture doit être validée par l'utilisateur. L'action est donc conditionnelle. Nous devons lui adresser un message qu'il confirmera ou infirmera. En récoltant le choix cliqué, nous saurons quelle action engager.
  • Tout en bas des actions, cliquer sur la liste déroulante pour la déployer,
  • Dans la liste, choisir l'instruction Si,
Le bloc de l'instruction s'affiche en dessous des autres actions. La zone Expression conditionnelle porte bien son nom. Elle doit recevoir le critère à valider. Il s'agit de la réponse à la question. Pour poser une question, nous devons déclencher une boîte de dialogue. Access offre une fonction dédiée.
  • A droite de la zone Expression conditionnelle, cliquer sur l'icône de la baguette magique,
Déclencher générateur expression pour action de macro Access conditionnelle

Nous affichons ainsi le générateur d'expression.
  • Dans la liste de gauche du générateur, déployer l'élément Fonctions jusqu'à sélectionner la catégorie Fonctions intégrées,
  • Dans la liste du centre, choisir la catégorie Messages,
  • Dans la liste de droite, double cliquer sur la fonction BoîteMsg,
Fonction BoiteMsg Access pour adresser message utilisateur sur formulaire par action de macro

Nous avons déjà exploité cette fonction à plusieurs reprises. Elle permet d'adresser un message à l'utilisateur («prompt») par le biais d'une boîte de dialogue. Cette dernière peut offrir deux boutons (Oui et Non) en guise de réponse. Pour cela, il faut lui passer la valeur numérique 4 en deuxième argument («boutons»). Et comme il s'agit d'une fonction, elle retourne le choix cliqué, sous forme de valeur numérique. 6 correspond à Oui. 7 correspond à Non. Nous devons donc vérifier l'égalité en guise de critère.
  • Remplacer l'argument «prompt» par le message suivant entre guillemets :
Souhaitez-vous éditer la facture du client ?
  • Remplacer l'argument «boutons» par le chiffre 4,
  • Remplacer l'argument «title» par le titre suivant entre guillemets :
Edition de la facture
  • Supprimer les arguments restants sans omettre les points virgule de séparation,
  • Après la parenthèse fermante, taper l'égalité suivante : =6,
L'expression du critère est terminée et la syntaxe complète est la suivante :

BoîteMsg('Souhaitez-vous éditer la facture du client ?'; 4; 'Edition de la facture')=6

Si le choix retourné vaut 6, l'utilisateur confirme l'édition de la facture. Dans ce cas, nous devons enclencher l'ouverture de l'état avec la clause Where.
  • Valider l'expression en cliquant sur le bouton Ok du générateur,
  • Déployer la liste déroulante située sous l'expression conditionnelle,
  • Choisir l'action OuvrirEtat,
  • Dans la zone Nom de l'état, choisir E_Clients_Commandes,
  • Dans la zone Affichage, choisir Aperçu avant impression,
Il nous reste à définir la condition Where. Il s'agit du point le plus important pour établir la correspondance exacte. L'état doit être affiché précisément sur le numéro de commande qui vient d'être créé. Et souvenez-vous, tel que nous avons conçu les tables, ce numéro est une clé primaire auto-incrémentée. Cette commande est donc associée à la valeur numérique la plus grande, au moment de la demande.

Il existe une fonction Access dédiée pour extraire ce type d'information. Elle se nomme MaxDom et nous l'avons déjà exploitée. Sa syntaxe est la suivante :

=MaxDom('[Nom_du_champ]'; '[Nom_de_la_table]'; 'Critère')

Elle requiert donc trois arguments, sachant que le troisième est facultatif. Le premier est le nom du champ à partir duquel nous souhaitons extraire la valeur la plus grande. Le deuxième paramètre est le nom de la table hébergeant ce champ. Le critère en troisième paramètre est à ignorer dans notre cas. Nous souhaitons extraire le numéro le plus grand, sans concession.
  • Dans la zone Condition Where, saisir la syntaxe de correspondance suivante :
[Com_num]=MaxDom('[Com_num]'; '[Commandes]')

Nous établissons ainsi la relation entre le champ Com_num de l'état et sa valeur la plus grande, issue de la table Commandes. Il doit en résulter l'affichage de l'état sur cette commande précise, identifiée par ce numéro prélevé. Aucune branche Sinon n'est nécessaire dans cette instruction conditionnelle. Si l'utilisateur clique sur Non, la suite est implicite, aucune autre action n'est engagée.

Condition Where de macro Access pour faire correspondre facture sur état avec formulaire au clic sur le bouton



Il est temps de tester le bon fonctionnement de cette action de macro.
  • Dans le ruban Création, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
  • De retour sur le formulaire en conception, cliquer sur la disquette dans la barre d'accès rapide,
En effet, il est nécessaire de l'enregistrer à son tour pour mettre à jour la liaison avec la macro modifiée. Comme vous le savez, ce formulaire n'est pas destiné à être utilisé indépendamment dans cette application.
  • Fermer le formulaire F_Commandes en cliquant sur la croix de son onglet,
  • Dans le volet de navigation, double cliquer sur le formulaire _F_navig_principal,
  • Cliquer ensuite sur son onglet Facturation pour atteindre le formulaire des commandes,
  • Choisir un identifiant client avec la première liste déroulante,
  • Puis, ajouter des articles à la facture avec la seconde liste déroulante, la zone Qté achetée et le bouton Ajouter,
  • Enfin, cliquer sur le bouton Valider pour archiver la commande,
  • Valider la première alerte confirmant le succès du traitement,
Message de macro sur formulaire Access pour éditer la facture du client

Dans l'enchaînement, la fonction Access BoîteMsg fait son oeuvre. Une boîte de dialogue s'affiche en effet. Elle porte la question personnalisée et offre bien deux boutons en guise de réponse.
  • Cliquer sur le bouton Oui pour confirmer l'édition de la facture,
L'affichage bascule aussitôt sur l'état en mode Aperçu avant impression. Et comme vous pouvez le voir, il s'agit bien de la synthèse de la commande que nous venons de construire. Bref, nous avons parfaitement réussi à faire interagir les objets Access pour automatiser la création des commandes et produire la facture du client dans l'enchaînement. Petite prouesse non négligeable, cette application complète et professionnelle a intégralement été conçue sans l'intervention du code VBA Access.

Facture client sur état Access commandé depuis formulaire par action de macro et clause Where



Requête dynamique
Nous proposons donc d'aborder la seconde méthode toute aussi efficace. Mais surtout, elle offre l'avantage de négliger certains réglages précis, comme les sauts de section sur l'état. L'état E_Clients_Commandes est construit sur la requête R_Clients_Commandes. Cette dernière réunit toutes les informations de tables liées pour produire la synthèse de toutes les commandes archivées. C'est pourquoi en l'état, il est nécessaire d'engager une condition Where et des sauts de section pour pointer sur la commande souhaitée.

L'idée est de définir un critère en amont, sur le champ Com_num de cette requête. Il consiste à récupérer le numéro de commande le plus grand, au moment de la demande. De cette manière, les commandes étant filtrées par la requête, l'état étant bâti sur cette dernière, ne restituera que la commande concernée.
  • Fermer l'état ainsi que le formulaire de navigation,
  • Dans le volet de navigation, cliquer droit sur la requête R_Clients_Commandes,
  • Dans le menu contextuel, choisir Mode création,
Nous basculons ainsi dans l'éditeur de requête Access. A ce titre, nous retrouvons les nombreux champs que nous avions intégrés pour construire cette requête de synthèse.
  • Dans la zone Critères du champ Com_num, inscrire l'expression suivante :
MaxDom('[Com_num]'; '[Commandes]')

Nous exploitons donc strictement la même fonction MaxDom afin de filtrer la sélection sur la commande dont le numéro est le plus grand. En d'autres termes, il s'agit de la dernière et donc elle correspond à la facture à éditer au clic sur le bouton du formulaire.
  • Enregistrer les modifications (CTRL + S),
Critère de requête Access pour faire correspondre facture client sur état et formulaire au clic sur bouton

Nous devons désormais adapter l'action de macro. La condition Where n'est plus nécessaire en effet. Elle est réglée en amont dans cette requête. Mais tout d'abord, nous proposons de constater l'impact indépendamment.
  • Fermer la requête en cliquant sur la croix de son onglet,
  • Dans le volet de navigation, double cliquer sur l'état E_Clients_Commandes,
Comme vous pouvez le voir, le rendu offert est bien celui de la dernière commande que nous avons validée. Par défaut, un état se cale sur la première.
  • Fermer l'état 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,
  • Cliquer sur le bouton Valider pour le sélectionner,
  • Dans sa feuille de propriétés, cliquer alors sur le bouton de son événement Au clic,
  • Dans l'éditeur de macro, effacer la condition Where de l'action OuvrirEtat,
Supprimer clause Where dans macro Access pour ouvrir état facture bâti sur requête avec critère de correspondance

Nous commandons donc une ouverture simple de l'état, dont le filtre est conditionné désormais par la requête.
  • Dans le ruban Création, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
  • De retour sur le formulaire, l'enregistrer à son tour avec la disquette de la barre d'accès rapide,
  • Puis, fermer le formulaire en cliquant sur la croix de son onglet,
  • Dans le volet de navigation, double cliquer sur le formulaire _F_navig_principal,
  • Activer ensuite son onglet Facturation pour accéder aux commandes,
  • Désigner un client avec la première liste déroulante,
  • Puis, construire une commande comme précédemment,
  • Ensuite, cliquer sur le bouton Valider et confirmer l'alerte de succès,
  • Enfin, cliquer sur le bouton Oui de la boîte de dialogue pour éditer la facture,
C'est bien le même état que précédemment qui est déclenché, sans condition Where qui plus est. Mais comme vous le remarquez, son affichage s'est bien calé sur le dernier client, grâce au critère de la requête. Il s'agit d'une autre méthode pour atteindre le même résultat, celui de l'édition de la facture client.

Edition de la facture Client dans état par action de macro Access au clic sur bouton de formulaire

Remarque : Au début de cet exercice, nous avons constaté la présence d'un fichier texte après décompression de la source. Il offre la syntaxe de correspondance pour bâtir des critères permettant d'atteindre les contrôles des formulaires encapsulés. Nous ne l'avons pas utilisé ici. Nous l'avons simplement fourni dans la mesure où une troisième méthode existe, certes moins souple. Elle consiste à bâtir la condition en récupérant les informations issues du formulaire, au moment de la demande.

 
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