Leçon 7: Date/Heure, et déplacement des champs

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

Résumé de la leçon précédente

Lors de la leçon précédende, nous avons constaté que les champs textes se combinent avec les champs mémos, et qu'il fallait faires des choix judicieux dans les tailles de textes, ou les mémos car les mémos sont plus grands, mais ne permettent pas d'être triés.

Aperçu de cette leçon

Dans cette leçon, nous allons apprendre à utiliser le type de données Date/Heure. Les dates et les heures ont toujours été un casse-tête pour les informaticien et les machines : En effet : 60 minutes dans une heure, 24 heures dans un jour, 365 jours dans certaines années, 366 dans d'autres... Et je ne parle pas de l'heure d'été ! Alors, il n'y a pas le choix, il faut comprendre comment ces machines, et Access fonctionnent avec un système aussi compliqué...

J'aimerais installer une date de naissance pour mes clients. Je suppose que c'est le type de données Date/Heure ?

Exactement. Ouvrez comme d'habitude votre base de données procd si ce n'est déjà fait, et allez dans la table T_Client. Ajoutez un champ DateNaissance, en type Date-heure : .

Vous avez inséré ce champ en dessous des autres. En fait, pourqu'on puisse bien travailler dessus, ce serait pratique de déplacer ce champ vers le haut, juste après le prénom, comme ceci : .

Pour arriver à ce résultat, suivez très précisément les étapes suivantes :

  1. Cliquez sur le petit carré juste à gauche de DateNaissance pour le sélectionner :
  2. Lâchez la souris
  3. Recliquez au même endroit , laissez le doigt appuyé sur la souris, et montez vers le haut, jusqquà ce que vous voyez une ligne noire apparaître entre Prenom et Taille : . Lâchez la souris, et voilà : Le champs DateNaissance est maintenant placé au bon endroit :

Lancez votre table en mode saisie de données.

Précisez la date de naissance de Bill Clunton : . sauvegardez (Shift Enter). Constatez que l'année est maintenant écrite sur 4 chiffres : .

Pas du tout. Chez moi, l'année est encore écrite sur 2 chiffres... (17.03.49)

Ce problème ne provient pas d'Access. En fait, c'est selon la région du monde dans laquelle vous vous trouvez, les manières d'écrires les dates et les nombres sont différentes. En effet, les américains écrivent d'abord le mois, ensuite le jour, et enfin l'année. Certaines personnes écrivent l'année sur 2 chiffres, d'autres sur 4 chiffres, certains régions utilisent le Slash (/) pour séparer les dates... Les points à la place des virgules pour séparer les décimales des chiffres, etc.

Toutes ces options sont appelées des paramètres régionaux. Nous allons voir comment régler tout ça. Restez dans Access, mais nous allons faire une excursion.

Cliquez sur , , . Doublecliquez sur (Ou paramètres régionaux, ça dépend des systèmes)

Cliquez sur l'onglet Date . Dans la zone Format de date courte, , vous pouvez constater que le format est jj.MM.aa si vous avez vu tout à l'heure l'année de Bill Clunton sur 2 chiffres même en ayant sauvegardé. Si vous avez vu 4 chiffres, c'est que le format de la date est jj.MM.aaaa : .

Si ce réglage n'est pas dans Access lui-même, c'est que ça a une influence sur d'autres programmes : En fait tous les programmes qui utilisent des dates sont affectés par ces réglages. Notamment Excel.

Si vous voulez mieux voir comment ce changement affecte l'affichage Access, faites ceci :

Précisez le format de date courte en jj.MM.aa :

Revenez dans Access. Attention : Ne le lancez pas une 2ème fois ! Cliquez sur l'icône de votre barre des tâches (La barre qui contient le bouton Démarrer) qui devrait ressembler à ceci : . Vous devriez constater qu'instantanément la date de naissance de Bill Clunton est écrite comme ceci : .

Rechangez ensuite le format de date courte comme suit (jj.MM.aaaa): . Revenez dans Access, et cette fois, immédiatement, Bill Clunton est né le : .

Ah d'accord ! Alors c'est ici qu'on change les Points, les /, les monnaies, les formats de dates et tout ça !

Oui. Mais dans le cadre de ce cours, nous n'allons pas disséquer toutes les possibilités. Je vous laisserai expérimenter vous même les autres options.

Et est-ce qu'Access reconnait les années bissextiles ?

Oui. Essayons. Dites que Robert Redforde est né le 29.2.44. Tout va bien. Dites maintenant que Michael Jordane est né le 29.2.63, et vous aurez ce message d'erreur :

dès que vous changerez de champ.

C'est marrant, avec Excel, je n'ai jamais eu ce message d'erreur...

Non, c'est normal, Excel est beaucoup plus cool ! Avec Excel, tant que vous écrivez des dates valides, il les aligne à droite dans la cellule. Par contre, dès que vous écrivez une date invalide, il l'alignme à gauche. Il l'accepte, mais il ne la reconnait pas comme date... :

Mais bon... Vaut-il mieux un programme qui vous donne un message d'erreur si on entre une date invalide, ou un programme qui accepte n'importe quoi sans broncher ? On peut se poser la question.

C'est vrai qu'Excel est plus cool. Avec Excel, pas besoin de créer des types de données !

Non, d'accord. Mais en fait, Excel le fait quand même. Vous ne vous en rendez pas compte, mais quand vous écrivez quelque chose dans une cellule Excel, il définit le type de données de la cellule en fonction de la valeur que vous avez rentré. Vous entrez du texte : Il dit que la cellule est en texte. Vous entrez une date : Il dit que la cellule est en Date.

Pour prouver ce que je dis, je vous propose une expérience amusante dans Excel :

Allez dans Excel, sur une nouvelle feuille, et écrivez 50 dans la cellule A1. Appuyez sur Enter. Vous constatez que 50 est écrit dans la cellule A1. Bien effacez cette valeur (Cliquez sur A1, et appuyez sur la touche DEL ). Il n'y a plus rien d'écrit dans la cellule A1. Maintenant, toujours dans A1, écrivez ceci : 16.3.1997, et appuyez sur ENTER pour valider. C'est bien la date 16.3.1997 qui est écrite. OK, tout va toujours comme prévu. Effacez a nouveau cette date avec la touche DEL . La date disparait.

C'est maintenant que c'est intéressant. Malgré que vous ayez effacé le contenu de la cellule, Excel continue à "Garder en mémoire" que la cellule A1 est une date. Toujours dans A1, et réécrivez encore 50. Appuyez sur ENTER. SUrprise ! Ce n'est plus 50 qui est écrit, mais 19.02.1900. Pourquoi le 19 février 1900 ? Parce que c'est le 50ème jour depuis le 1er janvier 1900... Et oui... C'est bien comme ça qu'Excel (Et Access.. et tous les programmes qui utilisent des dates) se débrouillent pour les traiter : Ils comptent le nombre de jours depuis le premier janvier 1900...

Ah il faut le savoir... Il y a de quoi devenir fou si on ne connait pas cette astuce ! Par contre dans Access, si vous essayez d'entrer 50 dans une date de naissance, il ne va pas du tout vous le transformer en 19.02.1900. Il va simplement vous renvoyer ce message :

Et Oui... Personnellemenent je préfère Access qui fait plus le "Flic" qu'Excel qui laisse vraiment tout faire...

Je vous donne l'astuce pour pouvoir effacer le format d'un type de données sous Excel : Cliquez sur A1, et faites Edition/Effacer/Format. Voilà : Maintenant il écrit tout seul 50 dans la cellule.

Effectivement, Excel est plus sympa, mais quelles sources d'erreurs !

C'est pourquoi à la fois les gens aiment bien Excel, mais se dirigent au bout d'un certain temps vers Access

Et je peux mettre vraiment n'importe quelle date ? même avant la révolution française si je veux ?

Presque. Avec Excel 2000, vous êtes limité entre le 1.1.1900 et le 31.12.9999. Avec Excel 97, il me semble que la limite supérieure se situe dans les années 2100. Avec Access, vous pouvez entrer n'importe quelle date entre le 1.1.100 et le 31.12.9999.

Si vous essayez d'écrire 1.1.99, ce sera évidemment... 1.1.1999

Oui, c'est une question que je me posais. Quand on écris l'année en 2 chiffres, comment est-ce qu'Access peut savoir si je veux l'année 1900 ou 2000 ? Par exemple si je dis 14.7.96, il va bien comprendre 14.7.1996, mais si je lui dis 14.7.03, il comprend aussi bien 2003...

Cette reconnaissance automatique s'appelle la date pivot. faisons un exemple. Définissez la date de naissance de Bill Clunton à 1.1.30, et Robert Redforde à 31.12.29. Lorsque vous changez de champs ou que vous sauvegardez, vous obtenez ce résultat : . ça montre à partir de quelle année Access change de siècle dans le cas ou on écrit l'année en 2 chiffres. C'est un peu déroutant, mais ce n'est pas du tout une erreur, c'est s'implement une notion de "Pivot".

Alors, imaginez si en plus vous aviez défini , , , , onglet Date , - C'est à dire l'affichage de l'année en 2 chiffres, et bien vous auriez obtenu l'affichage suivant : ... Alors que 100 ans séparent les 2 dates !

Inutilie de dire que l'affichage de l'année sur 4 chiffres est plus que recommandée !

Bien, mais si Robert Redforde était VRAIMENT né le 31.12.1929 ?

Il aurais simplement suffi d'écrire 31.12.1929 au lieu de 31.12.29. D'ailleurs, pour être sûr de votre coup à chaque fois, je vous conseille d'écrire systématiquement l'année en 4 chiffres.

J'ai vu que le champ Date/Heure contient le mot Heure. On peut entrer des heures minutes et secondes alors ?

Oui. Admettons que notre table T_Client soit en fait une liste de membres de l'association des couche-tôt. On pourrait installer un champ HeureCoucher qui va contenir l'heure de coucher de chaque membre. Nous allons essayer.

Nous avons vu plus haut qu'on peut mettre un nouveau champ sous les autres, et ensuite le déplacer. Mais est-ce qu'on peut directement le placer au bon endroit ? Si par exemple on voulait insérer ce nouveau champ entre Prenom et Date Naissance ?

D'accord. ça se passe en 2 temps : Il faut d'abord créer une ligne vide : Cliquez avec le bouton droit de la souris sur DateNaissance, et choisissez "Insérer des lignes"

Ajoutez ensuite à la bonne place HeureCoucher, défini en Date/Heure . Lancez la table en mode saisie de données. Précisez que Bill Clunton se couche à 21:30, et Robert Redforde se couche à 22:15. Constatez qu'Access Affiche 21:30:00 et 22:15:00. Il nous affiche les secondes même si on ne lui demande rien .

On peut empêcher l'affichage des secondes ? Parce que ça fait un peu idiot...

Oui. Revenez en mode création, cliquez sur le champ HeureCoucher. Dans les propriétés du champ, vous avez la propriété format. Cliquez dessus. Tout à droite, vous avez une petite flèche. Cliquez dessus, et choisissez Heure/Abrégé

Retournez en mode saisie de données. Maintenant les heures de coucher sont correctement écrites : .

OK. J'ai vu dans la liste de format "Date General". ça veut dire qu'on peut mettre des heures et des dates dans le même champ ? A quoi ça sert ?

Par exemple, si vous avez une table de Rendez-vous, vous pouvez très bien imaginer un champ ProchainRendez:Vous de données de type Date/Heure, format DateGeneral. A titre d'exercice, essayez : Renommez le champ HeureCoucher en DateProchainRendezVous, et définissez-le en Date/Heure, et Format : Date General. Lancez la table en mode saisie de données. Vous avez toujours les 2 heures de coucher de Bill Clunton et Robert Redforde, mais pour Michael Jordane, Ecrivez exactement ceci, sans les guillemets: "27.3.2001 15:45" (N'oubliez pas l'espace entre 2001 et 15). Vous allez alors obtenir ce résultat : .

Ce n'est pas très joli d'avoir 21:30:00, 22:15:00 et 27:03:2001 15:45:00 !

Non. Mais ce n'est pas très logique non plus de mélanger des heures et des dates...

OK. Mais je fais une petite confusion entre cette propriété de champ Format (qui est dans Access), et les options régionales qu'on a vu plus haut avec les jj.MM.aa. Ce n'est pas aussi pour définir le format des dates et des heures ?

Alors, en fait, les options générales de Windows portent bien leur nom : Ce sont des options générales : C'est à dire que ce sont les options dont se servent les différents programmes tels qu'Access ou Excel pour afficher les dates ou les heures, ou même les nombres (Virgule ou point pour les décimales selon les pays par exemple). Mais justement, il peut arriver qu'on veuille, malgré le pays dans lequel on se trouve, CHANGER cette apparence, et afficher les données de façon différentes, pas pour tout le temps, mais seulement dans un certain contexte : Par exemple, dans notre table Access, tout à l'heure, pour HeureCoucher, nous avons trouvé un peu idiot d'indiquer les secondes ! Mais ici seulement ! Pas tout le temps ! Alors, on ne change pas les options régionales de Windows, mais seulement l'option du champ.

Petite astuce amusante :

Connaissez-vous le nom du jour ou vous êtes né ? Un lundi, un mardi, un Dimanche ? Pour le savoir, c'est très simple : Il vous suffit simplement d'avoir un champ Date/Heure que vous définissez en format Date Complet. Pour tester ça, utilisez le champ DateNaissance que vous avez déjà dans votre table. Ecrivez votre propre date de naissance sur n'importe quel client (Moi, je suis né le 21.2.1965) : . Changez de champ, et voilà : ... Oups ! Ma colonne n'est pas assez large pour tout voir. Vous pouvez l'élargir comme dans Excel, en cliquant entre 2 colonnes et en tirant vers la droite : . Et voilà : Je suis né un dimanche !

Bon... Hem... On peut résumer ?

Contrairement à Excel, qui s'accomode des dates sans broncher, mais qui vous réserve certaines mauvaises surprises, Access va vous obliger à être une fois de plus strict dans la féfinition de vos champs. Un seul type de données est utilisé : Date/Heure.

Dans un champ Date/Heure, on peut stocker des Jours, mois et années ainsi que des heures, minutes et secondes.

Les Applications sont très larges : Dates de commande, date de livraison, date de naissance, de décès, jour et jeure de rendez-vous, temps de parcours, minutage de marathons...

Vous pouvez mettre n'importe quoi dans les limites du premier janvier 100 à minuit jusqu'au 31 décembre 9999 à 23 heures 59 minutes 59 secondes.

Le format d'affichage des dates et des heures peut se définir globalement grâce aux options générales du panneau de configuration, ou de manière locale avec la propriété Format.

Avez-vous bien compris ?

  1. Quel est le format de données que vous allez utiliser pour un champ DateVisite qui va contenir la date de la dernière visite médicale d'un client ?
    a. Date, abrégé ***
    b. Heure, Complet
    c. Heure, Réduit

  2. Quel jour tombe le 31.12.2099 ?
    a. Lundi
    b. Mardi
    c. Mercredi
    d. Jeudi ***

  3. Peut-on mettre une date dans un champ Texte ?
    a. Non
    b. Oui. C'est recommandé
    c. Si on veut, mais elle ne sera pas reconnue en tant que date
    ***
  4. Si j'écris dans un champ date 30.2.1997, Access va :
    a. Accepter
    b. refuser *** (Le 30 février n'existe pas)
    c. Transformer 1997 en 1996

  5. Si j'écris 23.6.22, Access va comprendre 22 comme
    a. 1922
    b. 2022 ***
    c. 22

  6. J'aimeras que dans toutes mes applications, les années soient écrites sur 4 chiffres. Je vais dans :
    a. Fichier/Format/Date/Changement : jj.MM.AAAA
    b. Démarrer/Paramètres/Options régionales, Onglet Date : jj.MM.AAAA ***
    c. Démarrer/Paramètres/Changer la date : Choisir "Afficher la date en 4 caractères"

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.

Exercice

Nous allons parler de sport et de sportifs. Plus précisément de marathoniens (j'ai pris les marathoniens pour que nous n'ayons pas à nous soucier des fractions de secondes). Vous allez créer une base de données marathon.mdb, dans laquelle vous allez créer une table T_Marathonien, dans laquelle vous aurez les inforrmations suivantes :

  • Le nom
  • Le prénom
  • Le record personnel (le meilleur temps effectué)
  • La date et l'heure exacte à laquelle ce record a été effectué
  • La date de la dernière visite chez le médecin
  • L'heure de lever habituel
  • Le jour de repos hebdomadaire

Pour vous aider, voici 2 exemple des données :

  1. Jules Martin. Son record est de 4H 56M 31S, effectué le Vendredi 20 avril 2001. Il a visité le médecin la dernière fois le 12.3.2001. Il se lève à 7H30, et ne court jamais le dimanche
  2. André Gavral a un record de 4H 32M 02S, effectué le Mercredi 18 avril 2001. Sa dernière visite médicale date du 17.2.2001, il se lève à 8H15, et ne court pas le samedi

Si vous avez des champs texte, ne vous occupez pas de leur longueur, ainsi que des légendes et des Valide Si. Je suppose que ces notions ont été bien acquises aux leçons précédentes.

Téléchargez la solution de l'exercice ici

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.

Aperçu de la leçon suivante

Lors de la prochaine leçon, nous aborderons le type de données Monétaire, qui, vous le verrez n'est qu'une sorte de numérique optimisé pour accueillir les valeurs financières