Temps nécessaire pour suivre cette leçon : Une petite 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
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, 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 placer 2 fois le même pays... Bref, ça ne va pas !
Alors là, on peut établir une liste locale. Mais ce n'est plus le sujet. Nous imaginons que vous avez besoin de tous les pays du monde, à 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 conçu cette table supplémentaire, nous verrons comment l'assistant liste de choix va 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 installez les pays suivants :
Qu'est-ce que vous en pensez ?
Vous pensez bien. Donc ?
Oui, Ici c'est facile : Nous avons seulement 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 certain de ne pas entrer 2 fois le même ?
Voilà : Le champ pays devient la clé primaire de T_Pays !
Surtout pas ! Sinon, vous auriez ceci : . 2 fois la France avec 2 numéros différents... C'est idiot !
Absolument :
Il est possible d'avoir d'une part un champ défini en Clé primaire, comme par exemple IDPays, qui serait un NuméroAuto, et, également, le champ Pays qui, bien que n'étant pas défini en Clé primaire, exclut les doublons. Pour faire une telle chose, vous devez donc avoir un champ IDPays en NuméroAuto et en Clé primaire, et, dans les options du champ Pays, tout en dessous, dans les propriétés, vous avez une propriété Indexé que vous devrez mettre à "Oui - Sans doublons": . Quel est l'intérêt de faire ça ? C'est une question de gain de place disque. Admettons que vous ayez cent mille clients, et que 85'000 d'entre eux proviennent du pays "Etats-Unis". ça fait que dans la table T_Client, vous aurez 85'000 fois "Etats-Unis", soit 85'000 fois 10 lettres, soit plus de 8 millions de lettres (8 millions d'octets). Si l'IDPays est un numéroAuto, et que Etats-Unis correspond par exemple au pays Numéro 5, il n'y a plus que le Numéro qui sera stocké dans T_Client, soit le numéro 5 en l'occurrence : Soit plus qu'un seul caractère : "5" !, ce qui fait que ce n'est plus de 8 millions de caractères qu'on a besoin, mais plus que 85'000... Voyez la différence ! (Les chiffres que je vous livre ne sont pas vraiment exact, mais l'esprit est bien représenté). Donc, la Clé primaire serait IDPays, ce qui empêche d'avoir 2 fois le même numéro (de toute façon le numéroAuto l'aurait empêché), et le fait de définir Pays à Indexé : Oui-Sans doublon évite d'avoir un 2ème pays identique. Toutefois, cet ajout de champ pour des questions de place alourdit et complexifie la structure de votre base de données. Aussi, nous allons rester avec la version : Un seul champ Pays, en Clé primaire.
Prenez votre temps... N'oubliez donc pas qu'il vous faut d'abord retirer la clé, lancer la table en mode saisie de données, supprimer 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 (Leçon 13).
Pas comme ça, non. Sinon, vous allez en avoir pour 3 heures. Mettez simplement :
- Suisse
- France
- Belgique
- Italie
Maintenant, c'est fini. Quittez la table T_Pays
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 par rapport aux listes déroulantes locales vues dans la leçon précédente
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 (à 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 avait contenu plusieurs champs : Par exemple, en plus du champ Pays, nous aurions pu avoir d'autres informations comme : NomDuChefDEtat, ProduitNationalBrut, Superficie, NombreHabitant, etc. C'est à dire des champs précisant des données sur chaque pays. Dans ce cas, pour notre liste déroulante, nous aurions seulement choisi le nom du pays, les autres champs ne nous auraient pas intéressés
Vous cliquez donc ensuite sur Suivant, et vous avez sous les yeux 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 en largeur, comme une colonne dans Excel :
Cliquez sur Suivant, vous arrivez enfin à 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 répondez Oui, Access va établir une relation entre la table T_Client et T_Pays de lui-même, et je ne veux pas qu'il le fasse, parce que dans la leçon 16, nous allons étudier les relations, et il est mille fois préférable de les constituer soi-même que de laisser Access nous prendre par la main, et 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 l'Italie pour le premier client (Clunton): . 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 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 ensuite aussi absent de la liste déroulante créée dans T_Client. Mais ça ne supprimera pas USA du client Clunton, il faut le savoir.
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 dans une liste déroulante qui va se baser sur une nouvelle table : 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 travailler avec plusieurs fenêtres en même temps :
Ca marche parce que c'est seulement lors de l'ouvertiure de la table T_Client que la liste se remet à jour !
Nous allons maintenant observer la différence au niveau de la table T_Client. Elle contient donc 2 listes déroulantes locales : Titre et EtatCivil, et 2 listes déroulantes basées sur une autre table : 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 écrite en langage dit "SQL" (Langage de requête structuré - 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. Nous reviendrons ultérieurement sur ce langage SQL.
Non. Je tiens à votre disposition (Parce que vous m'êtes sympathique) la liste 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 que nous aborderons à la leçon 18), je remet cette question à plus tard.
Oui. C'est parce que vous n'avez pas limité à liste : Oui :
Oui, ça ne change pas. Ce n'est pas parce que votre liste de choix va chercher les valeurs dans une autre table que les règles changent.
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 dans la leçon suivante.
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 environ au maximum une dizaine, comme par exemple l'état civil ou le titre), 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. |
Je suis agent immobilier, et je loue des résidences
de vacances.
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 créer QUE des listes déroulantes basées sur d'autres tables ! voici 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 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