Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Extraire sur des critères recoupés
Avec l'
astuce précédente, nous avons appris Ã
relier entre elles trois listes déroulantes. Avec cette nouvelle
astuce, nous entendons profiter de ce mécanisme pour offrir l'extraction affinée des résultats sur ces critères recoupés.
Dans l'exemple illustré par la capture, nous travaillons sur une
base de données des activités de sorties. Un premier critère est posé sur le département, un deuxième sur la ville et un troisième sur le type d'activité. Sur cette
table de près de 1000
enregistrements, seules les quelques activités correspondant effectivement à ces trois choix recoupés sont extraites dans un
sous formulaire.
Source et procédure
Pour la démonstration de cette
astuce, cette
base de données et les travaux précédents sont nécessaires.
Deux éléments composent cette
base de données. Ils sont représentés dans le volet de navigation sur la gauche de l'écran. Il s'agit de la
table t_sorties et du
formulaire f_villes.
- Double cliquer sur le formulaire f_villes pour l'exécuter,
Nous retrouvons les trois
listes dépendantes que nous avons construites lors de l'
astuce précédente. Vous pouvez donc choisir un département avec la première
liste déroulante. Dès lors, la deuxième liste se charge des villes correspondantes. Au choix de l'une d'entre elles, ce sont toutes les activités disponibles pour le lieu sélectionné qui sont proposées dans la troisième et dernière
liste déroulante.
Requête multicritère
Sous ces trois listes, vous avez remarqué la présence d'un
sous formulaire. Pour l'instant, il reste muet. Mais c'est bien lui qui doit recevoir les résultats de l'extraction en fonction des choix émis par l'utilisateur par le biais de ces
listes déroulantes.
Ce
sous formulaire doit se nourrir des résultats d'une
requête. Cette
requête doit utiliser les choix de l'utilisateur comme
critères à recouper pour produire le filtre sur les enregistrements. Mais elle doit aussi permettre d'extraire les données lorsque toutes les conditions ne sont pas encore définies. Concrètement et par exemple, au choix d'un département seulement, ce sont toutes les activités de sorties correspondantes qui doivent être affichées dans le
sous formulaire. Nous allons donc exploiter une
astuce que nous avions démontrée dans un précédent volet. Elle consiste à autoriser des critères vides.
Pour information, ces trois
listes déroulantes se nomment respectivement dep, villes et activites. Nous avons besoin de ces noms pour établir la jonction entre le
formulaire et la
requête.
- Fermer le formulaire en cliquant sur la croix de son onglet,
- 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 Ajouter puis sur le bouton Fermer,
En effet, la
table t_sorties est seule dans cette
base de données. Elle était donc sélectionnée par défaut. Nous l'avons ainsi ajoutée dans l'
éditeur de requête, dans sa représentation schématisée.
- Dans cette représentation, cliquer sur le champ s_rs pour le sélectionner,
- Avec la touche MAJ enfoncée, cliquer sur le dernier champ s_Ville,
Ainsi, nous les sélectionnons tous à l'exception du
champ de la clé primaire s_id.
- Glisser cette sélection vers le bas sur la grille de requête,
Nous indiquons ainsi quels sont les éléments que nous souhaitons afficher à l'extraction.
Nous devons maintenant poser les critères en concordance avec les choix effectués par l'utilisateur depuis le
formulaire à l'aide des
listes déroulantes. Par esprit de cohérence et d'organisation, il peut être opportun de glisser le
champ s_Ville devant le
champ s_act. Le premier critère doit être posé sur le
champ s_dep.
- Cliquer avec le bouton droit de la souris dans la zone Critères du champ s_dep,
- Dans le menu contextuel, choisir l'option Créer,
Nous affichons ainsi le
générateur d'expression. C'est lui qui va nous permettre de descendre jusqu'au
contrôle dep du formulaire pour établir la correspondance dynamique.
- Dans la liste de gauche, déployer l'arborescence des formulaires,
- Puis, sélectionner le formulaire f_villes,
- Dans la liste du milieu, double cliquer sur le contrôle dep,
Nous bâtissons ainsi l'expression dynamique de correspondance suivante :
Formulaires![f_villes]![dep]
Elle apparaît dans la zone de saisie en haut du
générateur d'expression.
- Cliquer sur le bouton Ok du générateur d'expression pour valider la syntaxe,
Elle s'inscrit dès lors dans la zone Critères du
champ s_dep. Nous devons maintenant poser les conditions sur la ville et l'activité. Mais comme nous l'évoquions, si elles ne sont pas définies, elles doivent être ignorées. Avant cela, nous proposons d'enregistrer cette
requête.
- Réaliser le raccourci clavier CTRL + S,
- La nommer r_sorties puis valider avec le bouton Ok,
La
requête apparaît désormais listée dans le volet de navigation.
- Cliquer droit dans la zone Critères du champ s_Ville,
- Dans le menu contextuel, choisir l'option Créer,
- Dans la zone de saisie du générateur, débuter la syntaxe comme suit : Comme '*' &,
Avec l'
opérateur Comme suivi du symbole de l'astérisque, nous autorisons tout ce qui suit dans le champ. Si la ville est définie, elle sera considérée et utilisée pour le filtre. Le cas échéant, le symbole de l'astérisque permettra de considérer toutes les données du champ. C'est ainsi donc que nous autorisons un critère vide. Le symbole de concaténation qui suit attend la fin de l'expression pour la correspondance dynamique avec le
contrôle Villes du
formulaire.
- Dans la liste de gauche du générateur, déployer l'arborescence des formulaires,
- Sélectionner le formulaire f_villes,
- Puis dans la liste du centre, double cliquer sur le contrôle Villes,
Nous bâtissons ainsi l'expression de correspondance suivante :
Comme '*' & Formulaires![f_villes]![villes]
- Valider la syntaxe en cliquant sur le bouton Ok du générateur d'expression,
- Puis, enregistrer les modifications de la requête (CTRL + S),
La dernière expression à bâtir est similaire. Seul le nom du contrôle à atteindre change.
- Dans la zone Critères du champ s_act, construire et valider l'expression suivante :
Comme '*' & Formulaires![f_villes]![activites]
- Ensuite, fermer la requête en l'enregistrant,
Liaison sous-formulaire et requête
Le
sous formulaire doit désormais se nourrir des résultats de cette
requête qui elle-même alimente ses critères en fonction des choix émis par le biais des
listes déroulantes du formulaire parent.
- Dans le volet de navigation, cliquer droit sur le formulaire f_villes,
- Dans le menu contextuel, choisir le mode création,
- Dans la vue en conception, cliquer sur le sous-formulaire pour le sélectionner,
- Activer alors l'onglet Données de sa feuille de propriétés,
- Déployer la liste déroulante de sa propriété Objet source,
- Dans les propositions, choisir la requête r_sorties,
Nous définissons ainsi le contenu dynamique susceptible de charger le
sous-formulaire au gré des actions de l'utilisateur par le biais des
listes déroulantes. Mais un dernier réglage reste à entreprendre. Dans l'astuce précédente, nous avons ordonné l'actualisation des
requêtes au changement de valeur dans les deux premières listes déroulantes. C'est ainsi qu'elles peuvent ajuster leurs contenus en fonction des choix réalisés en amont. Mais cet événement n'est pas encore géré sur la dernière liste, celle des activités. Or, elle doit imposer elle aussi la mise à jour des données dans le sous-formulaire.
- Sur le formulaire, sélectionner la troisième liste déroulante, celle des activités,
- Activer ensuite l'onglet Evénement de sa feuille de propriétés,
- Cliquer dans la zone de son événement Sur changement pour l'activer,
- Dès lors, cliquer sur le petit bouton situé à l'extrémité droite de la zone,
- Dans la boîte de dialogue, choisir Générateur de code et valider par Ok,
Nous basculons ainsi dans l'éditeur de
code VBA Access entre les bornes de la
procédure événementielle activites_Change. Vous notez la présence de deux précédentes procédures attachées au deux autres
listes déroulantes. Nous devons là aussi exploiter la
méthode Requery de l'
objet DoCmd pour forcer l'actualisation des
requêtes.
- Entre les bornes de la procédure, ajouter l'instruction VBA Access suivante :
Private Sub activites_Change()
DoCmd.Requery
End Sub
- Enregistrer les modifications (CTRL + S),
- Puis, fermer l'éditeur VBA Access pour revenir sur le formulaire en conception,
- Enfoncer la touche F5 du clavier pour l'exécuter,
- Avec la première liste déroulante, choisir un département, par exemple : 26-Drome,
Aussitôt, le
sous-formulaire se charge de toutes les activités recensées dans ce département. Elles sont au nombre de 134.
- Avec la deuxième liste déroulante, choisir une ville, par exemple : Valence,
Instantanément, les résultats du
sous-formulaire s'affinent. Les activités de sorties recensées dans la ville de ce département ne sont plus que 40.
- Avec la troisième liste déroulante, choisir une activité, par exemple : Hôtel,
L'extraction s'affine encore un peu plus pour livrer les 10 idées correspondant à la fois à l'activité et à la ville choisies pour le département sélectionné en amont. Et comme vous avez pu le voir, les extractions aboutissent également lorsque toutes les conditions ne sont pas encore émises. Voilà donc une
astuce fort intéressante et simple de mise en oeuvre pour offrir un outil efficace de consultation des données sur un
formulaire Access.