Filtrer un formulaire à l’aide d’une liste déroulante

Il peut être utile de vouloir filtrer un formulaire de type continu dans Access, c’est à dire qui affiche les enregistrements sur plusieurs lignes, avec une liste déroulante associée au champ que l’on souhaite filtrer. Par exemple ici pour le champ VILLE :

Pour cela, il faudra copier/coller le formulaire continu F_LISTE_CONTACTS déjà créé, le renommer F_LISTE_CONTACTS_PAR_VILLE, par exemple, faire dépendre ce nouveau formulaire d’une requête R_CONTACTS_PAR_VILLE contenant tous les champs de la base de données, puis ajouter dans l’En-tête du formulaire en mode Création un contrôle de type Zone de liste déroulante :

Une fois positionné dans l’En-tête, la fenêtre suivante s’ouvre dans laquelle il faut cocher le 3ème choix, “Recherche un enregistrement dans mon formulaire basé…” :

Cliquer sur Suivant, choisir le champ VILLE puis cliquer sur Terminer et le contrôle s’affiche. Il faudra le positionner à l’endroit voulu.

Si on quitte le mode Création et que l’on revient en mode Affichage on remarque alors 2 problèmes :

  1. plusieurs éléments de la liste déroulantes sont en double, correspondant aux doublons de villes de la base de données source, il y en a toujours.
  2. si on sélectionne une ville dans la liste, un seul enregistrement s’affiche dans le formulaire et non tous ceux qui sont de la même ville.

Le premier problème est résolu en mode Création du formulaire, en cliquant sur le contrôle de la zone de liste, puis dans la Feuille de propriétés de la zone, sur l’onglet Données et la ligne Contenu, et en ajoutant l’instruction SQL DISTINCT juste après la première instruction SELECT, ce qui éliminera les doublons de la liste.

Le deuxième problème sera résolu en modifiant la requête source du formulaire R_CONTACTS_PAR_VILLE, et en faisant dépendre la ligne Critères du champ VILLE de la liste déroulante du formulaire F_LISTE_CONTACTS_PAR_VILLE grâce à l’instruction COMME “*” & [source de la liste] & “*”, comme montré ci-dessous :

Enfin, pour que tous les enregistrements correspondant au choix de la liste s’affichent de façon continue dans le formulaire, et non uniquement le premier, il faut ajouter une Macro avec une seule action de type AfficherTousEnreg à partir de l’onglet Evénement, ligne Sur changement des Propriétés de la zone de liste.