Leçon 14 : Listes déroulantes locales

Pour suivre cette leçon, vous devez avoir suivi les leçons précédentes. Ou plus précisément, vous devez être en possession de la base de données procd.mdb telle qu'elle était à la fin de la leçon précédente. Si vous n'êtes pas certain de l'avoir, vous pouvez la télécharger ici

Résumé de la leçon précédente

Lors de la dernière leçon, nous avons appréhendé le concept de Clé primaire (Identifiant. Nous avont vu son utilité (éviter les doublons principalement). Nous avons vu qu'il est possible de les placer, de les enlever, et même d'en mettre sur plusieurs champs à la fois. Nous avons vu également que le NuméroAuto est l'ami intime de la célé primaire, même s'ils ne sont pas obligatoirement associés.

Aperçu de cette leçon

Maintenant, nous allons voir comment faire pour créer nos propres listes déroulantes : Au lieu de taper directement les informations dans les champs, nous pouvons demander à ce qu'il faille sélectionner la valeur dans une liste déroulante.

Pour commencer, dans votre table T_Client, vous allez créer un nouveau champ qui s'appelle Titre : . Ce sera un champ qui va accueillir le titre du client : Madame, Mademoiselle ou Monsieur.

Lancez la table en mode saisie de données, et précisez les titres des premiers clients : . Vous constatez que comme nous n'avons pas défini vraiment de règles, il y a de multiples façons d'écrire les titres... Vous vous doutez quand même que lorsque plus tard, nous allens essayer d'extraire tous les "Monsieur", ça ne va pas vraiment être possible : Il faudra se rappeler que certains sont écris Monsieur, M, Ms, ou même Mr, ou carrément avec une faute (Monssieur).

Ah mais je me rappelle du "Valide Si"... On a qu'a dire que la zone ne peut contenir que Madame, Mademoiselle ou Monsieur !

Oui, mais ce n'est pas très convivial... Justement, nous allons étudier une manière de faire vraiment plus sympa.

Marche à suivre pour créer une liste déroulante

Retournez dans la table en mode création, et dans le champ titre, à la place de Texte, choisissez "Assistant liste de choix"

.

La boîte de dialogue suivante apparait :
Sélectionnez la première option "Je taperai les valeurs souhaitées", et cliquez sur Suivant.
.

Vous arrivez maintenant ici :
cliquez dans la zone en dessous de Col1

Ecrivez Madame, Mademoiselle, Monsieur, comme ceci :
et cliquez sur Suivant

Vous êtes ici :
Cliquez sur Terminer

Voilà ! C'est terminé. Vous êtes revenu à la case départ ! Constatez que le champ Titre est revenu à texte . C'est normal. Pour voir le travail qui a été fait, Lancez la table en mode saisie de données, et cliquez dans le champ titre de votre premier client : . Vous constatez qu'une petite flèche apparait : C'est votre liste déroulante. Si vous cliquez dessus, vous allez constater qu'il va vous donner le choix entre Madame, Mademoiselle et Monsieur : . Ce n'est pas plus compliqué que ça !

A titre d'exercice, retournez dans la table en mode création, et refaites la manoeuvre : Vous n'avez pas besoin de recréer un champ titre, vous allez dans votre Titre existant, et comme type de données, vous REchoisissez Assistant liste de choix : Access va vous renvoyer dans l'assistant. Refaites exactement la même manoeuvre que nous venons de faire, histoire de vous familiariser avec cette technique.

Peut-on rajouter des nouveaux éléments dans cette liste ? Par exemple, j'ai un avocat comme client, et je veux lui attribuer Maître comme titre.

C'est très simple, vous lancez la table en mode saisie de données, et plutôt que de cliquer sur la petite flèche, vous écrivez Maître : , et le tour est joué. Attention par contre : Ce n'est pas parce que vous l'avez écrit une fois que ça apparaît dans la liste ! C'est un titre exceptionnel : Vous pouvez l'écrire si vous voulez, mais c'est tout : .

Quel est l'intérêt de faire comme ça ?

Eh bien justement : Imaginez que vous avez des milliers de clients, et que seulement un ou deux sont des avocats : Vous aimeriez bien pouvoir écrire Maître pour ces 2 clients, mais vous n'avez toutefois pas envie que ce titre apparaisse dans la liste : Il est trop peu usité.

Je vois, je vois ! Mais si je voulais vraiment ajouter "Maître" dans ma liste ?

Vous avez toujours la possibilité de re commencer la liste déroulante avec l'assistant, comme tout à l'heure, et ajouter Monsieur, madame, Mademoiselle et ... Maître !

Oui... Bien sûr... On ne peut pas simplement l'ajouter sans devoir tout recommencer ?

Si. On peut. Allez dans la table en mode création, cliquez sur le champ Titre, puis, en bas sur l'onglet Liste de choix, puis juste à la fin de "Madame";"Mademoiselle";"Monsieur". Ajoutez à la fin de cette ligne ;"Maître" pour que ça donne ce résultat exactement : "Madame";"Mademoiselle";"Monsieur";"Maître" : , et lancez la table en mode saisie de données. Maintenant, vous pouvez constater que Maître est maintenant disponible dans la liste déroulante : .

J'ai compris !!! Mais si j'ai une très longue liste de choix... Je ne sais pas moi, par exemple, j'ai un champ "Pays", avec plus de 200 pays, ça doit être plus pénible de le rechercher dans une liste que de le taper à la main, non ?

Ah mais vous pouvez ! Au lieu de cliquer sur la flèche de la liste, vous cliquez simplement dans le champ : , écrivez m : : Vous constatez qu'Access complète automatiquement avec le premier nom qui commence par M qu'il rencontre : Madame. Si vous vouliez écrire Mademoiselle, vous devriez écrire les 4 premières lettres : made : .

J'ai compris. Mais c'est bizarre, s' j'écris mai, il ne complète pas par Maître, pourquoi ???

Parce que Maître s'écrit avec un i avec accent circonflexe : î... ALors évidemment, si vous écrivez mai... ça ne va pas...

Evidemment ! Et donc, si je voulais écrire Monseigneur par exemple, il se laisserait faire, comment quand on écrivait Maître alors qu'il n'était pas encore intégré dans la liste déroulante ...

Oui, bien entendu.

Et si par exemple, pour éviter que les gens n'écrivent autre chose que ce qui est proposé dans la liste, c'est possible de la "verrouiller" ?

Oui, mais si vous la verrouillez, plus question de mettre des titres exceptionnels comme "Sa Majesté", ou "Sa Sainteté", ou simplement "Monseigneur" ! Ou alors, il faut qu'ils soient prévu dans la liste à la base...

Oui, bien sûr, mais je pensais que si on autorise l'utilisateur à écrire des choses qui ne sont pas proposées dans la liste, on court le risque que Monsieur soit proposé, il y ait des distraits qui écrivent Mr, M., ou même Mister, ou Dieu sait quoi encore... Et finalement la liste n'a pas servi à grand chose !

Eh oui... Je ne vous le fait pas dire... Voici comment faire pour bloquer la liste : cliquez sur le champ Titre, cliquez sur l'onglet Liste de choix, et dans l'option Limiter à liste : Choisissez Oui.

A partir de maintenant, vous ne pouvez plus entrer autre chose que ce qui est proposé. Essayez : Lancez la table en mode saisie de données, et essayez d'écrire Plouf dans un champ titre : . On dirait que vous pouvez MAIS... Il suffit que vous cliquez ailleurs, ou que vous appuyer sur ENTER ou tabulation pour que surgisse ce message d'erreur :

et, dès que vous cliquez sur OK (Pas le choix...), la liste s'ouvre automatiquement pour bien vous faire comprendre que vous DEVEZ choisir dans la liste :

Parfait ! C'est exactement ce que je voulais. En fait on devrait systématiquement bloquer les listes déroulantes ?

Disons que très souvent, c'est ce qu'on fait... Mais bon... Dans certains cas, on peut la laisser libre... Un peu comme si la liste déroulante n'était dans certains cas qu'une proposition. Par exemple, une liste déroulante dans le champ prénom, avec comme propositions les prénoms les plus courants, mais comme vous ne pourrez jamais mettre tous les prénoms du monde, vous êtes bien obligé de la laisser libre

Oui. D'accord... Mais bon, dans cet exemple, moi, je ne mettrais même pas de liste déroulante, c'est trop vaste les prénoms...

Vous avez raison. Moi non plus je n'en mettrais pas. Mais c'est possible, c'était pour donner un exemple.

Par contre, je constate un truc plus grave : Ma table T_Client est encore pleine de "faux" titres :

Ben oui... Ils datent du temps ou nous n'avions pas encore installé de liste déroulante, ou encore quand nous ne l'avions pas bloqué..

Ah.. Mais pourquoi Access ne les a-t-il pas corrigés ?

Mais comment voulez-vous qu'il les corrige ??? Comment Access pourrait-il deviner que Mr. doit devenir Monsieur, et Mme doit devenir Madame ? Il est malin, mais pas à ce point...

Oui...évidemment... C'est logique ! Bon, il aurait pu les effacer ?

Oui. Il aurait pu. mais entre nous, c'est quand même sympa qu'il les laisse... ça laisse une trace de ce que vous avez entré

En d'autres mots, nous aurions dû immédiatement créer la liste déroulante et la bloquer avant d'entrer des données ?

Tout à fait. Oui. Exactement !!! Cette réflexion est juste, vraiment très juste !!!! Ici, nous sommes en cours, ce n'est donc pas grave, mais imaginez que vous bloquez votre liste déroulante alors que vous avez entré quatorze mille clients, vous imaginez le travail de recherche des titres écris faux que vous allez avoir ? Un travail colossal !!!

Je suis en train de me rendre vraiment compte qu'avec Access, on a VRAIMENT intérêt à "préparer le terrain au millimètre" avant de se précipiter à entrer les données !

Là, je ne vous le fait pas dire !!! Un peu d'effort à la base va vous éviter bien des heures de travail de fourmi à la recherche des erreurs

Apparté

Il est possible de créer des listes déroulantes avec plusieurs colonnes. Comment faire et pourquoi ? Imaginez par exemple que la table est remplie par une personne ne parlant que l'anglais. Ce serait dès lors sympathique de lui expliquer ce qu'elle choisit dans la liste déroulante. Imaginons par exemple un champ CouleurPreferee, qui serait composée d'une liste de couleurs en français donc, mais qui montrerait le nom des couleurs en anglais, dans une 2ème colonne, comme ceci : . Et lorsqu'on choisit une valeur, même en anglais, c'est la valeur française qui se mémorise (Oui, parce que sinon, la table va être complètement instable : avec parfois la valeur française, parfois la valeur anglais : ça ne va pas.) Bon alors, comment faire ? Allons-y ensemble :

  1. Créez un champ Couleur Preferee
  2. Définissez-le en Assistant liste de choix :
  3. Choisissez
  4. Définissez le nombre de colonnes à 2 :
  5. Cliquez sous Col1 :
  6. Dès ce moment, vous avez 2 colonnes à disposition qu'il vous suffit maintenant de remplir :
  7. Vous constatez une boîte de dialogue supplémentaire :

    C'est ici que vous allez choisir la colonne qui va être mémorisée. En effet, quand vous allez choisir par exemple Jaune pour un client... C'est Jaune ou c'est Yellow que vous choisissez ? Eh bien, c'est Jaune, même si vous cliquez sur Yellow (Vois allez pouvoir tester ça dès que la liste sera terminée). C'est jaune... Pour autant que vois choisissiez Col1 ici même. Si vous choisissez Col2, ce sera les couleurs anglaises qui seront gardées en mémoire. Bon, par exepérience, je peux vous dire que vous avez intérêt de toujours sélectionner Col1 lorsque vous avez ces listes à plusieurs colonnes, sinon j'ai constaté qu'Access "pète un peu les plombs". Ce n'est pas vraiment un problème, car c'est sans doute toujours la première colonne la plus importante.

Voilà. C'est terminé. Testez (Lancez la table en mode saisie de données) :

Bon... Hem... On peut résumer ?

La liste déroulante (appelée également liste modifiable) permet de choisir dans une série de valeurs prédéfinies une valeur. Dans notre exemple, nous avons créé une liste déroulante contenant les différents titres possibles : Monsieur, madame, mademoiselle. Il est possible par la suite de soit recommencer la liste avec d'autres valeurs, ou encore d'ajouter ou de retirer des valeurs manuellement grâce à la propriété Source, qui se trouve dans l'onglet Liste de choix.
Nous avons également vu qu'il est possible d'accepter ou de refuser que des valeurs n'apparaissant pas dans la liste déroulante soient quand même écrites (Propriété Limiter à Liste de l'onglet Liste de choix)

Avez-vous bien compris ?

  1. Dans quels cas fait-on une liste déroulante ?
    a. Lorsque dans un champ, j'ai besoin de placer plus d'une information à la fois
    b. Lorsque dans un champ, il est plus pratique de choisir la valeur dans une liste que de l'écrire à la main ***
    c. Je la met dans tous les champs si les utilisateurs parlent une langue étrangère

  2. J'ai une table T_Voiture (une liste de voitures d'occasions à vendre) avec quelques champs. Lequel de ces champs ne pourrait pas franchement être une liste déroulante ?
    a. Le champ contenant la couleur de la voiture
    b. Le champ contenant le nom et le prénom du propriétaire précédent ***
    c. Le champ contenant l'état général de la voiture (Bon, moyen, mauvais,...)
    d. Le champ contenant le nombre de portes

  3. J'ai un champ EtatCivil dans ma table T_Client. Comment vais-je le définir ?
    a. Ce n'est pas une liste déroulante, c'est une case à cocher sur un champ "Marié" : Oui/Non
    b. Je ne fais pas de liste déroulante : Je laisse du texte libre
    c. Je vais faire une liste déroulante avec comme choix "Marié(e), Divorcé(e), Célibataire, Veuf(ve), Autre" et je vais Limiter à liste : Oui ***

  4. J'ai un champ Sexe (Homme / Femme). Comment vais-je le définir ?
    a. Je fais plutôt une case à cocher : Homme (Oui/Non) *** (3 réponses justes)
    b. Je fais une liste déroulante avec Homme et Femme, et limiter à liste : Oui ***
    c. Je fais une liste déroulante avec Homme et Femme, et limiter à liste : Non
    d. Je laisse le champ libre, mais dans Valide Si, j'écris H Ou F, et dans Message si Erreur, j'écris "H ou F sont les 2 seules valeurs permises" ***

  5. J'ai un champ Métier dans ma table T_Client. Qu'est-ce que je fais ?
    a. Je laisse le champ libre
    b. Je prépare une liste déroulante avec quelques métiers courants, mais je laisse Limiter à liste : Non ***
    c. Je prépare une liste déroulante avec quelques métiers courants, et je définis Limiter à Liste : Oui
    d. Je prépare une liste déroulante avec tous les métiers imaginables, et je définis Limiter à liste : Oui

Pour voir les solutions, il vous suffit de sélectionner le questionnaire ci-dessus : 3 petites étoiles *** apparaîtront en face des bonnes réponses.

Exercice

Vous allez créer une base de données Agence Matrimoniale.MDB, dans laquelle vous allez installer une table T_Candidat, qui va contenir les données suivantes :

  1. Le nom du candidat et son prénom
  2. Son titre (Monsieur, madame, mademoiselle)
  3. Est-il fumeur ?
  4. A-t-il un animal domestique ? Quoi (Chien, chat, ...)
  5. Son état civil
  6. Son pays d'origine
  7. Son salaire

Voici trois données exemple :

  1. Jean Dakota, non-fumeur, sans animaux, célébataire, en provenance de France, gagne 6'800.--/Mois
  2. Juliette Terroir, fumeuse de Malboro, tunisienne divorcée avec un beau siamois, pas de salaire actuellement
  3. Noémie Bouton, fumeuse, Suissesse, possède 2 hamsters, gagnant 60'000 francs/année

L'exercice consiste principalement à créer judicieusement les listes déroulantes sur les bons champs, avec les bonnes options (Notamment s'il s'agit d'une liste "Bloquée")

Téléchargez la solution de l'exercice ici

Si vous n'êtes pas tout à fait certain d'avoir suivi correctement toutes les étapes de cette leçon, vous avez la possibilité de télécharger ici la version de procd.mdb exactement dans l'état ou elle devrait être à la fin de cette leçon.

Aperçu de la leçon suivante

Lors de la prochaine leçon, vous allez réellement "Booster" vos listes déroulantes : En effet, il est carrément possible de créer des listes déroulantes basées sur d'autres tables, ce qui va nous permettre d'avoir de très grandes listes de choix avec un minimum de travail : Pour les pays par exemple, une table séparée des pays s'impose, au vu du nombre de choix possibles (Plus de 200)