![]()
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
| La dernière fois, nous avons vu comment faire pour limiter les entrées dans un champ : En utilisant une liste déroulante locale (Dans Type de données, choisir "Assistant liste de choix"), ce qui nous permettait, par exemple, dans un champ EtatCivil, de choisir parmi les valeurs : "Marié", "Divorcé", "Célibataire", etc. plutôt que de laisser l'utilisateur saisir la valeur en entier avec les risques d'erreurs que cela comporte. |
| Dans cette leçon, nous allons voir qu'il n'est pas toujours possible de créer des listes déroulantes locales : Dans le cas d'un Titre (Monsieur, Madame, Mademoiselle), ou d'un état civil (Marié, divorcé, célibataire), c'est simple, car il n'y a que quelques choix possibles. Par contre, si vous avez un champs Pays, alors, c'est plus délicat : En effet, la terre compte plus de 200 pays |
Simplement, parce qu'il y en a trop ! Ce serait un véritable enfer de tout rentrer dans l'assistant liste de choix ! D'autant qur vous prenez le risque de mettre 2 fois le même pays... Bref, ça ne va pas.
Alors là, oui, on peut faire une liste locale. Mais ce n'est plus le sujet. Nous imaginons que vous avez besoin de tous les pays du monde à pouvoir choisir, à savoir :
Açores (Portugal), Afghanistan, Afrique du Sud, Albanie, Algérie, Allemagne, Andorre, Angola, Anguilla, Antigua et Barbuda, Arabie Saoudite, Argentine, Arménie, Aruba (Pays-Bas), Australie, Autriche, Azerbaïdjan, Bahamas (Iles), Bahreïn, Bangladesh, Barbade, Belgique, Bélize, Bénin, Bermudes (Iles des), Bhoutan, Biélorussie, Bolivie, Bosnie-Herzégovine, Botswana, Brésil, Brunéi, Bulgarie, Burkina Faso, Burundi, Caïmans (Iles), Cambodge, Cameroun, Canada, Cap-Vert (Iles du), Chili, Chine, Chypre, Colombie, Comores, Congo, Cook (ILES), Corée du Nord, Corée du Sud, Costa Rica, Côte d'Ivoire, Croatie, Cuba, Danemark, Djibouti, Dominique, Egypte, Emirats Arabes Unis, Equateur, Erythrée, Espagne, Estonie, Etats-Unis, Ethiopie, Falkland (Iles), Fidji (Iles), Finlande, France, Gabon, Gambie, Georgie, Ghana, Gibraltar, Grèce, Grenade, Groenland, Guadeloupe, Guam, Guatémala, Guinée, Guinée-Bissau, Guinée-Equatoriale, Guyana, Guyane, Haïti, Honduras, Hong Kong, Hongrie, Inde, Indonésie, Iran, Iraq, Irlande, Islande, Israël, Italie, Jamaïque, Japon, Jordanie, Kazakhstan, Kenya, Kirghizistan, Kiribati, Koweït, La Réunion (Île De), Laos, Les Seychelles, Lesotho, Lettonie, Liban, Liberia, Libye, Liechtenstein, Lituanie, Luxembourg, Macédoine, Madagascar, Malaisie, Malawi, Maldives (Iles), Mali, Malte, Mariannes du Nord (Îles Des), Maroc, Marshall (Iles), Martinique, Maurice (Ile), Mauritanie, Mexique, Micronésie, Moldavie (Rép. de), Monaco, Mongolie, Mozambique, Myanmar, Namibie, Nauru, Népal, Nicaragua, Niger, Nigéria, Niue, Norvège, Nouvelle-Calédonie, Nouvelle-Zélande, Oman, Ouganda, Ouzbékistan, Pakistan, Palau (Iles), Panama, Papouasie-Nouvelle-Guinée, Paraguay, Pays-Bas, Pérou, Philippines, Pologne, Polynésie française, Porto Rico, Portugal, Qatar, République Centrafricaine, République Dominicaine, République Tchèque, Roumanie, Royaume-Uni, Russie (Fédération de), Rwanda, Sahara Occidental, Saint-Christopher et Nevis, Sainte-Lucie, Saint-Marin, Saint-Vincent et les Grenadines, Salomon (Iles), Salvador (El), Samoa Occidental, Sao Tome et Principe, Sénégal, Sierra Leone, Singapour, Slovaquie, Slovénie, Somalie, Soudan, Sri Lanka, Suède, Suisse, Surinam, Swaziland, Syrie, Tadjikistan, Taïwan, Tanzanie, Tchad, Thaïlande, Togo, Tonga (Ile), Trinité-et-Tobago, Tunisie, Turkménistan, Turks et Caïcos (ILES), Turquie, Tuvalu (Iles), Ukraine, Uruguay, Vanuatu, Vatican (Cité) (Saint-Siège), Venezuela, Vierges Américaines (Iles), Vierges Britanniques (Iles), Viêt-Nam, Yémen, Yougoslavie, Zaïre, Zambie, Zimbabwe
Oui. Donc, comme nous ne pouvons pas faire aisément une liste déroulante locale, ce que nous allons faire, c'est carrément une table des pays, qui va contenir la liste exhaustive de tous les pays du monde (cette liste ci dessus en fait). Et une fois que nous aurons construit cette table supplémentaire, nous verrons comment l'assistant liste de choix va aller puiser dans cette nouvelle table
La première chose à faire est de créer cette fameuse nouvelle table. Vous
savez comment on crée une nouvelle table, vous allez donc créer une nouvelle
table que vous appellerez T_Pays, avec un seul champ : Pays :
. Lancez cette table en
mode saisie de données, et mettez les pays suivants :
Qu'est-ce que vous en pensez ?
Vous pensez bien. Donc ?
Oui, Là c'est facile : Nous avons 5 pays, c'était vraiment simple de voir qu'il y avait 2 fois la France... Mais s'il y avait déjà 80 ou 100 pays, comment pourriez-vous être sûr de ne pas entrer 2 fois le même ?
Voilà : Le champ pays est la clé primaire
Surtout pas ! Sinon, vous auriez ceci :
. 2 fois la France avec
2 numéros différents... C'est idiot !
Absolument : ![]()
Prenez votre temps... N'oubliez pas donc qu'il faut d'abord enlever la clé, lancer la table en mode saisie de données, enlever la 2ème France, revenir en mode création, et remettre la clé. Si vous avez un peu de peine, refaites la leçon sur la clé primaire.
Pas comme ça, non. Sinon, vous allez en avoir pour 3 heures. Laissez simplement Suisse, France, Belgique et Italie.
Maintenant, c'est fini. Quittez la table T_Pays, et retournez dans T_Client
en mode Création. Ajoutez un champ PaysOrigine :
. A la place de texte,
choisissez l'assistant liste de choix 
C'est maintenant que ça change : Dans cette boîte de dialogue, choissez la
première option :
. Cliquez sur Suivant.
Dans cette boîte de dialogue, vous allez justement choisir la table qui
contient tous les pays : C'est facile, c'est la seule table (A part T-Client).
Cliquez dessus :
, et cliquez sur Suivant.
Dans cette boîte, vous devez cliquer sur la petite flèche
pour déplacer le champ
pays de gauche à droite
.
C'est dans le cas ou la table T_Pays aurait contenu plusieurs champs : Par exemple, en plus du champ Pays, nous aurions pu avoir d'autres champs comme : NomDuChefDEtat, ProduitNationalBrut, Superficie, NombreHabitant, etc. C'est à dire des champs précisant des données sur chaque pays. Alors, dans ce cas, pour notre liste déroulante, nous aurions seulement pris le nom du pays, car les autres champs ne nous auraient pas intéressés
Vous cliquez donc ensuite sur Suivant, et vous avez la représentation de
votre table T_Pays :
. La seule chose que vous puissiez faire ici n'est pas très
importante, c'est simplement d'élargir ou rétrécir la liste : 
Cliquez sur Suivant, vous arrivez à la dernière étape :

Cliquez sur Terminer.
Cette boîte de dialogue apparaît.
. Répondez TOUJOURS TOUJOURS TOUJOURS TOUJOURS TOUJOURS TOUJOURS
"NON" à cette question !
Parce que si vous dites Oui, Access va faire une relation entre la table T_Client et T_Pays à votre place, et, je ne veux pas qu'il le fasse, parce que dans une prochaine leçon, nous allons voir les relations, et il est mille fois préférable de les faire soi-même que de laisser Access nous prendre par la main pour faire le travail à notre place. Nous n'avons pas encore vu ça, mais en plus, si vous aviez déjà créé une relation entre T_Client et T_Pays, Access vous l'aurait détruite pour en ajouter une de son cru si vous aviez répondu Oui. Pour l'instant c'est un peu du chinois, mais on aura l'occasion de longuement y revenir.
Bien. Pour voir ce que ça donne, lancez la table en mode Saisie de données,
et essayez de choisir un pays pour le premier client :
. Et voilà. Ca marche
!
ATTENTION : Quand vous avez dans une table (Par exemple T_Client) un champ qui n'a pas le même nom que le champ dans une autre table (Je m'explique : Par exemple, vous avez PaysOrigine dans T_Client, mais il va puiser dans T_Pays, qui elle, contient un champ Pays - Vous voyez : Pays lié à PaysOrigine), Access va constater ceci, est va parfois insidieusement lors de la création de la liste déroulante par l'assistant remplacer le champ PaysOrigine par Pays dans votre table T_Client, pour que les champs des 2 tables aient le même nom. C'est un petit magouilleur, cet Access !!! Parce que nous, on ne veut pas changer le nom de notre champ, même s'il est lié à une autre table. N'hésitez donc pas à bien vérifier qu'il ne vous change donc pas les libellés de vos champs, et s'il le fait, contrez-le en RENOMMANT encore le champ avec le libellé que VOUS voulez ! Non mais ! Il ne va pas non plus faire trop la loi, celui-là !!! Soyez attentif parce qu'il fait sa petite affaire très discrètement !!!
Exactement. C'est ici que se montre la puissance de la liste déroulante basée sur une autre table : Voici comment ajouter USA à la liste :
Oui, bien entendu. Il sera absent.
Oui. Et pour bien comprendre, nous allons faire le résumé sous forme d'exercice. Nous allons dire que chaque client habite actuellement dans une ville, et nous allons choisir la ville dans laquelle il habite dasn une liste déroulante qui va se baser sur une table externe : T_Ville
C'est terminé. Lancez la table T_Client en mode saisie de données, et voilà : Vous pouvez dès à présent choisir la ville pour chaque client.
Oui. Mais ATTENTION : Lorsque vous changez quelque chose dans la table T_Ville, il est nécessaire que la table T_Client soit fermée. Je m'explique : Certains utilisateurs connaissent bien Windows, et savent très bien qu'il est possible d'ouvrir 2 tables à la fois :

MAIS... Si vous faites comme ça (que vous travaillez sur 2 tables en même temps), vous allez avoir des surprises : Ne faites le petit exercice suivant que si vous êtes un de ces utilisateurs qui aimez bien travailler avec plusieurs fenêtres en même temps :
ça marche parce que c'est seulement lors de l'ouvertiure de la table T_Client que la liste se rafraîchit
Je ne vais pas vous l'expliquer pour 2 raisons :
Nous allons maintenant observer la différence au niveau de la table T_Client.
T_Client contient donc 2 listes locales : Titre et EtatCivil, et 2 listes
déroulantes basées sur une autre table : ce sont Pays et Ville. Comparons les
options de Titre et Pays :
- 
Vous constatez que dans "Origine Source", Titre contient "Liste Valeurs", et dans Pays "Table/Requête". C'est la première différence.
Ensuite, dans "Contenu", Titre est égal à : "Madame";"Mademoiselle";"Monsieur";"Maître", tandis que Pays vaut SELECT [T_Pays].[Pays] FROM T_Pays;
On peut facilement comprendre cette ligne SQL (Structured Query Language) : On sélectionne le champ ]Pays] de la table [T_Pays]. Même si vous ne la comprenez pas parfaitement, vous voyez l'essence même de cette commande : C'est un appel Dynamique de T_Pays, et pas une simple liste toute bête Madame,Mademoiselle, Monsieur.
Non. En fait, je tiens à votre disposition la table complète des pays, mais comme il s'agit d'un autre sujet (importation de données en provenance d'autres bases de données), je remet cette question à plus tard.
Oui. C'est parce que vous n'avez pas limité à liste : Oui : ![]()
Oui, ça, ça ne change pas. Ce n'est pas parce que votre liste de choix va chercher les valeurs dans une autre table que ça change...
Oui. C'est pourquoi il est nécessaire de Limiter à liste : Oui. Mais en fait, il y a même avec Access la possibilité de "lier très fortement" T_Client et T_Pays de façon à être absolument certain que tous les pays qui sont saisis dans T_Client soient bel et bien répertoriés dans T_Pays. Ce sont les relations. Nous y reviendrons très prochainement.
| La liste déroulante rend de précieux services : C'est une des pierres angulaires d'Access. Il est INDISPENSABLE de bien les maîtriser car c'est vraiment la clé de voûte d'une base de données. Elle permet de chosir dans une liste une valeur plutôt que de la saisir manuellement. Il y a deux manières de faire une liste déroulante : Locale, et basée sur une autre table. La liste déroulante locale est destinée à proposer quelques choix (disons au maximum une dizaine, comme par exemple l'état civil), tandis que la liste déroulante basée sur une autre table est plus difficile à mettre en oeuvre, mais est beaucoup plus puissante : Elle est utilisée quand elle propose beaucoup de choix (La ville ou le pays dans notre exemple). |
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. |
|
L'exercice consiste à créer une base de données qui s'appellera Résidence. Ce sera une base de données qui contiendra une table T_Residence, qui va contenir les renseignements suivants :
Comme vous le constatez, il devrait s'agir pour la plupart de listes déroulantes locales, car le nombre de choix est vraiment restreint. Mais, pour l'exercice, je vous demanderai de bien vouloir ne faire QUE des listes déroulantes basées sur d'autres tables. Vocii quelques données-exemples pour vous aider :
|
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.
| Lors de la prochaine leçon, nous allons voir comment lier les tables entre elles. Il y a déjà une sorte de relation entre les tables, du fait même des listes déroulantes qui se basent sur d'autres tables, mais nous verrons comment "officialiser" ces relations, et nous entrerons de plein pied dans l'architecture profonde des systèmes de gestion des bases de données (N'ayez pas peur, les termes informatiques sont souvent très pompeux, mais ne cachent souvent rien de bien méchant, du moment que c'est bien expliqué) ! |