Leçon 14 : Listes déroulantes locales

Temps nécessaire pour suivre cette leçon : Entre un quart d'heure et une demie heure

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 ProFormation.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

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.

Sommaire

  1. Création d'une liste déroulante locale avec l'assistant
  2. Choix d'une valeur non proposée dans la liste déroulante
  3. Ajout d'un nouveau choix dans la liste de choix
  4. Saisie de valeurs dans une liste déroulante qui se complète automatiquement
  5. Verrouillage d'une liste déroulante afin d'interdire une saisie qui n'est pas proposée
  6. Pourquoi les listes déroulantes ne sont elle pas toujours conseillées ?
  7. Utilisation d'une liste déroulante multi-colonnes

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 de règles, il y a de multiples façons d'écrire les titres... Vous vous doutez que lorsque nous allons essayer d'extraire tous les "Monsieur", ça ne va pas vraiment être possible : Il faudra se rappeler que certains sont écris Monsieur, M, ou même Mr, ou carrément avec une faute (Monssieur).

Je me rappelle du "Valide Si"... On a qu'à préciser 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.


Création d'une liste déroulante locale avec l'assistant

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"

Cliquez sur "Terminer"

C'est terminé. Vous êtes revenu à la case départ ! Constatez que le champ Titre est revenu à texte . C'est normal. Pour constater 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 voir qu'il vous donne 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 RE-choisissez "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.


Choix d'une valeur non proposée dans la liste déroulante

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 : .

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

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 ! Mais si je voulais vraiment ajouter "Maître" dans ma liste ?

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


Ajout d'un nouveau choix dans la liste de choix

On ne peut pas simplement l'ajouter sans devoir tout recommencer ?

Si. 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 : .


Saisie de valeurs dans une liste déroulante qui se complète automatiquement

Mais si j'ai une très longue liste de choix... Par exemple, j'ai un champ "Pays", avec plus de 200 pays, ça doit être assez 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 : .

Mais c'est bizarre, si j'écris "mai", il ne complète pas par "Maître", pourquoi ???

Parce que Maître s'écrit avec un i avec accent circonflexe : î !

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

Oui, bien entendu. Où voulez-vous en venir ?


Verrouillage d'une liste déroulante afin d'interdire une saisie qui n'est pas proposée

Je voulais savoir s'il était possible de verrouiller la liste pour empêcher d'écrire autre chose que ce qui est proposé...

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, 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 d'écrire "Mr", "M.", "Mme", "Monssieu" ou que sais-je encore... !

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 (Même pas besoin d'enregistrer, le simple chamgement de champ suffit) 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 :


Pourquoi les listes déroulantes ne sont elle pas toujours conseillées ?

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 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

Mais bon, dans votre exemple des prénoms, 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 :

Oui, ils datent de l'ancienne époque où nous n'avions pas encore installé de liste déroulante, ou encore quand nous ne l'avions pas bloquée.

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

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...

C'est logique ! Bon, il aurait pu les effacer ...

Oui, mais ça n'aurait pas été très convivial !

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, vous êtes 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 écrits 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


Utilisation d'une liste déroulante multi-colonnes

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.) Comment faire ?

  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 ? 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 seront les couleurs anglaises qui seront gardées en mémoire. 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 recommencer la liste avec d'autres valeurs, ou encore d'ajouter ou même 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 manuellement sans être choisies (Propriété Limiter à Liste de l'onglet Liste de choix)

Avez-vous bien compris ?

  1. Dans quels cas construit-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 ? (plus d'une réponse possible)
    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. Que fais-je?
    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 ? Quel genre (Chien, chat, poisson, serpent,...)
  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 chat 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 ProFormation.mdb exactement dans l'état ou elle devrait être à la fin de cette leçon.

Avez-vous une question technique concernant cette leçon ? Cliquez ici !
Une remarque sur cette leçon ? Un problème ? Une erreur ? une ambiguité ? Soyez gentil de m'en informer