formateur informatique

Détail des commandes du client sur un même formulaire

Accueil  >  Bureautique  >  Access  >  Access Astuces  >  Détail des commandes du client sur un même formulaire
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 :


Détail des commandes du client

Cette astuce Access explique comment obtenir le détail d'une commande au clic sur son numéro dans le sous formulaire encapsulé dans le formulaire parent des clients.

Formulaire Access avec deux sous-formulaires encapsulés pour afficher le détail de la commande cliquée

Dans l'exemple illustré par la capture, nous travaillons sur un formulaire offrant trois niveaux de détail. Le formulaire parent des clients encapsule deux sous-formulaires. Les informations du client en cours de consultation sont listées sur la gauche. Le premier sous-formulaire, positionné en haut à droite, énumère toutes les commandes qu'il a passées. Au clic sur l'une d'entre elles, le détail des achats apparaît dans le second sous formulaire positionné en bas à droite.

Source et procédure
Au fil des astuces précédentes, nous avons ébauché la construction de ce formulaire relativement complexe. C'est la raison pour laquelle, nous proposons de le récupérer.
  • Télécharger le fichier detail-commandes-formulaire.rar en cliquant sur ce lien,
  • Le décompresser dans le dossier de votre choix,
  • Double cliquer sur le fichier résultant pour l'ouvrir dans Access,
  • Puis, cliquer sur le bouton Activer le contenu du bandeau de sécurité,
  • Dans le volet de navigation, double cliquer sur le formulaire f_Clients pour l'exécuter,
Nous découvrons un formulaire proche de la version finalisée à atteindre. Pour l'instant, il manque le second sous formulaire, celui du détail des commandes. Les informations du client apparaissent sur la gauche. Elles sont issues de la table Clients. Ses commandes sont listées dans le sous formulaire. Elles proviennent de la table Commandes. C'est une relation établie entre une clé primaire et une clé externe sur ces tables qui permet de réunir les informations attachées.

Une barre de navigation personnalisée permet de faire défiler les clients et leurs commandes associées. Tous n'ont pas encore réalisé d'achats. Si vous atteignez le quatrième client par exemple, vous constatez qu'il a déjà passé trois commandes.

Désormais, nous devons donc créer un second sous formulaire pour restituer le détail de la commande cliquée. Ces données sont à piocher dans la table Detail_commandes. Une relation existe fort naturellement entre cette dernière et la table Commandes. Ce détail est lui-même prélevé à partir de la table Produits. Chaque référence d'article établit une relation entre ces deux dernières tables. En cliquant sur le bouton Relations dans le ruban Outils de base de données, vous pouvez visualiser la construction et les liaisons qui entrent en jeu.

Relations entre les tables de la base de données Access pour les commandes des clients

Nous découvrons ainsi les noms des champs, notamment de ceux impliqués dans les relations de clé primaire à clé externe.

La requête de correspondance
Pour restituer le détail de la commande cliquée dans un second sous formulaire, nous devons commencer par bâtir une requête. Son rôle est de récupérer le numéro de la commande (com_num) ainsi désignée. De la sorte, cette requête sera en mesure de filtrer uniquement les enregistrements de la commande choisie. De fait, elle pourra servir de source de données au second sous formulaire à bâtir. Cette correspondance entre les clés doit être entreprise sur le champ Det_com de la table Detail_commandes.
  • 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 surgit, sélectionner la table Detail_commandes,
  • Puis, cliquer sur le bouton Ajouter et sur le bouton Fermer,
  • Ajouter tous les champs de la table sur la grille de requête,
Ajouter tous les champs de la table Access pour créer une requête de correspondance avec un sous-formulaire

Il est opportun d'élargir la zone du champ Det_com pour accueillir la syntaxe à construire.
  • Cliquer droit dans la zone Critères du champ Det_com,
  • Dans le menu contextuel, choisir la commande Créer,
Nous affichons ainsi le générateur d'expression. Son objectif est de nous aider à pointer sur le champ com_num du sous formulaire des commandes, pour établir la relation.
  • Dans la liste de gauche, déployer complètement l'arborescence des formulaires,
  • Cliquer alors sur le formulaire f_Clients pour le sélectionner,
  • Dans la liste du centre, double cliquer sur le sous formulaire sf_Commandes,
Nous obtenons ainsi le début de l'expression. En respectant la hiérarchie des objets, elle nous permet d'atteindre le sous formulaire encapsulé. Mais nous devons descendre encore plus bas pour atteindre le contrôle com_num, lui-même encapsulé dans le sous formulaire.
  • En haut du générateur, cliquer à la fin de la syntaxe pour y placer le point d'insertion,
Il faut veiller à supprimer l'espace qui se glisse généralement après le crochet fermant.
  • Taper un point d'exclamation (!),
C'est ainsi dans la philosophie objet que nous descendons encore d'un cran pour pouvoir désigner un contrôle encapsulé dans le sous formulaire.
  • Inscrire alors le champ com_num entre crochets, soit : [com_num],
Syntaxe de correspondance de requête Access pour établir la liaison avec un contrôle de sous-formulaire

La syntaxe complète de l'expression de correspondance avec le champ Det_com est la suivante :

Formulaires![f_Clients]![sf_Commandes]![com_num]
  • Cliquer sur le bouton Ok du générateur pour valider la syntaxe de l'expression,
Désormais, elle apparaît bien dans la zone Critères du champ Det_com. Grâce à elle, seuls subsisteront les enregistrements pour lesquels le numéro de commande lié correspond bien à celui cliqué depuis le premier sous formulaire.
  • Enregistrer la requête (CTRL + S) sous le nom R_Detail,
  • Puis, fermer la requête en cliquant sur la croix de son onglet,
Le deuxième sous-formulaire
Il est maintenant temps de bâtir le second sous formulaire sur la base de la requête fraîchement créée.
  • Dans le volet de navigation, cliquer droit sur le formulaire f_Clients,
  • Dans le menu contextuel, choisir le mode Création,
  • Dans la section Contrôles du ruban Création, choisir celui du Sous-formulaire / Sous état,
Ajouter un second sous formulaire dans un formulaire Access
  • Puis le tracer sous la barre de navigation personnalisée,
  • Dans l'assistant qui apparaît, conserver le choix : Utiliser les tables et les requêtes,
  • Puis, cliquer sur le bouton Suivant pour progresser,
  • Dans la nouvelle étape, choisir la requête R_Detail avec la liste déroulante,
  • Cliquer alors sur le bouton à la double flèche pour intégrer tous les champs,
Utiliser tous les champs de la requête comme source de données du sous formulaire Access
  • Cliquer de nouveau sur le bouton Suivant pour progresser,
Dans cette nouvelle étape, l'assistant Access propose d'établir la relation entre les données pour charger le sous formulaire en fonction des données présentes dans le formulaire parent. Dans notre cas, la relation est déjà établie par l'expression de correspondance de la requête. De plus, cette liaison concerne les deux sous formulaires.
  • Conserver le choix proposé par défaut : Les définir moi-même,
  • Puis, cliquer sur le bouton Suivant en bas de la boîte de dialogue,
  • Dans cette dernière étape, nommer le sous formulaire comme suit : sf_DetCom,
  • Enfin, cliquer sur le bouton Terminer pour procéder à sa création,
Avant de tester le résultat, quelques réglages de mise en forme et d'ajustement sont nécessaires.
  • Supprimer l'étiquette associée au sous formulaire,
  • Sélectionner de nouveau le sous formulaire en cliquant sur le carré grisé en haut à gauche,
  • Activer l'onglet Format de sa feuille de propriétés,
  • Régler son attribut Barre de défilement sur Aucune,
  • Régler son attribut Afficher sélecteur sur Non,
  • Régler son attribut Boutons de déplacement sur Non,
  • Ajuster ensuite la largeur de ce deuxième sous formulaire sur la largeur du premier,
Pour cela, vous pouvez exploiter le bouton Taille / Espace du ruban Organiser sur les deux sous formulaires sélectionnés ensemble.
  • Ajuster la hauteur du sous formulaire pour qu'il ne dépasse pas le rectangle grisé sur sa gauche,
  • Lui attribuer un gris assez foncé pour sa couleur de contour,
  • Puis, forcer légèrement l'épaisseur du trait,
Pour cela, vous pouvez exploiter le bouton Contour dans le ruban contextuel Format.
  • Enregistrer les modifications (CTRL + S) et exécuter le formulaire (F5),
En faisant défiler les enregistrements avec la barre de navigation personnalisée, vous constatez que le second sous formulaire restitue parfaitement le détail de la première commande pour chaque client.

Détail des commandes des clients dans un second sous formulaire Access

Mais bien entendu à ce stade, si vous cliquez sur une autre commande dans le premier sous formulaire, le détail associé ne s'actualise pas dans le second.

Actualiser les données sur événement
Pour que le second sous formulaire s'actualise au clic sur un enregistrement du premier, nous devons gérer un événement bien précis. Cet événement est celui du clic sur chaque contrôle du premier sous formulaire. L'astuce consiste à déclencher un petit code VBA capable d'actualiser les données sur ordre.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans la liste des propositions, choisir le mode Création,
  • Sélectionner le contrôle com_num du premier sous formulaire,
Deux clics sont nécessaires. Le premier sélectionne le sous formulaire. Le second permet d'atteindre le contrôle souhaité.
  • Activer alors l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur le petit bouton situé à l'extrémité de son événement Au clic,
  • Dans la boîte de dialogue qui suit, choisir le générateur de code et valider par Ok,
Nous basculons ainsi dans l'éditeur de code Visual Basic Access, plus précisément entre les bornes de la procédure événementielle Com_num_Click. Son code se déclenchera donc au clic sur la zone com_num. Son rôle est d'actualiser les informations du second sous formulaire. Et pour cela, nous devons l'atteindre par son nom en parcourant la hiérarchie des objets.
  • Entre les bornes de la procédure événementielle, ajouter l'instruction VBA suivante :
Forms("f_clients").Form("sf_DetCom").Requery

Grâce à l'objet Forms, nous désignons par son nom le formulaire parent f_clients. Grâce à lui, nous pouvons rejoindre le formulaire enfant, reconnu par son nom sf_DetCom, grâce à l'objet dérivé Form. La méthode Requery permet alors d'actualiser les données du formulaire ainsi désigné.

Lorsque l'utilisateur clique sur une ligne d'une commande, rien n'indique qu'il va cibler précisément le champ du numéro. C'est pourquoi nous devons reproduire cette instruction pour tous les contrôles du premier sous formulaire.
  • En haut de l'éditeur VBA Access, déployer la liste déroulante de gauche,
  • Dans l'énumération, cliquer sur le contrôle Com_client,
  • Déployer alors la liste déroulante de droite,
  • Cliquer alors sur l'événement associé du clic (Click),
Procédure événementielle VBA Access pour actualiser les données du sous-formulaire au clic de la souris

Nous créons ainsi la procédure événementielle Com_client_Click.
  • Coller l'instruction VBA précédente entre ses bornes,
La procédure générée au choix dans la première liste déroulante (Com_client_BeforeUpdate) peut être effacée. Le même protocole doit ensuite être observé pour créer les procédures Com_date_Click et Com_montant_Click.

Private Sub Com_client_Click()
Forms("f_clients").Form("sf_DetCom").Requery
End Sub

Private Sub Com_date_Click()
Forms("f_clients").Form("sf_DetCom").Requery
End Sub

Private Sub Com_montant_Click()
Forms("f_clients").Form("sf_DetCom").Requery
End Sub

Private Sub Com_num_Click()
Forms("f_clients").Form("sf_DetCom").Requery
End Sub
  • Enregistrer les modifications (CTRL + S) et fermer l'éditeur VBA Access,
  • De retour sur le formulaire, l'enregistrer à son tour,
  • Puis, l'exécuter avec la touche F5 du clavier,
Afficher le détail de la commande client dans un deuxième sous formulaire au clic sur le numéro de commande dans le premier

Cette fois, en cliquant sur la ligne de l'une des commandes, vous constatez que son détail est instantanément restitué dans le second sous-formulaire. C'est la méthode Requery qui a forcé le recalcul de la requête utilisée comme source de données.

 
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