Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Filtrer les enregistrements d'un formulaire
L'objectif de cette nouvelle
astuce Access est de démontrer comment il est possible de
filtrer les enregistrements, directement sur le
formulaire, sans utiliser de
sous formulaire.
Dans l'exemple finalisé illustré par la capture, l'utilisateur émet un choix sur le département à l'aide d'une première
liste déroulante. Puis, il restreint le champ d'action en précisant la ville depuis une seconde
liste déroulante reliée à la première. Aussitôt, tous les enregistrements concordants sont filtrés juste en-dessous, directement sur le
formulaire. L'idée consiste à exploiter un
formulaire tabulaire présentant les lignes les unes en dessous des autres et non les unes après les autres.
Source et procédure
Pour la démonstration de cette
astuce, nous proposons de récupérer une
base de données hébergeant ce
formulaire tabulaire entre autres.
Comme l'indique le volet de navigation sur la gauche de l'écran, cette
base de données est constituée d'une
table, d'une
requête et d'un
formulaire. La table archive des activités de sorties référencées sur leur désignation, département, ville et type d'activité.
La première
astuce pour aboutir cette solution réside dans l'exploitation d'une
requête comme
source de données du
formulaire tabulaire. Nous l'avons ainsi construit à l'aide de l'assistant. Si vous ouvrez la
requête en mode création, vous constatez qu'elle se contente pour le moment de restituer toutes les informations de la
table. Aucun critère n'est en effet posé.
- Dans le volet de navigation, double cliquer sur le formulaire f_source pour l'exécuter,
Les 896 enregistrements de la table sont listés dans la partie grisée du formulaire grâce à la
requête r_source. Vous pouvez choisir un département avec la première
liste déroulante et une ville qui lui appartient avec la seconde. Mais à ce stade, ces actions ne produisent aucun effet sur les résultats restitués. Il s'agit de l'enjeu de cette
astuce.
- Tout à fait à gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
- Dans la liste, choisir le mode Création,
Nous basculons ainsi dans la vue en conception du
formulaire. Les trois champs permettant la restitution de tous les enregistrements sont placés dans la zone Détail. Si vous sélectionnez tour à tour les deux
listes déroulantes et consultez leur
propriété Contenu dans l'
onglet Données de leur
feuille de Propriétés, vous visualisez leurs syntaxes :
SELECT DISTINCT s_dep FROM t_sorties;
SELECT DISTINCT s_ville FROM t_sorties WHERE [s_dep]=[dep];
Par une
syntaxe Sql, la première sélectionne les départements uniques issus de la
table t_sorties. La seconde restitue les villes uniques de ce département grâce à une
clause Where. C'est ainsi que la dépendance est créée entre les deux
listes déroulantes.
Filtrer les résultats
Pour isoler uniquement les enregistrements correspondant aux deux choix émis par le biais des deux
listes déroulantes, l'
astuce est triviale. Elle consiste à retravailler la
requête utilisée comme
source de données par le
formulaire tabulaire. Deux
critères doivent être émis sur les champs respectifs du département et de la ville. Ces
critères doivent correspondre aux valeurs choisies par l'utilisateur dans ces listes.
- Dans le volet de navigation, cliquer droit sur la requête r_source,
- Dans le menu contextuel, choisir le mode Création,
- Dans la grille de requête, cliquer droit dans la zone Critères du champ s_dep,
- Dans le menu contextuel, choisir la commande Créer,
Nous affichons ainsi le
générateur d'expression pour établir la correspondance entre le champ du département et ce même département choisi par l'utilisateur avec la première
liste déroulante sur le
formulaire tabulaire.
- Dans la liste de gauche, déployer complètement l'arborescence des formulaires,
- Sélectionner alors le formulaire f_source,
- Dans la liste du centre, double cliquer sur le champ dep de la liste déroulante,
L'expression de correspondance se construit ainsi automatiquement dans la partie supérieure du
générateur d'expression.
- Cliquer sur le bouton Ok du générateur pour valider l'expression,
La syntaxe de correspondance apparaît désormais dans la zone Critères du champ s_dep :
[Formulaires]![f_source]![dep]
- Copier cette syntaxe avec le raccourci clavier CTRL + C,
- Cliquer dans la zone Critères du champ s_Ville,
- Taper tout d'abord l'expression suivante : Comme "*" &,
- Ajouter un espace et coller (CTRL + V) la précédente syntaxe copiée,
- Dans les derniers crochets, remplacer le nom du champ dep par Ville,
Ce nom désigne la seconde liste déroulante sur le
formulaire tabulaire. La syntaxe finalisée est donc la suivante :
Comme "*" & [Formulaires]![f_source]![Ville].
Grâce à l'
opérateur Comme suivi du symbole de l'astérisque, nous cherchons à trouver tous les enregistrements pour lesquels le champ de la ville contient celle désignée par la liste déroulante. Si elle n'est pas définie, l'étoile permet de considérer tous les enregistrements. Donc, la simple sélection d'un département doit suffire à restituer toutes les informations concordantes dans le
formulaire.
- Valider la syntaxe avec la touche Entrée du clavier,
- Enregistrer la requête avec le raccourci clavier CTRL + S,
- Puis, fermer cette dernière en cliquant sur la croix de son onglet,
Nous l'avons compris au travers de précédentes formations, pour que le
formulaire actualise son affichage, les
requêtes doivent être recalculées aux changements de sélections effectués dans les
listes déroulantes.
- Revenir sur le formulaire en mode Création,
- Sélectionner la première liste déroulante des départements,
- 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,
- A l'extrémité droite de la zone, cliquer sur son petit bouton à trois points,
- Dans la boîte de dialogue, choisir Générateur de code et valider par Ok,
Nous basculons ainsi dans l'
éditeur de code Visual Basic Access, entre les bornes de la
procédure événementielle dep_Change.
- Entre les bornes de cette procédure, saisir les deux instructions VBA suivantes :
Private Sub dep_Change()
Ville.Value = ""
DoCmd.Requery
End Sub
Tout d'abord, grâce à la
propriété Value de l'
objet Ville, nous effaçons le précédent potentiel choix de ville dans la seconde
liste déroulante, au changement de département. Ensuite, grâce à la
méthode Requery de l'
objet DoCmd (Do Command), nous forçons l'actualisation des
requêtes engagées sur ce
formulaire tabulaire.
- Revenir sur le formulaire en conception,
- Sélectionner désormais la seconde liste déroulante, celle des villes,
- Dans la feuille de propriétés, cliquer dans la zone de son événement Sur changement,
- A son extrémité droite, cliquer sur le petit bouton à trois points,
- Dans la boîte de dialogue qui suit, choisir Générateur de code et valider par le bouton Ok,
Nous sommes de retour dans l'
éditeur de code Visual Basic Access, mais cette fois entre les bornes de la
procédure événementielle Ville_Change.
- Y inscrire l'instruction suivante :
Private Sub Ville_Change()
DoCmd.Requery
End Sub
De la même façon donc, nous forçons le recalcul des
requêtes au changement de ville. C'est ainsi que le
formulaire tabulaire pourra actualiser son affichage pour présenter l'extraction affinée des résultats.
- Enregistrer les modifications (CTRL + S) puis fermer l'éditeur VBA Access,
- De retour sur le formulaire, l'enregistrer à son tour,
- L'exécuter ensuite à l'aide de la touche F5 du clavier,
- Choisir un département grâce à la première liste déroulante,
Comme vous pouvez le voir, la liste des enregistrements concordants s'actualise et se restreint. C'est notre second
critère utilisant l'
opérateur Comme et le symbole de l'astérisque qui permet d'ignorer la condition sur la ville lorsque celle-ci n'est pas définie.
- Avec la seconde liste déroulante, choisir une ville de ce département,
L'extraction est parfaitement actualisée en temps réel. Seules subsistent les activités de sorties correspondant aux choix du département et de la ville associée. Et cette solution est aboutie directement depuis un
formulaire sans faire appel à un
sous-formulaire attaché à une source de données dynamique.
A l'occasion de prochaines
astuces, nous exploiterons ces travaux pour voir comment il est possible de surligner intégralement la ligne de l'enregistrement cliqué directement sur le
formulaire. Nous apprendrons aussi à extraire toutes les informations de détail associées dans les zones de saisie situées juste au-dessus. Enfin, nous découvrirons l'
astuce permettant de livrer le résultat de synthèse sur le nombre d'enregistrements effectivement concordants avec ces conditions recoupées.