Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Filtrer un formulaire tabulaire
Cette nouvelle
astuce Access montre comment
filtrer un formulaire tabulaire au choix d'une valeur dans une
liste déroulante.
Source et présentation
Pour les besoins des démonstrations, nous proposons de récupérer une
base de données offrant déjà quelques outils aboutis à l'occasion de précédentes
astuces.
En consultant le
volet de navigation sur la gauche de l'écran, vous constatez que cette
base de données est constituée d'une
table, d'une
requête et d'un
formulaire.
- Double cliquer sur le formulaire F_Film pour l'exécuter,
En
mode tabulaire, il énumère les films recensés dans la
table T_Films. Il a été construit à partir de la
requête R_Film. Cette dernière exploite la
fonction Access Choisir pour traduire les catégories numériques dans leur équivalent textuel. C'est à l'occasion d'une précédente
astuce que nous l'avons conçue.
Liste déroulante de choix
Pour atteindre l'objectif de cette
astuce, nous devons ajouter une
liste déroulante sur ce
formulaire. Elle doit proposer de choisir l'une des catégories de film. A validation de ce choix, le
formulaire doit réactualiser ses résultats pour ne restituer que les films du genre désigné. Cette liste déroulante doit se nourrir d'une source proposant ces genres au format texte. Nous proposons donc de créer une copie de la
requête R_Film.
- Dans le volet de navigation, cliquer droit sur la requête R_Film,
- Dans le menu contextuel, choisir la commande Copier,
- Dès lors, cliquer droit sur un emplacement vide du volet de navigation,
- Dans le menu contextuel, choisir la commande Coller,
- Dans la boîte de dialogue qui suit, la nommer R_Liste et valider par Ok,
- Désormais, à gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
- Dans la liste des propositions, choisir le mode Création,
Nous basculons ainsi dans la vue en conception du
formulaire.
- Dans la section Contrôles du ruban Création, choisir le contrôle Zone de liste déroulante,
- Le tracer dans l'entête du formulaire à droite de l'étiquette Genre,
Une boîte de dialogue apparaît. Il s'agit de l'assistant. Son rôle est de simplifier la création de cette liste et de définir la liaison avec sa source de données.
- Dans cette première étape, conserver le premier choix coché et cliquer sur le bouton Suivant,
- Dans cette deuxième étape, cocher la case Requête,
- Puis, sélectionner la requête R_Liste dans la zone du dessus,
- Cliquer de nouveau sur le bouton Suivant pour progresser,
- Dans cette troisième étape, sélectionner le champ desc_genre,
- Puis, cliquer sur le bouton à la flèche orientée vers la droite,
Ainsi, nous le basculons dans la liste de droite. Ce sont désormais ses informations qui serviront à remplir la
liste déroulante.
- Cliquer une fois encore sur le bouton Suivant,
- Dans cette nouvelle étape, choisir un tri croissant sur le champ desc_genre,
De cette manière, les types de film y seront organisés par
ordre alphabétique croissant.
- Cliquer de nouveau sur le bouton Suivant,
Cette étape permet de configurer la largeur de la
liste déroulante. Ce réglage peut s'opérer en aval par le biais de la
feuille de propriétés. Nous choisissons donc de l'ignorer.
- Cliquer sur le bouton Suivant pour atteindre l'avant dernière étape,
- Conserver la case cochée par défaut,
Il n'est pas nécessaire en effet de stocker la valeur du choix dans un
champ de table. Ce choix est volatile. Il doit seulement permettre de faire réagir le
formulaire pour filtrer les films en fonction du genre choisi par l'utilisateur.
- Cliquer sur le bouton Suivant pour accéder à la dernière étape de l'assistant création,
- Dans la zone de texte, inscrire l'intitulé Choix genre pour l'étiquette de la liste déroulante,
- Puis, cliquer sur le bouton Terminer pour procéder à la création,
- De retour sur le formulaire, activer l'onglet Autres de la feuille de propriétés,
- Dans sa propriété Nom, inscrire l'intitulé Choix_genre puis valider par la touche Entrée,
Il est toujours important d'attribuer des noms explicites aux objets d'un
formulaire. C'est par ces noms que nous pouvons les désigner et les piloter. Il apparaît ensuite opportun de placer l'étiquette juste au-dessus de la liste déroulante. Les attributs de format des autres étiquettes peuvent lui être répliqués grâce à l'
outil du pinceau dans le
ruban Accueil. Enfin et comme vous le savez, le
ruban Organiser offre des outils permettant d'ajuster les
alignements par rapport aux autres contrôles.
- Enfoncer la touche F5 du clavier pour exécuter le formulaire,
- Dès lors, déployer la liste déroulante des genres,
Comme vous pouvez le voir, le résultat est loin d'être satisfaisant. Les genres sont répétés autant de fois que de films y sont associés dans la
requête source. Ce phénomène est tout à fait normal et nous devons y remédier.
Liste de choix uniques
Pour éliminer les redondances proposées par la
liste déroulante ainsi construite, nous pouvons directement influer sur sa
propriété Contenu par le biais de sa
feuille de propriétés.
- A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
- Dans les propositions, choisir le mode Création,
- Sur le formulaire en conception, cliquer sur la liste déroulante Choix_genre,
- Dès lors, activer l'onglet Données de sa feuille de propriétés,
Sa
propriété Contenu livre la syntaxe construite par l'
assistant liste déroulante :
SELECT [R_Liste].[desc_genre] FROM R_Liste ORDER BY [desc_genre];
En l'état, elle restitue tous les genres extraits par la
requête dans un ordre croissant. Nous devons éliminer ces redondances grâce à la
clause SQL Distinct.
- Adapter la syntaxe de la propriété Contenu comme suit :
SELECT DISTINCT [R_Liste].[desc_genre] FROM R_Liste ORDER BY [desc_genre];
- Puis, la valider à l'aide de la touche Entrée du clavier,
- Exécuter le formulaire et déployer de nouveau la liste déroulante,
Cette fois, seuls les genres effectivement
distincts sont proposés. Il est à noter que nous aurions aussi pu effectuer ce réglage en conception de la
requête R_Liste, grâce à sa
feuille de propriétés. Désormais, si les données source évoluent avec de nouveaux films dans de nouveaux genres, ces derniers seront automatiquement intégrés dans la liste déroulante.
Filtrer le formulaire au choix dans la liste
Ce formulaire tabulaire est conçu sur la
requête R_Film. Cette dernière doit restreindre ses propositions en fonction du choix émis par le biais de la
liste déroulante. Un
critère de correspondance doit donc être établi entre le
champ desc_genre de la
requête et la
liste du formulaire.
- Revenir sur le formulaire en mode création,
- Dans le volet de navigation, cliquer droit sur la requête R_Film,
- Dans le menu contextuel, choisir le mode Création,
- Dès lors, cliquer droit dans la zone Critères du champ desc_genre,
Il s'agit du
champ que nous avions construit à l'aide de la
fonction Choisir pour retranscrire en textes les types de film encodés en version numérique.
- Dans le menu contextuel, choisir la commande Créer,
Nous affichons ainsi le
générateur d'expression.
- En haut de ce générateur, commencer la syntaxe comme suit : Comme "*" &,
Bien que les choix de genres soient stricts, aucun d'entre eux ne sera défini au premier chargement du
formulaire. L'
opérateur Comme suivi du
symbole de l'astérisque permet de considérer comme équivalent tout ce qui suit. Donc, si aucun genre n'est défini, ce sont tous les films qui seront restitués.
- Dans la liste de gauche, déployer l'arborescence des formulaires,
- Puis, sélectionner le formulaire F_Film,
- Dans la liste du centre, double cliquer sur la liste déroulante Choix_genre,
Nous bâtissons ainsi l'expression de correspondance suivante :
Comme "*" & Formulaires![F_Film]![Choix_genre]
Les
enregistrements de la requête seront filtrés en fonction du choix émis sur le genre par le biais de la
liste déroulante du formulaire. Comme ce
formulaire est construit sur cette
requête, la proposition des films devrait s'affiner en cohérence.
- Cliquer sur le bouton Ok du générateur d'expression pour valider la syntaxe,
- Enregistrer la requête avec le raccourci clavier CTRL + S,
- Puis, la fermer en cliquant sur la croix de son onglet,
De retour sur le
formulaire, si vous choisissez un genre avec la
liste déroulante, la liste des films ne réagit malheureusement pas.
Actualiser le formulaire au choix dans la liste
Le phénomène que nous venons de constater est tout à fait naturel. Nous devons indiquer Ã
Access de réagir lorsque l'utilisateur émet un choix par le biais de la
liste déroulante. En d'autres termes, il doit
actualiser les enregistrements de sa source (La requête R_Film) sur l'
événement de ce changement de valeur.
- Revenir sur le formulaire en mode création,
- Sélectionner la liste déroulante Choix_genre,
- Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
- Cliquer dans la zone de son événement Sur changement pour l'activer,
- Cliquer ensuite sur le petit bouton situé à l'extrémité droite de cette zone,
- Dans la boîte de dialogue qui suit, choisir le générateur de macro et valider par Ok,
- Dans l'éditeur de macro Access, déployer la liste déroulante qui se propose,
- Dans la liste des propositions, choisir l'action AfficherTousEnreg,
C'est elle qui ordonne le recalcul et l'actualisation des données, ici en l'occurrence, au choix d'une nouvelle valeur dans la liste donc.
- Dans le ruban Création, cliquer sur le bouton Enregistrer puis sur le bouton Fermer,
- De retour sur le formulaire, l'enregistrer à son tour (CTRL + S) puis l'exécuter (F5),
- Déployer la liste déroulante et choisir un genre,
Instantanément, tous les films sont filtrés sur le type choisi par l'utilisateur.