Leçon 8
 
Type de données Oui/Non, cases à cocher

Dans cette leçon, nous allons implémenter (utiliser) des cases à cocher. Nous apprendrons à les exploiter à bon escient, et nous verrons comment Access "comprend" les coches.

Nous verrons aussi l'utilité de la propriété Valeur par défaut, et nous ferons un tout petit galop d'essai dans les fonctions Access.

 
Sommaire

Le type de données Oui/Non permet de savoir si quelque chose est vrai ou faux. Le type Oui/Non ne laisse pas la place à l'ambiguïté.

Ambiguïtés de la case à cocher

Exemples :

A part le premier exemple qui est (semble-t-il) sans ambiguïté, les autres exemples sont sujets à caution ! 

Maintenant, toute la question est de savoir ce qui importe dans vos données. Si vous travaillez chez un allergologue, et que tout ce qui vous importe, c'est de savoir si vos patients possèdent au moins un animal à la maison (ce qui peut expliquer certaines allergies), un champ Animal, défini en Oui/Non, suffira. 

Mais si votre base de données gère des demandes de logements, il vous faudra savoir si les candidats possèdent un ou plusieurs chats et/ou chiens, car ce peut-être des données importantes pour l'acceptation du bail, et, dans ce cas, un champ Animal Oui/Non ne suffit clairement pas.

Création d'un champ de type Oui/Non

Ajoutez un champ Animal juste après le prénom, et définissez-le en Oui/Non.

Lancez la table en mode saisie de données.

 

Voilà ! Il suffit maintenant de cliquer sur la case à cocher pour attribuer ou non un animal.

Clavier et cases à cocher

On peut aussi utiliser le clavier pour cocher ou décocher une case :

  1. Cliquez sur Steven
  2. Appuyez sur la touche Tabulation
  3. Vous êtes sur la case à cocher : appuyez sur Espace : ça coche la case
  4. Rappuyez une 2ème fois sur Espace : la case se décoche.
  5. Appuyez sur Tabulation, et vous arrivez au champ suivant (SalaireMensuel)
  6. Si vous appuyez sur Maj-Tabulation , vous revenez sur la case à cocher. Attention : Appuyez su1 Maj, laissez le doigt appuyé dessus, et, ensuite, alors que vous avez toujours le doigt appuyé, tapez juste un coup sur .

Erreurs courantes

Exercice : Imaginons que nous voulions savoir si chaque personne possède un chien et/ou un chat. Peu importe combien ils en ont, on veut juste savoir s'ils en ont au moins un. Comment faire ?

On peut, bien sûr, créer un champ texte dans lequel on écrirait Chien, Chat, Chien et Chat ou Pas d'animal, mais ce n'est pas très convivial, c'est long à écrire, et on peut utiliser plusieurs syntaxes différentes : Il a un chien, Have a cat, Zéro animal, et lorsqu'on va rechercher les enregistrements, ça ne va pas être simple ! Auriez-vous une solution plus simple à proposer, en se basant sur un système de cases à cocher ? (ne regardez pas la réponse plus bas, mais essayez de trouver)

La solution qui consiste à installer une seule case à cocher Animal n'est pas suffisante, car nous ne savons pas s'il s'agit de chien(s) et/ou de chat(s).

A contrario, l'exemple ici à droite comporte trop de champs :

On peut cocher les cases de façon incohérente, comme par exemple Chaplin qui a, à la fois Pas d'animal, et un chien...

Système à plusieurs cases à cocher

La solution idéale est celle-ci : une case à cocher Chat, et une case à cocher Chien. Avec ces deux cases à cocher, on gère tous les cas de figure :

Et si on voulait rajouter un animal (comme un hamster, ou une tortue), il suffit de rajouter autant de cases à cocher que de type d'animal.

Reproduisez ce tableau de gauche dans votre table T_Client.

Interaction des cases à cocher avec Excel

Regardons ce qui se passe lorsque nous copions ces données dans Excel. (Vous vous rappelez ? Nous avons déjà copié une table dans Excel ici).

 

 

Nous allons faire quasiment la même chose, mais seulement en sélectionnant quelques colonnes, comme le schéma ici à gauche.

Allez ensuite dans Excel, dans la cellule A1, et collez ces 3 colonnes :

Les cases à cocher sont devenues les textes VRAI et FAUX. Et c'est vraiment du texte pur, comme on peut le voir dans la barre de formule, ça ne cache rien d'autre :

Il y a donc véritablement eu une transformation de Oui/Non en Vrai/Faux. En réalité, il faut savoir qu'Access (et tout programme, en fait), considère que Oui, ou Vrai est égal à la valeur -1, tandis que Faux, ou Non, vaut 0. Pourquoi -1 plutôt que 1, je n'en sais rien !

Or, ça, vous ne le voyez pas : Access vous affiche de sympathiques cases à cocher à la place.

Pour voir ce qui se passe en coulisses, sélectionnez le champ Chien, et cliquez en bas, sur l'onglet Liste de choix.

Et dans la propriété Contrôle de l'affichage, sélectionnez Zone de texte.

Les cases à cocher ont à présent disparu, et ont été remplacées par
VRAI (-1)
et FAUX (0)!

Lancez la table en mode saisie de données, et cliquez sur VRAI du chien de Michael Jackson : le Vrai s'est transformé en sa véritable valeur interne : -1. Constatez la différence avec Excel, où on aurait pu s'attendre à voir aussi -1 dans la barre de formule, mais non !

Vous pouvez indifféremment écrire Oui, Vrai ou -1 pour "Cocher la case", ou Non, Faux, ou 0 pour "Enlever la coche". Vous pouvez essayer les différentes alternatives.

Cette histoire de texte (Oui, Vrai, Non, Faux) et de numérique (-1, 0) est quelque peu ambiguë, je vous l'accorde !

Oui, Non, Vrai, Faux, 0, -1, Texte

Faisons un test un peu idiot, mais qui peut permettre de mieux comprendre

  1. Définissez le type de données pour le champ Chien à Texte
  2. Lancez la table en mode saisie de données : Vous avez maintenant bel et bien du texte, même si vous cliquez dedans, ça ne se transforme plus en -1 et 0.
  3. Revenez en mode création, et RE-définissez le type de données à Oui/Non, et RE-lancez la table en mode saisie de donneés. Un message très clair vous avertit que les données vont être effacées !
  4. Dites Oui, et constatez que toutes les cases ont été décochées (Remises à 0)

Ainsi, Access est capable de transformer les -1 et 0 en texte VRAI-FAUX, mais il est (bizarrement) incapable d'effectuer l'opération inverse.

Valeurs par défaut sur cases à cocher

Regardons ensemble la propriété Valeur par défaut du champ Chien : il est à 0. Dès que nous créons un champ de type Oui-Non, la Valeur par défaut est à 0 (qui veut donc dire Non - pas cochée).

Cette valeur par défaut prend tout son sens dans le cas ou nous avons une grosse majorité d'enregistrements qui contiennent la même valeur.

Imaginons que la grande majorité des clients habitent à Genève : Définissez la Valeur par défaut de VilleHabitation à Genève, et lancez la table en mode saisie de données :

Cette valeur par défaut s'affiche, "Préconditionne" les nouveaux enregistrements. Ainsi, pour le prochain client, il aura :

  • La valeur FAUX (0) pour Chien
  • La valeur FAUX (Case non cochée) pour Chat
  • Et la valeur Genève pour VilleHabitation

Allez sur ce nouvel enregistrement, et entrez Chuck Norris :

A peine avez-vous écrit le N de Norris que :

  • Ses 2 cases à cocher sont Faux et 0
  • Sa VilleHabitation est Genève
  • Un nouvel enregistrement se prépare, avec les mêmes valeurs par défaut.

Maintenant, il est évidemment possible de changer sa VilleHabitation à la main, et de cocher la case :

Remettez la case à cocher pour le champ Chien.

La valeur par défaut 0 pour les cases à cocher n'est, en fait, pas utile.

Vous pouvez laisser 0, ou l'effacer, de toute façon, pour les nouveaux enregistrements, la case ne sera pas cochée.

Si vous désirez qu'une case soit cochée par défaut, vous mettrez simplement Vrai, ou Oui, ou même -1 dans la propriété Valeur par défaut du champ correspondant.

Valeurs par défaut sur une date

Vous rappelez-vous de la leçon 6, nous parlions des champs Date/Heure, et nous avons parlé de la combinaison des champs date et heure ?

Nous allons faire quelque chose de très sympathique : nous allons mémoriser le moment d'inscription des nouveaux clients.

Pour ce faire :

Créez un nouveau champ DateCreation, juste après le Prenom. Dans sa propriété Valeur par défaut, écrivez Maintenant().

Lancez la table en mode saisie de données, et regardez la valeur du nouvel enregistrement :

Bien entendu, si vous ouvrez votre table à 11H59, et que, juste avant d'entrer votre client, vous allez manger, et vous revenez à 13H30 pour l'écrire réellement, sa valeur par défaut ne va pas changer : ce sera toujours indiqué 11H59.

 

Si vous ne vouliez voir que la date d'entrée du nouveau client, sans préciser l'heure, alors, à la place de Maintenant(), écrivez plutôt Date(). Voici la différence :

Mais où se trouvent toutes ces fonctions ?

Y en a-t-il d'autres ?

Oui, bien sûr ! Il y a plein d'autres fonctions de ce style. Il n'y en a pas autant que dans Excel, mais il y en a pas mal quand même. Par contre, ce serait un peu ridicule d'essayer de toutes les apprendre par coeur... ce serait un peu comme si vous essayez d'apprendre l'anglais en lisant le dictionnaire... Mieux vaut connaître moins de mots, mais les utiliser correctement.

Toutefois, pour votre information, les fonctions se trouvent dans le générateur d'expression, et voici comment on aurait pu trouver cette fameuse fonction Date() en passant par ce biais

Nous y reviendrons ultérieurement, ne vous arrachez pas les cheveux à essayer de toutes les comprendre : je vous avoue que moi-même, je ne les connais de loin pas toutes, et beaucoup d'entre elles ne servent preque jamais... Comme les mots du dictionnaire, finalement.

Dans cette leçon, nous venons de voir quand et comment utiliser les cases à cocher.

Nous avons vu qu'elles ne sont pas toujours pertinentes, et que, parfois, il est nécessaire d'en utiliser plusieurs. Nous avons vu qu'Access stocke en interne la valeur Oui, ou vrai, sous la forme -1, et Non sous la forme 0.

Nous avons étudié la propriété Valeur par défaut, et avons vu comment l'utiliser sur les cases à cocher, mais aussi en association avec la fonction Date() ou Maintenant(), avec ou sans l'aide du générateur d'expression.

Exercice

L'exercice consiste à créer une nouvelle base de données que vous nommerez ExerciceLecon008.accdb.

Il s'agit de gérer les inscriptions pour un camp de vacances pour enfants. Vous créerez une table T_InscriptionEnfant, dans laquelle vous devrez indiquer les renseignements suivants :

  • Le nom et le prénom de l'enfant
  • Sait-il nager ?
  • Est-il vacciné contre la rage et l'hépatite B?
  • A-t-il des allergies ?
  • Est-il végétarien ?

Vous allez y inscrire ces deux enfants :

Vanessa Dubuis : elle sait nager, elle est vaccinée contre la rage et la grippe aviaire. Elle est allergique au pollen et aux poils de chats, elle n'est pas végétarienne. Sa peau est fragile au soleil !

Nathan Muller : Il ne sait pas nager, il est vacciné contre la rage et l'hépatite C. Il est végétarien, et n'a pas d'allergie connue.

A vous de créer la table la plus cohérente possible, qui reflète le mieux possible la réalité de ces deux inscriptions. Pensez pratique : Imaginez que cette table va ensuite être transmise au responsable du camp de vacances : mieux vaut qu'il soit bien informé, n'est-ce pas ?

Il manque plein d'information, telles que l'âge, l'école, le lieu de résidence, etc., mais je ne voulais pas vous donner un exercice qui vous prend toute la journée

Quizz
1. J'ai besoin de savoir si mes clients possèdent un permis de conduire :
Je crée un champ Oui/Non : PermisConduire
Je crée un champ Texte : PermisConduire
Je crée deux champs Oui/Non : PermisOui et PermisNon

Warning: Undefined variable $Q1 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon008/index.php on line 352

Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon008/index.php on line 352

Warning: Undefined variable $Q1 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon008/index.php on line 353

Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon008/index.php on line 353
2. Je dois savoir si mes clients habitent en Suisse, et, si oui, habitent-ils en Suisse depuis plus de 5 ans ?
Je crée un champ Oui/Non : HabiteSuissePlus5An
Je crée un champ Oui/Non : HabiteSuisse, et un 2ème champ Oui/Non : HabiteSuissePlus5An
Je crée un champ Numérique : NbAnneeHabiteSuisse, et un champ Oui/Non : HabiteSuisse

Warning: Undefined variable $Q2 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon008/index.php on line 373

Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon008/index.php on line 373

Warning: Undefined variable $Q2 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon008/index.php on line 374

Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon008/index.php on line 374
3. J'ai une table T_Client, dans laquelle j'ai les données de mes clients, ainsi qu'un champ Vegetarien, défini en texte, taille 3. Dedans, il est écrit soit OUI soit NON, selon les cas. Je change le type de données de ce champ en Oui/Non, avec cases à cocher :
Les textes OUI seront cochés, et les textes NON ne seront pas cochés
Toutes les cases seront cochées
Aucune des cases ne sera cochée
Les textes OUI seront décochés, et les textes NON seront cochés

Warning: Undefined variable $Q3 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon008/index.php on line 396

Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon008/index.php on line 396

Warning: Undefined variable $Q3 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon008/index.php on line 397

Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon008/index.php on line 397