![]() |
![]() |
Leçon 14 |
![]() |
Listes déroulantes basées sur d'autres tables
|
Dans cette leçon, nous allons apprendre à créer des listes déroulantes avec beaucoup de choix, et il faudra donc créer une table à part. Nous verrons comment mettre à jour ces listes, ajouter et supprimer des éléments. Nous comparerons ces nouvelles listes avec les listes locales de la leçon précédente. |
Sommaire
|
Tant que nos listes déroulantes ne proposent que quelques choix (Monsieur, Madame, Mademoiselle, Rouge, Vert, Bleu, ...), tout va bien !
Ca se gâte si nous avons un grand nombre de choix à disposition. Imaginez un champ PaysOrigine : nous allons choisir le pays d'origine du client dans une liste de choix.
Mais il y a plus de 200 pays dans le monde ! Vous imaginez faire une liste déroulante locale avec 200 choix ? Vous en avez pour des heures !
Pour ce faire, nous allons carrément créer une table T_Pays, dans laquelle nous aurons la liste exhaustive de tous les pays du monde. Et, dans un deuxième temps, nous construirons une liste déroulante dans la table des clients, basée sur cette nouvelle table T_Pays.
Je vous conseille de fermer votre table T_Client, si elle était ouverte.
Lancez la table en mode saisie de données, et constatez que votre liste déroulante fonctionne parfaitement. Choisissez France pour Edith Piaf et Suisse pour Steven Spielberg (même si ce n'est pas son pays)
L'avant-dernier champ s'appelle VilleHabitation, et vos clients habitent différentes villes. Genève, Lausanne, Neuchâtel, Nyon et Fribourg. Installez dans ce champ une liste déroulante basée sur une table T_Ville, qui contiendra : Genève, Lausanne, Paris et Bruxelles.
Ce ne sont pas exactement les mêmes villes que celles qui étaient déjà en place, mais peu importe.
Comparons une liste déroulante locale avec une liste basée sur une autre table. Déplaçons Civilite juste au dessus de PaysOrigine, et dans Civilite, définissez Autoriser la modification de la liste de valeurs à Oui, et Limiter à Liste à Non.
Comparons les propriétés de l'onglet Liste de choix de ces deux champs : Toutes les propriétés sont identiques, sauf Origine Source et Contenu.
Dans le cas d'une liste déroulante locale (Civilite), c'est Liste valeur, alors que PaysOrigine, c'est Table/requête (Table T_Pays en l'occurrence).
SELECT [T_Pays].[Pays] FROM T_Pays;
est une ligne de commande SQL (Structured Query Language (Langage de requête structuré). C'est une sorte langage de programmation, comme le C++ ou le Visual Basic, mais qui ne s'utilise que dans le cas de recherches dans des bases de données.
En l'occurrence, ça veut dire :
Sélectionne le champ [Pays] de la table T_Pays (Mets dans la liste déroulante tous les Pays de la table T_Pays, en gros).
Maintenant, attention ! Vous souvenez-vous de la propriété Autoriser les modifications de la liste de valeurs ? C'est cette petite icône qui permet d'ajouter manuellement de nouveaux éléments.
Eh bien dans le cas d'une liste déroulante basée sur une autre table, vous aurez beau mettre la propriété Autoriser la liste de valeurs sur Oui, cette petite icône n'apparaîtra pas, et vous ne pourrez donc rien ajouter.
Du coup, on se demande bien pourquoi cette propriété est accessible dans ce cas !
Pour modifier le contenu de votre liste déroulante, il vous sera nécessaire de vous rendre dans T_Pays, et d'ajouter, modifier ou supprimer les pays voulus.
Constatez les choses suivantes :
Il règne donc un certain désordre que nous apprendrons à mieux gérer par la suite !
J'ai bien insisté pour que vous fermiez T_Client avant d'aller trifouiller dans T_Pays . D'une manière générale, je vous conseille vraiment de travailler dans une table à la fois. Voici une marche à suivre qu'il ne faut pas faire, mais qu'on est tenté de faire :
Ne pas faire - Ne pas faire - Ne pas faire - Ne pas faire - Ne pas faire - Ne pas faire - Ne pas faire - Ne pas faire
Vous êtes dans T_Client, et vous voudriez créer le pays U.S.A, afin de pouvoir le sélectionner dans la liste pour Chaplin.
C'est peut-être parce que U.S.A n'a pas été sauvegardé dans T_Pays (il y a encore le petit crayon) : essayez de le sauvegarder, et même de fermer T_Pays, vous constaterez que la liste dans T_Client n'est toujours pas à jour. En fait, la liste déroulante se met à jour juste au moment ou vous ouvrez la table.
Fin de ce qu'il ne fallait pas faire - Fin de ce qu'il ne fallait pas faire - Fin de ce qu'il ne fallait pas faire
Access nous interdit de modifier la source de la liste avec Autoriser les modification de la liste de valeurs lorsque notre liste déroulante dépend d'une autre table, et nous oblige à aller manuellement dans la table source T_Pays.
Nous disposons d'une autre propriété : Formulaire modifier les éléments de liste :
Nous n'avons pas encore étudié les formulaires, mais nous allons y faire une brêve incursion.
Un formulaire permet de remplir les tables de manière plus conviviale. Il peut y mettre des couleurs, agencer les champs comme on veut, et leur maîtrise demande plusieurs leçons, mais dans le cas présent, nous allons nous contenter d'un petit formulaire automatique. Suivez la marche à suivre qui suit, et vous allez comprendre l'utilité de cette fameuse propriété :
Vous êtes désormais l'heureux propriétaire d'un formulaire. Si vous cliquez deux fois dessus, vous l'ouvrez, et vous verrez que son fonctionnement ressemble à s'y méprendre à une table. On peut y ajouter des Pays, les modifier et les supprimer, tout pareil. Remplacez Switzerland par CH, et fermez ce formulaire.
Si vous allez dans T_Client ensuite, vous verrez le CH dans la liste :
Et voilà à quoi sert la propriété Formulaire modifier les éléments de liste. Je trouve juste regrettable qu'on doive absolument utiliser un formulaire, et qu'on ne puisse pas directement sélectionner la table T_Pays .
Dans la leçon précédente, on a vu qu'on pouvait empêcher l'affichage du petit icône qui permet d'ajouter et de modifier les éléments de la liste, gâce à la propriété Autoriser les modifications de la liste de valeurs.
Eh bien, sachez que dans le cas d'une liste déroulante basée sur une autre table, si vous avez défini un formulaire avec la propriété Formulaire modifier les éléments de liste, vous aurez de toute façon ce petit icône qui vous permet de modifier la liste, même si Autoriser les modifications de la liste de valeurs est défini à Non. C'est sans doute un bug , ou une erreur de jeunesse de cette nouvelle fonctionnalité.
... d'une liste déroulante locale et une liste déroulante basée sur une autre table
Dans cette leçon, nous avons appris à créer des listes déroulantes de grande taille.
Nous avons vu comment ces listes interagissent avec d'autres tables grâce au langage SQL (Origine source).
Nous avons constaté qu'à partir d'un certain nombre de choix possible, la table externe s'impose.
Nous avons comparé les listes locales avec ces listes basées sur d'autres tables, et avons débusqué quelques ambiguïtés (notamment la propriété Formulaire modifier les éléments de liste).
L'exercice consiste à créer une nouvelle base de données que vous nommerez ExerciceLecon014.accdb.
Nous allons gérer une agence de vente immobilière. Nous allons stocker les divers biens immobiliers.
Créez une table T_Objet, et installez les champs suivants :
Précisions :
Description
Description est un simple champ texte.
Etage
Etage une liste déroulante locale qui contient les données suivantes :
On doit pouvoir modifier cette liste avec la petite icône .
Ville
Ville est une liste déroulante basée sur une table T_Ville, qui contiendra un seul champ Ville dans lequel il y aura les données suivantes (une cinquantaine de villes, mais je ne vous en fait rentrer que 3, parce que je suis bon avec vous) :
Il ne doit pas y avoir d'icône permettant de modifier ces villes via un formulaire, car on estime que cette liste est inamovible.
AgrementProximité
AgrementProximité est une liste déroulante basée sur une table T_Agrement, dans laquelle il y a un champ Agrement, avec les données suivantes :
On devra pouvoir accéder à un formulaire F_Agrement en cas de besoin, avec la petite icône .
On devra pouvoir sélectionner plusieurs éléments pour un seul objet.
ActuelPropriétaire
ActuelProprietaire est une liste déroulante basée sur une table T_Proprietaire, dans laquelle il y a 2 champs : PrenomNom et Telephone, avec les données suivantes :
La liste déroulante contiendra le PrenomNom et le Telephone, mais elle ne mémorisera que le PrenomNom. On devra pouvoir accéder à un formulaire F_Proprietaire en cas de besoin, avec la petite icône .
Une fois que vous avez créé les champs, que vous avez construit les listes déroulantes, les tables sattelites et les formulaires nécessaires, entrez les données suivantes dans T_Objet :
Premier objet :
Deuxième objet :