Leçon 13 |
|||
Listes déroulantes locales
|
Dans cette leçon, nous allons apprendre à concevoir les listes déroulantes : plutôt que d'écrire du texte dans les champs, pourquoi pas choisir les valeurs possible dans une liste ? Nous verrons qu'il est possible de choisir une seule valeur, mais aussi plusieurs à la fois pour le même enregistrement. Liste de choix, liste déroulante, liste modifiable : ce sont des synonymes. |
Sommaire
|
Nous allons ajouter le titre de civilité (Monsieur, Madame, Mademoiselle) à nos clients.
Ouvrez votre base de données, et la table T_Client en mode création. Créez un nouveau champ tout à gauche que vous nommerez Civilite.
Lancez la table en mode saisie de données, et recopiez les civilités, comme ceci (La faute d'orthographe est voulue) :
Comme vous le constatez, non seulement on peut se tromper (Monssieur), mais on peut aussi écrire M.
Evidemment, lorsque nous allons rechercher tous les Monsieur, il nous manquera Michael Jackson et Steven Spielberg.
Aussi, plutôt que de laisser la saisie libre, nous allons nous faire épauler par une liste déroulante qui va se présenter comme ceci :
Pour ce faire :
Constatez que le champ est revenu à Texte.
La liste de choix n'est donc pas un type de données particulier, mais un assistant pour remplir les données. Si votre liste de choix avait dû choisir entre des données numériques (Choisir le pourcentage de rabais 2,3,5,10,15 ou 30% par exemple), il aurait fallu définir le champ comme Numérique avant de re-choisir par dessus : Assistant liste de choix.
Lancez la table en mode saisie de données,et il vous suffit de cliquer dans le champ Civilité de n'importe quel client pour faire apparaître la flèche qui vous permettra d'accéder au choix Monsieur, Madame, Mademoiselle.
Constatez que le M. et Monssieur sont toujours présents. Ils n'ont pas été effacés ou remplacés par Monsieur. Je dis ça car si vous êtes en présence d'une grosse table qui contient déjà des milliers de civilités, et qu'une liste déroulante est déjà en place, rien ne prouve que les données qui s'y trouvent soient forcément des éléments de la liste !
Pour choisir une civilité, vous pouvez bien sûr cliquer sur Monsieur, madame ou mademoiselle, mais vous pouvez également taper les premières lettres dans la zone de liste : si vous écrivez m, il complète par le premier mot qui commence par m (Monsieur).
Si vous écrivez ma, il écrit Madame, et si vous écrivez made, il écrit Mademoiselle.
Ca s'appelle l'auto-complétion.
Pour le coup, nous sommes en train de prétendre que Chaplin est Mademoiselle... Laissons-le, mais c'est une erreur...
Ici, on le fait un peu exprès, mais des erreurs humaines, dans les bases de données, vous ne pourrez jamais y échapper, gardez-le à l'esprit.
Que se passe-t-il si on essaie d'écrire une civilité qui n'est pas dans la liste ?
Admettons que Patrick Bruel soit avocat, et que nous désirions le faire maître ? Essayez, et enregistrez avec CTRL-S pour vous assurer de la validité de votre entrée.
Pas de souci !
Par contre, ce n'est pas pour ça que Maître va se retrouver dans la liste pour les prochaines fois !
Il y n'y a toujours que Monsieur, Madame ou Mademoiselle !
Comment faire pour ajouter des nouveaux éléments dans la liste ?
Par exemple, imaginez que vous avez beaucoup de médecins, et que vous désiriez proposer également Docteur ? Par exemple, imaginons que Coluche soit médecin (par le rire ) :
Cliquez sur la flèche de la liste déroulante, et cliquez sur le petit icone qui apparaît en bas.
Ecrivez Docteur sous Mademoiselle,
et cliquez sur OK :
Voilà : vous pouvez maintenant choisir Docteur. ça restera disponible, même si vous fermez la base de données et que vous la rouvrez :
Revenez en mode création. En dessous de votre table, vous avez les propriétés des champs. Et vous avez un 2ème onglet (Liste de choix). Cliquez dessus. Regardez la propriété contenu : c'est le contenu de votre liste, et vous pouvez la modifier directement ici, comme si vous aviez utilisé le petit icone dont on vient de parler. Observez sa structure d'éléments entre guillemets séparés par des points-virgules : "Un élément";"Un autre élément";"Etc."
Plus haut, nous avons pu écrire la civilité Maître, bien que cet intitulé ne faisait pas partie de la liste déroulante (à titre exceptionnel, si on veut bien).
Si vous voulez interdire ce genre d'exception, et exiger que toute valeur choisie soit un élément de la liste, Mettez la propriété Limiter à liste de Civilite à Oui.
Lancez la table en mode saisie de données, et essayez maintenant de préciser que Coluche est Maître.
Appuyez simplement sur ENTER, ou cliquez dans un autre champ : Il ne vous laisse plus écrire Maître comme si de rien n'était : Il vous affiche un message d'erreur, mais qui n'est pas une fin de non recevoir : il vous propose de garnir la liste avec le Maître en plus !
Ce message d'erreur est trompeur !
Access vous laisse penser que la propriété Limiter à liste, quand elle est mise à Oui, vous interdit d'effectuer des choix non proposés dans la liste déroulante, mais vous permet d'ajouter de nouveaux choix "officiellement" (Maître, en l'occurrence).
Cliquez sur Oui.
Il vous demande d'enregistrer la structure de la table. Dites Oui.
C'est maintenant que vous êtes gratifié d'un message d'erreur Access à peu près incompréhensible :
Et vous voici revenu à la case départ !
Si vous rappuyez sur ENTER ou que vous cliquez sur un autre champ, vous aurez à nouveau ces boîtes de dialogue... Votre seul salut sera d'appuyer sur !
Constatez également que vous disposez bien du petit icone en bas de la liste pour modifier la liste, mais n'insistez pas, on ne peut pas la modifier, point barre.
En fait, lorsque vous désirez limiter la liste aux seuls choix proposés, vous devez modifier 2 propriétés en même temps : Limiter à liste : Oui, mais aussi Autoriser les modifications de la liste de valeurs : Non.
Lancez ensuite la table en mode saisie de données, et attribuez Maître à Coluche.
Vous obtenez un message d'erreur qui ne vous laisse pas le choix (normal...)
Et quand vous cliquez sur OK, il vous affiche simplement la liste déroulante avec les choix possibles :
Ainsi, si vous avez bien tout suivi, Access ne vous offre pas la solution intermédiaire (pourtant pertinente) qui consiste à interdire d'écrire Maître si ce n'est pas dans la liste, mais qui accepte que vous l'ajoutiez officiellement dans la liste.
Dommage.
J'insiste sur ces notions, car, lors de la construction de la liste déroulante avec l'assistant, vous aurez la possibilité de commettre facilement cette erreur.
Faisons un test :
Et là, vous pouvez tester vous-même : Access vient de vous imposer la situation décrite plus haut, avec tous les messages d'erreur !
testez : inscrivez Maître à Coluche, encore une fois... Ce sera donc à vous, à la main, de préciser Autoriser les modifications de la liste de valeurs : Non.
Oui, oui, je suis d'accord avec vous, c'est un peu nul !
Supprimez le champ CivTest.
Nous allons maintenant ajouter la couleur préférée des clients (Ce n'est pas très utile dans la vie réelle, mais ça va me permettre de vous montrer d'autres possibilités).
Admettons que votre base de données va être utilisée en réseau par des gens qui parlent français ou anglais, et qu'on aimerait une petite "description psychologique" de la couleur.
Ca se passe comme ceci :
Créez un nouveau champ CouleurPreferee, après Prenom, en assistant liste de choix (texte).
Lorsque vous arriverez à cette étape, écrivez 3 comme nombre de colonnes, et inscrivez les données suivantes :
Quand vous avez sélectionné une couleur, que voulez-vous qui soit mémorisé ? La couleur en français (col1), en anglais (col2), ou la description (col3) ? ... La couleur en français, bien sûr :
En haut, si vous écrivez Couleur préférée, il va simplement renommer votre champ... On n'a pas besoin de l'assistant pour faire ça !
Ensuite, regardez la case à cocher Autoriser plusieurs valeurs (ne la cochez pas). Elle nous permettra de choisir plusieurs valeurs de la liste pour un même client.
Lancez la table en mode saisie de données, et choisissez Jaune pour Edith Piaf et Green pour Steven Spielberg (il mettra vert) :
Ma 3ème colonne (celle des descriptions) est un peu trop étroite.
Revenez en mode création, et scrutez l'onglet liste de choix des propriétés de CouleurPréférée ce qui se passe :
Contenu contient toutes les données de notre liste. Access s'y retrouve grâce à la propriété Nbre Colonnes.
Et dans Largeurs colonnes, nous avons les largeurs, dont le total doit donner Largeur liste (je ne sais pas pourquoi il ne propose pas de le faire automatiquement ).
E l a r g i s s o n s donc la 3ème colonne, et profitons pour simplifier ces valeurs et calculer le total, comme ceci :
Lancez ensuite en mode saisie de données. La 3ème colonne est affichée complètement :
Comment faire pour définir 2 ou plusieurs couleurs préférées ?
Vous vous rappelez, un peu plus haut, dans l'Assistant liste de choix il y avait une case à cocher Autoriser plusieurs valeurs ?
Vous avez également cette option (apparue avec Access 2007) dans les propriétés !
Basculez-là à Oui,et vous aurez un message d'avertissement qui vous précise que vous ne pourrez plus changer d'avis par la suite (vous ne pourrez plus remettre cette propriété à Non pour la couleur préférée).
Lancez la table en mode saisie de données. Maintenant vous pouvez sélectionner plusieurs couleurs à la fois grâce à des cases à cocher.
Maintenant, vous ne jouissez plus de l'auto-complétion : plus question d'écrire r, et de voir Rouge s'écrire automatiquement, il faut cliquer dans la case à cocher.
Quand nous étudierons les requêtes, nous constaterons que ce système de multi-choix possible rend les choses quelque peu plus délicates, et il ne faut pas utiliser cette fonction à tort et à travers. Si, sur 1000 clients, il y en a 1 ou 2 qui ont plus d'une couleur préférée, je vous déconseille ce multi-choix (mettez la 2ème couleur aimée dans un champ Remarque), car les inconvénients seraient trop importants par rapport aux avantages (par exemple l'auto-complétion inactive), mais aussi pour les tris et les filtres !
Imaginez que (dans une requête, que nous verrons plus tard), vous désiriez la liste des clients qui aiment le jaune, Access vous renverra Piaf et Spielberg. Ensuite, tous les clients qui aiment le vert, il y aura Spielberg et Jackson (2 + 2 = 4 clients, alors qu'en fait, nous ne parlons que de 3 clients en tout !
Il faudra rester toujours très vigilant !
La case à cocher occupe une certaine largeur, et il suffit d'augmenter la taille de la liste déroulante pour vous débarasser de l'ascenseur horizontal :
Dans cette leçon, nous avons vu l'intérêt d'utiliser la liste déroulante mono-choix (pour la civilité) et du multi-choix (la couleur préférée).
Nous avons vu que le type de données Assistant liste de choix n'est pas un vrai type de données, mais juste une aide à la saisie, et nous avons vu que les propriétés définies dans l'assistant (Contenu, Nbre colonnes, limiter à liste, ...) sont directement accessibles dans les propriétés du champ, dans l'onglet Liste de choix (on pourrait ainsi créer une liste déroulante sans même utiliser l'assistant, en commençant par définir la propriété Contrôle de l'affichage à Zone de liste déroulante).
Nous avons vu comment autoriser ou interdire les valeurs absentes de la liste déroulante, et comment en ajouter de nouvelles, dynamiquement.
L'exercice consiste à créer une nouvelle base de données que vous nommerez ExerciceLecon012.accdb.
Il s'afgit de la gestion des candidats pour une agence matrimoniale
Vous y créerez une table T_Candidat, avec les champs suivants :
Voici les données à entrer :