Chapitre 4 : Les listes de choix

 

 

1 - Introduction

 

         

       

Considérons l'exemple d'une table (que nous appellerons "Personnes") constituée comme le montre l'exemple ci-dessous.

         

 

Nom

Prénom

Titre

Adresse

Commune

Code postal

Durand

Pierre

M.

31 rue des champs

Uriage

38410

Chose

Stéphanie

Melle

2 place Stanislas

Nancy

54000

Trombe

Jean

M.

18 cours de la libération

Grenoble

38001

Machin

Andrée

Mme

10 cours Berriat

Grenoble

38000

etc.

 

 

 

 

 

 

 

 

Il est tout à fait fastidieux de saisir de nombreuses fois la même information, telle que celle du titre (Mme, Melle, M.). En outre, si la liste est assez longue, le même nom de commune sera saisi à plusieurs reprises -- avec le risque d'une faute de frappe, suivie d'une erreur si l'on effectue dans la table des recherches basées sur le nom de la commune. Enfin, on n'est pas à l'abri d'une erreur de saisie conduisant à associer à une commune un code postal erroné.

 

 

 

Pour éviter de saisir plusieurs fois le titre ou le même nom de commune, nous pouvons l'enregistrer dans une table séparée, et travailler ensuite par copier/coller. C'est encore mieux s'il nous suffit d'indiquer au système où se trouve l'information correspondante pour l'enregistrement que nous sommes en train de renseigner.

 

 

 

Pour ce faire, certains SGBD sont dotés d'un outil appelé liste de choix (ou plus simplement liste), que nous allons maintenant examiner. Comme dans le chapitre précédent de ce tutoriel (encore appelé "cours en ligne" ou tutorial), nous utiliserons le SGBD Access comme support pratique.

 

 

 

 

2 - La liste simple (liste interne)

 

         

       

Dans un premier temps, nous créons une table "Personnes" contenant seulement les trois champs "Nom", "Prénom" et "Titre", possédant tous le type de données texte. Nous allons faire en sorte de faire écrire le titre par le système lors du remplissage de la table.

         

 

 

Lors de la création de la table, lorsque nous arrivons au type de données du champ "Titre", nous sélectionnons "Texte", puis "Assistant liste de choix..." dans la liste déroulante qui est à notre disposition. Nous procédons alors aux opérations suivantes :

 

 

 

       

   

nous choisissons l'option "Je taperai les valeurs souhaitées". Il ne serait pas raisonnable, en effet, de créer une table pour y introduire seulement trois abréviations ;

 

 

nous conservons le nombre de colonnes égal à 1. Nous saisissons les trois valeurs (M., Mme, Melle) les unes sous les autres dans la colonne intitulée "Col1" (utiliser la tabulation ou les flèches pour passer d'une valeur à l'autre). Enfin, nous réglons la largeur de la colonne, en la saisissant par le haut de son bord droit ;

 

 

nous laissons le choix au système du nom de la liste (l'étiquette), et l'opération est terminée.

 

 

 

Dans la fenêtre de définition de la table, aux "Propriétés du champ", onglet "Liste de choix", nous trouvons les informations représentées sur la figure suivante :

 

 

Propriétés du champ "Titre"

 

 

 

Commentons ces propriétés :

 

 

 

       

   

Afficher le contrôle : Zone de liste déroulante. Une liste non déroulante conviendrait tout aussi bien, puisque la liste est fort courte, et le système ne nous proposera pas de barre de défilement. Mais attention : choisir "zone de texte" conduit à supprimer la liste, et il faudra la recréer ;

 

 

Origine source : Liste valeurs. Pour nous rappeler que nous avons saisi la liste directement dans l'assistant ;

 

 

Contenu : "M.";"Mme";"Melle". Les trois termes saisis sont rassemblés ici, séparés par des points-virgules, et mis entre guillemets pour rappeler qu'il s'agit de chaînes de caractères ;

 

 

Colonne liée : 1. La colonne liée (ici la première colonne) est celle qui contient l'information que le système copiera / collera pour nous ;

 

 

Nbre colonnes : 1. Nous n'avons demandé qu'une seule colonne ;

 

 

En-têtes colonnes : Non. Sans objet pour nous ;

 

 

Largeurs colonnes : 1 cm (par exemple). C'est la valeur que nous avons fixée dans l'assistant ;

 

 

Lignes affichées : 8. C'est la valeur par défaut, mais le système limitera aux seules trois lignes utiles ;

 

 

Largeur liste : 1 cm. C'est la largeur de l'unique colonne. La valeur "auto" convient également ;

 

 

Limiter à liste : Non. C'est la valeur proposée par défaut. Nous reviendrons sur ce choix au paragraphe suivant.

 

 

 

Enregistrons et passons en mode "feuille de données" pour introduire du contenu dans la table. Quand nous cliquons dans le champ "Titre", l'icône de la liste apparaît. Si nous cliquons dessus, la liste que nous avons saisie nous est proposée telle quelle par le système pour remplir le champ "Titre". Il suffit que nous cliquions sur la valeur désirée pour que le système l'inscrive à notre place, comme le montre la figure ci-dessous.

 

 

Liste de choix dans une table

 

 

 

3 - La liste obligatoire

 

         

       

En saisissant des données dans la table "Personnes", nous constatons que nous pouvons introduire la chaîne de notre choix dans la colonne titre. Or il serait plus judicieux que nous soyons limités aux seules trois valeurs qui ont un sens. Pour ce faire, il nous faut revenir en "mode création". Dans la ligne du champ "titre", nous cliquons dans la colonne "type de données". Dans l'onglet "liste de choix", nous réglons à "oui" la propriété "Limiter à liste". Puis nous revenons au"mode feuille de données".

         

 

 

Nous constatons alors que le système nous permet toujours de saisir dans le champ "Titre" une information qui n'est pas dans la liste, mais il refuse de l'enregistrer lorsque nous passons à la ligne suivante. Notre liste de titres est effectivement devenue obligatoire, le contrôle s'effectuant lors du passage à l'enregistrement suivant, ou lors de la fermeture de la table.

 

 

 

Rendre une liste obligatoire est une décision qui doit être prise au coup par coup, en fonction des besoins. Il est souvent utile de rendre une liste obligatoire, mais ce n'est pas une règle absolue.

 

 

 

Remarque : on ne peut rendre la liste obligatoire que si la propriété "Afficher le contrôle" est à "Zone de liste déroulante". Une "Zone de liste" ne le permet pas... et seul l'éditeur Microsoft sait pourquoi.

 

 

 

 

4 - La liste issue d'une table (liste externe)

 

         

       

Lorsque le nombre d'éléments de la liste est important, et / ou s'il est susceptible d'être complété de temps en temps, il est plus judicieux de placer les éléments de la liste dans une table plutôt que de les saisir dans l'assistant. C'est le cas, par exemple, de la liste des communes.

         

 

 

La liste peut de nouveau être mise en place avec l'aide de l'assistant, mais il faut au préalable créer la table correspondante. Nous l'appelons "Communes", nous lui attribuons un seul champ (intitulé "commune"), doté du type de données "texte". Passons en mode "feuille de données" et introduisons quelques noms de communes dans la nouvelle table.

 

 

 

Nous retournons à la table "Personnes" en mode création, et nous rajoutons le champs "Commune" en mode texte. Nous lançons l'assistant liste de choix et nous procédons aux opérations suivantes :

 

 

 

       

   

nous choisissons l'option "Je veux que la liste de choix recherche les valeurs dans une table ou requête" ;

 

 

nous choisissons la table "Communes" ;

 

 

nous sélectionnons son unique champ, intitulé "Commune" ;

 

 

nous réglons la largeur de la future liste ;

 

 

nous laissons le système régler tout seul son problème d'étiquette ;

 

 

nous répondons "oui" à la demande d'enregistrement, et l'opération est terminée.

 

 

 

Les propriétés du champ "Commune" de la table "Personnes", apparaissent ainsi (onglet "liste de choix") :

 

 

Liste de choix issue d'une table

 

 

 

Par comparaison avec la liste simple, nous remarquons les deux différences suivantes :

 

 

 

       

   

la propriété "Origine source" contient maintenant "Table/Requête", ce qui est normal ;

 

 

la propriété "Contenu" contient le code SQL "SELECT Communes.commune FROM Communes; ", ce qui signifie en clair : "choisir le champ commune de la table Communes".

 

 

 

De retour dans la table "Personnes" en mode "feuille de données", nous constatons que la liste contenue dans la table "Communes" nous est proposée, et que de plus elle est triée par ordre alphabétique (parce que la propriété "Indexé" est passée de "Non" à "Oui - Avec doublons").

 

 

 

Pour assurer la cohérence entre la table principale "Personnes" et la table "Communes", nous avons tout intérêt à rendre la liste obligatoire comme précédemment. Ceci nous astreint à renseigner le nom de commune dans la table "Communes" avant de saisir l'enregistrement correspondant dans la table "Personnes", ce qui n'est pas très commode. Nous verrons plus loin comment l'usage d'une sous-table permet de régler élégamment le problème.

 

 

 

 

5 - La clé (clé primaire)

 

         

       

Nous pouvons améliorer la fiabilité du système précédent en faisant en sorte que nous ne puissions pas saisir deux fois le même nom dans la table Communes. Nous ouvrons cette dernière en mode "création", nous sélectionnons le champ "Commune", et nous cliquons sur l'icône qui représente une petite clé.

         

 

 

La clé (encore appelée "clé primaire") identifie de manière unique chaque enregistrement de la table. Le champ auquel on applique une clé acquière les propriétés suivantes :

 

 

 

       

   

les doublons (deux informations identiques ou plus) sont désormais interdits par le système. La propriété "Indexé" passe automatiquement à "Oui - Sans doublons" ;

 

 

la présence de la clé interdit la présence d'un champ vide dans un enregistrement. Bien que cela n'apparaisse pas dans les propriétés du champ (encore un petit bug !), la valeur "Null" est désormais bannie ;

 

 

le champ auquel on applique une clé est automatiquement trié par ordre croissant.

 

 

 

Pour supprimer une clé, il faut sélectionner le champ et cliquer sur l'icône de la clé ; cette icône fonctionne comme un commutateur. Notons enfin qu'il ne peut y avoir qu'une seule clé par table.

 

 

 

 

6 - La sous-table

 

         

       

La présence de la clé a aussi pour effet de faire apparaître la table "Personnes" comme sous-table de la table "Communes". En effet, si nous ouvrons cette dernière, nous voyons que chaque ligne commence maintenant par un signe + (appelé "indicateur de développement" dans Access). Si nous cliquons sur ce signe (en face de la commune "Uriage", par exemple), la liste des personnes de la table "Personnes" habitant Uriage apparaît (figure ci-dessous), et nous pouvons la compléter. Si nous cliquons sur le signe - qui se trouve maintenant en face de la commune "Uriage", la sous-table disparaît. On peut faire apparaître plusieurs sous-tables de la table "Personnes" dans la table "Communes" si on le désire.

         

 

Sous-table

 

 

 

L'existence de la sous-table nous permet de remplir simultanément la table "Personnes" et la table "Communes" qui lui sert de liste, d'autant que la liste simple du champ "Titre" fonctionne effectivement dans la sous-table. Comme on peut le constater, les sous-tables sont fort commodes, et elles rendent superfétatoire l'usage des formulaires.

 

 

 

 

7- Conclusion

 

         

       

Il existe deux façons de réaliser une liste de choix : en saisissant immédiatement les valeurs (liste interne), ou en les introduisant dans une table auxiliaire (liste externe). La première façon est recommandée lorsque la liste est courte, et peu susceptible de changer. La seconde façon est recommandée lorsque la liste est longue, et / ou susceptible d'être souvent modifiée ou complétée. Quelle que soit la manière utilisée pour réaliser une liste de choix, l'usage de l'assistant "liste de choix" est fortement recommandé.

         

 

 

Rappelons que le codage constitue une solution pour régler un problème d'homonymie. Si un tel problème n'est pas susceptible de se poser, le codage constitue une complication inutile. Si l'usage de codes s'avère indispensable, on peut toujours faire en sorte de ne pas les voir, alors que le SGBD continue à les gérer.

 

 

 

Nous reviendrons, au chapitre 9, sur l'usage des listes, et sur les rapports complexes qui existent entre liste et relation.