Comment créer une liste déroulante restreinte

Vous pouvez télécharger ici la base de données qui a servi de base à cet exemple

Il s'agit d'un problème fréquemment posé. Comment créer une liste déroulante qui ne propose qu'un choix restreint parmi une série de valeurs ? Je m'explique : Imaginez un formulaire de saieie des clients, basé sur une table T_Client. Il s'agit de sélectionner son pays dans une liste des pays, et, une fois le pays sélectionné, chosiri sa ville dans une 2ème liste, mais en n'affichant que les villes du pays sélectionné :

La marche à suivre, bien que logique est assez longue. Il ne s'agit pas d'une solution unique, mais d'un exemple parmi d'autres.

Marche à suivre

Etape 1 : Créez une table T_Client, comme ceci :

N'y entrez aucun enregistrement, fermez-là, enregistrez-là sous T_Client. Pas de clé primaire.

Etape 2: Créez une nouvelle table T_VillePays, comme ceci :

Entrez-y les données suivantes :

Fermez la table et enregistrez-là sous T_VillePays. Pas de clé primaire.

Etape 4: Créez une nouvelle requête, basée sur T_VillePays

Ce sera une requête de type Regroupement. Placez-y uniquement le champ Pays. Le but est d'obtenir un seul exemplaire de chaque pays existant.

Voici le résultat :

Fermez cette requête et enregistrez-là sous R_Pays

Etape 5: Retournez dans la table T_Client, et créez l'assistant liste de choix pour les pays

Cette liste de choix sera bien entendu basée sur R_Pays.

Fermez la table et enregistrez-là

Etape 6: Créez un formulaire basé sur T_Client

Comme ceci :

Fermez-le, et enregistrez-le sous F_Client.

Etape 7: Créez une nouvelle requête basée sur T_VillePays

Placez-y les deux champs Ville et Pays :

C'est maintenant, dans cette requête, que le noeud du problème va se résoudre. Comme vous l'aurez peut-être déjà deviné, nous sommes en train de concevoir la requête qui va servir de source au champ Ville de T_Client. Et il va donc s'agir de ne montrer QUE les villes correspondantes au pays sélectionné dans l'enregistrement courant du formulaire F_Client. Pour restreindre cette liste, vous allez devoir indiquer comme critère de Pays le pays indiqué dans le formulaire. Pour ce faire, cliquez avec le bouton droit de la souris dans le critère du pays, et choisissez Créer :

Allez chercher Formulaires/Tous les formulaires/F_Client, cliquez sur "Liste de champs", et double-cliquez sur "Pays" pour obtenir Formulaires![F_Client]![Pays] comme ceci :

Et cliquez sur OK.

Si vous exécutez ce formulaire maintenant, il va vous demander :

Si vous répondez Suisse, il va vous donner toutes les villes de Suisse. Mais cette boîte de dialogue disparaîtra dès que le formulaire F_Client sera ouvert.

Fermez cette requête et appelez-là R_Ville

Etape 8: Créez la liste de choix dans T_Client

Ne mettez QUE la ville :

Ce #Nom ? est normal, c'est à cause du paramètre qui va chercher dans le formulaire qui est fermé provisoirement.

Fermez T_Client et Enregistrez.

Etape 9: Mettre à jour le formulaire avec cette nouvelle liste

Ouvrez F_Client, et supprimez le champ Ville

Refaites-le glisser depuis la liste des champs, afin que ce soit la liste modifiable :

Etape 10: C'est quasiment terminé

Lancez votre formulaire en mode saisie de données, et saisissez Alain Dupont, choisissez son pays : France, et constatez avec émerveillement que dès que vous avez choisi France, dans la liste des villes, il n'y a que les villes ... Françaises !

Etape 11: Rafraîchissement de la liste

Il y a juste encore un petit bug : si, maintenant que vous avez choisi France pour Alain Dupont, vous vous rendez compte que vous vous êtes trompés et qu'il habite en Suisse, lorsque vous choisissez Suisse, la liste des villes reste la liste des villes françaises. Pour remédier à celà, un doigt de Visual Basic suffira. Il va en fait s'agir de rafraîchir la liste des villes à l'instant ou l'utilisateur clique dessus, c'est à dire Sur Réception Focus.

Revenez en mode créationd e votre formulaire, et demandez les propriétés de votre liste Ville (Bouton droit de la souris, propriétés) : Cherchez la propriété "Sur Réception Focus", cliquez dessus, choisissez "Procédure événementielle", et cliquez sur les 3 petits points juste à côté :

Une fois dans Visual Basic, écrivez simplement Ville.Requery, comme ceci :

Fermez Visual Basic avec la grosse croix ROUGE en haut à droite

Et voilà : Maintenant, chaque fois que vous allez changer de pays, la liste déroulante s'actualisera.

Attention : Si vous choisissez Allemagne, puis Berlin, puis vous changez Allemagne en Belgique, Berlin restera affiché jusqu'à ce que vous choisissiez une ville belge, problème qu'on pourrait aussi résoudre avec Visiual Basic, mais nous allons nous arrêter là, sinon on n'en finit jamais.