formateur informatique

Sous formulaire dynamique dans un formulaire sur plusieurs tables

Accueil  >  Bureautique  >  Access  >  Access Avancé  >  Sous formulaire dynamique dans un formulaire sur plusieurs tables
Livres à télécharger
Sujets que vous pourriez aussi aimer :
Sous formulaire dynamique dans un formulaire construit sur plusieurs tables

Nous abordons ici une notion intéressante, comment charger dynamiquement le contenu d'un sous formulaire en fonction de choix précédents réalisés à partir de listes déroulantes construites sur des tables différentes. Pour débuter les manipulations, nous allons partir d'une petite base de données existante : Cette base est constituée de trois tables. La table marques recense des fabricants automobiles. La table modeles recense certains modèles de ces marques. Enfin la table fiches donne les fiches techniques des modèles de ces marques. Ces trois tables sont donc liées entre elles par des clés primaires et des clés externes. Ces tables sont volontairement simplifiées afin de faciliter les manipulations.

Vous notez aussi la présence d'un formulaire choix_marques_modeles.
  • Double cliquer dessus pour l'exécuter,
En cliquant sur la liste des marques, vous choisissez une marque de véhicule. La liste des modèles se charge alors en fonction du choix précédent pour permettre de choisir un modèle dans la marque sélectionnée. Ce formulaire est donc déjà bâti sur deux tables. Nous avons besoin d'en ajouter une troisième puisque l'objectif et de sortir la fiche technique du modèle dans un sous formulaire. Cette fiche technique se trouve dans la table fiches.
formulaire access listes déroulantes
Nous allons commencer par construire le formulaire des fiches techniques que nous afficherons ensuite comme sous formulaire du formulaire choix_marques_modeles. Le but est d'arriver à modifier dynamiquement le contenu du sous formulaire selon les choix réalisés dans le formulaire sur la marque et le modèle.
  • Fermer l'onglet du formulaire choix_marques_modeles,
  • Cliquer sur le ruban Créer pour l'activer,
  • Dans ce ruban, cliquer sur la flèche du bouton Plus de formulaires,
  • Dans la liste choisir Assistant formulaire,
  • Dans la boîte de dialogue qui apparaît, sélectionner la table fiches dans la liste déroulante,
  • Basculer tous les champs de cette dernière dans la zone de droite à l'aide du bouton double flèche au centre de la boîte de dialogue,
Assistant formulaire Access
  • Cliquer directement sur le bouton Terminer afin d'ignorer les étapes restantes et de construire le formulaire sur les options par défaut.
Le formulaire s'affiche alors en exécution comme l'illustre la capture ci-dessous.

Nous allons maintenant l'intégrer en tant que sous formulaire du formulaire précédent.
  • Fermer l'onglet du formulaire fiches,
  • Cliquer avec le bouton droit de la souris sur le formulaire choix_marques_modeles,
  • Choisir Mode création dans le menu contextuel qui apparaît,
Le formulaire s'affiche en mode conception.
  • Dans l'onglet Création, cliquer sur le bouton Sous formulaire/Sous état,
  • Tracer un rectangle sous les listes déroulantes pour définir sa zone d'implantation.
L'assistant sous-formulaire se déclenche.
Assistant sous formulaire Access
  • Cocher la case Utiliser un formulaire existant,
  • Sélectionner le formulaire fiches dans la liste,
  • Cliquer sur le bouton Suivant,
  • Accepter le nom donné par défaut et cliquer sur Terminer.
Le sous formulaire s'affiche alors dans le formulaire en mode conception.
  • Cliquer sur le bouton Affichage pour exécuter le formulaire.
Si vous choisissez une marque puis un modèle vous constatez que le sous formulaire reste désespérément figé sur le premier enregistrement alors qu'il devrait afficher la fiche technique du modèle sélectionné dans la seconde liste. En effet, nous n'avons à ce stade construit aucune interaction entre les listes et le sous-formulaire.
  • Cliquer sur la flèche du bouton Affichage,
  • Puis cliquer sur Mode création dans la liste,
  • Sélectionner la liste des modèles (seconde liste déroulante),
  • Si la feuille de propriétés n'est pas visible, cliquer avec le bouton droit de la souris sur la liste déroulante,
  • Dans le menu contextuel qui s'affiche, cliquer sur Propriétés,
  • Dans la feuille des propriétés sur la droite, cliquer sur l'onglet Evénement pour l'activer,
Au choix d'un modèle, nous souhaitons afficher la fiche technique correspondante. Il s'agit donc d'un événement à gérer. Lorsque le contenu de la liste change, le sous formulaire doit s'adapter.
  • Dans la zone Après MAJ, cliquer sur le petit bouton à trois points,
  • Dans la boîte de dialogue qui s'affiche, choisir Générateur de code,
  • Puis cliquer sur Ok.

Vous basculez dans l'éditeur de code Visual Basic, VBA pour Access. Après MAJ signifie Après Mise à Jour, soit dès lors que le contenu de la liste change. Cela signifie que ce que nous allons programmer maintenant se déclenchera quand la liste déroulante changera. Le curseur de saisie étant placé entre les bornes de la procédure (Entre le Private Sub et le End Sub) :
  • Ajouter la ligne de code VBA suivante :
Me.fiches.Form.RecordSource ='SELECT * FROM fiches WHERE fiche_modele_num=' + Me.liste_modeles
Me désigne le formulaire actif. fiches est le nom du sous formulaire dans Me, soit le formulaire choix_marques_modeles. Form.RecordSource est la propriété qui permet d'accéder à la source de chargement de ce sous formulaire. C'est ici que nous lui précisons qu'il doit afficher la fiche technique dont le numéro correspond à celui sélectionné dans la liste des modèles. La table modeles et la table fiches sont liées par la clé primaire de la première table et la clé externe fiche_modele_num de la seconde. D'où la requête SQL pour ce RecordSource qui demande explicitement de sélectionner tous les champs de la table fiches pour lesquels le numéro d'enregistrement correspond au numéro sélectionné dans la liste des modèles.
  • Avant de terminer, ajouter cette dernière ligne de code à la suite :
Me.fiches.Form.Requery
Elle permet de forcer le sous formulaire à se recalculer suite à ce changement.
changer source formulaire Access en Vba
  • Revenir sur la fenêtre des formulaires Access,
  • Double cliquer sur le formulaire choix_marques_modeles- pour l'exécuter,
  • Faire des choix différents dans les listes.
Sous formulaire Access dynamiquement lié
Vous constatez que le contenu du sous formulaire s'adapte et affiche bien la fiche technique du modèle sélectionné dans la marque choisie.

Aperçu de la fiche technique
Dernière étape, nous souhaitons afficher l'aperçu de la fiche technique générée dynamiquement. En d'autres termes nous devons construire un état basé sur la table fiches. Cet état devra afficher seulement les informations correspondant au modèle sélectionné depuis le formulaire.
  • Activer le ruban Créer,
  • Cliquer sur le bouton Assistant état,
  • Dans la boîte de dialogue, sélectionner tous les champs de la table fiches et cliquer sur Terminer.
L'état s'affiche en aperçu présentant tous les enregistrements de la table, soit toutes les fiches techniques. Or il nous en faudra qu'un seul.
  • Fermer l'état,
  • Afficher le formulaire choix_marques_modeles en mode création,
  • A l'aide du ruban Création, ajouter un bouton sur ce dernier,
  • Dans la boîte de dialogue qui s'affiche, cliquer sur Annuler, nous allons le paramétrer nous-mêmes,
  • Changer le texte du bouton en Aperçu,
  • Dans l'onglet Evénement de sa feuille de propriétés, cliquer sur le bouton à trois points,
  • Choisir générateur de code et cliquer sur Ok,
  • Dans la procédure, taper la ligne de code suivante :
DoCmd.OpenReport 'fiches', acViewPreview, , '[fiche_modele_num]=' (Me![liste_modeles].Value)
Cette ligne commande l'ouverture de l'état fiches (OpenReport 'fiches') en mode aperçu (acViewPreview) de manière à faire correspondre le numéro de la fiche à imprimer (fiche_modele_num) avec celui de la fiche sélectionnée sur le formulaire (Me![liste_modeles].Value).
  • Exécuter le formulaire,
  • Choisir une marque et un modèle,
  • Cliquer sur le bouton Aperçu.

Nous obtenons bien l'aperçu de la fiche technique voulue.

 
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