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

Temps nécessaire pour suivre cette leçon : Environ une 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. Besoin d'aide pour le téléchargement ? : Cliquez ici.

Aperçu de cette leçon

Dans cette leçon, nous allons apprendre à déplacer les champs, mais surtout à utiliser le type de données Date/Heure. Les dates et les heures ont toujours été un casse-tête pour les informaticiens 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 les PCs et Access fonctionnent avec un système aussi compliqué...

Sommaire

  1. Déplacement des champs
  2. Le codages des années sur 2 ou 4 chiffres : Utilisation du panneau de configuration de Windows
  3. Le type de données Date (Date/Heure) : Gestion des années bissextiles, comparaison avec Excel
  4. Le type de données Date (Date/Heure) : Limites temporelles, problème de l'affichage de l'année sur 2 chiffres
  5. Le type de données Heure (Date/Heure) : Gestion des heures, des minutes et des secondes
  6. Le type de données Date (Date/Heure) et son interaction avec la propriété Format
  7. Petite astuce amusante : Quel est le nom du jour de votre naissance ?

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

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


Déplacement des champs

Vous avez inséré ce champ en dessous des autres. En fait, pour une simple question de confort visuel, il serait bien pratique de déplacer ce champ vers le haut, juste après le prénom, comme ceci : .

Pour ce faire, suivez très scrupuleusement les étapes suivantes :

  1. Cliquez sur le petit carré juste à gauche de DateNaissance pour le sélectionner :
  2. Lâchez le bouton de la souris
  3. Recliquez au même endroit , laissez le doigt appuyé sur la souris, et glissez le champ vers le haut, jusqu'à ce que vous voyez une fine ligne noire horizontale apparaître entre Prenom et Taille : . A ce moment, lachez la souris, et voilà : Le champs DateNaissance est maintenant placé à l'endroit voulu:

Lancez à présent votre table en mode saisie de données.


Le codages des années sur 2 ou 4 chiffres : Utilisation du panneau de configuration de Windows

Précisez la date de naissance de Bill Clunton comme étant le 17 mars 1949, de cette façon : . Enregistrez (Shift Enter). Constatez que l'année est maintenant écrite en 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, selon la région du monde dans laquelle vous vous trouvez, les manières d'écrire 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 (03-17-1949). Certaines personnes écrivent l'année sur 2 chiffres, d'autres sur 4, certaines 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. Voysons comment celà se passe. Restez dans Access, mais nous allons partir en excursion.

Cliquez en bas à gauche de votre écran sur , , . Double-cliquez sur (Ou paramètres régionaux, ça dépend des versions de Windows)

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 aperçu tout à l'heure l'année de naissance Bill Clunton sur 2 chiffres, même après avoir enregistré avec SHIFT ENTER. Si vous avez vu 4 chiffres, c'est que le format de la date est jj.MM.aaaa : .

Si ce réglage ne s'effectue pas depuis 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. Par exemple 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 : (Avec Access 200/XP. Avec la version 97, vous n'avez qu'un rectangle marqué Access). 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 : .

Compris ! A part ça, c'est ici dans les paramètres régionaux qu'on change les points, les / (slashes), 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 si vous en avez envie.


Le type de données Date (Date/Heure) : Gestion des années bissextiles, comparaison avec Excel

Access reconnait-il même les années bissextiles ?

Oui, heureusement. Essayons. Dites que Robert Redforde est né le 29.2.1944. Tout va bien. précisez 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'aligne à gauche. Il l'accepte, mais il ne la reconnait pas comme date... :

Mais bon... Vaut-il mieux un programme qui vous renvoie 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, ce que vous ignorez peut-être, c'est qu'il le fait malgré tout. 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 prend en compte que la cellule contient du texte. Vous entrez une date ? Il définit la cellule en type 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 pour valider. 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 (Une date quelconque en fait), 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é le fait que vous ayez effacé le contenu de la cellule, Excel continue à "Garder en mémoire" que la cellule A1 est en format de Date. Toujours dans A1, réécrivez encore une fois 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 (ou depuis une autre date, mais ils comptent les jours)...

Comment faire pour que ce soit réécrit 50 dans la cellule ? Cliquez dessus, et allez dans le menu Edition/effacer/format.

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 envoyer sur les roses:

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

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

C'est pourquoi la plupart des utilisateurs aiment Excel, mais se dirigent au bout d'un certain temps vers Access. Mais adopter Access ne doit pas signifier renier Excel,m bien au contraire !


Le type de données Date (Date/Heure) : Limites temporelles, problème de l'affichage de l'année sur 2 chiffres

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

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

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 Enregistrez, 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 !

Inutile 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 aurait 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 ?


Le type de données Heure (Date/Heure) : Gestion des heures, des minutes et des secondes

Oui. Admettons que notre table T_Client soit en fait une liste de membres de l'association des couche-tôt (Quelle association ridicule... Mais il faut bien faire un exemple). 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 ?

Ca 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 le champ 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 .


Le type de données Date (Date/Heure) et son interaction avec la propriété Format

On peut empêcher l'affichage des secondes ?

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 celà peut il bien servir ?

Par exemple, si vous avez une table de Rendez-vous, vous pouvez très bien imaginer un champ ProchainRendezVous, de type Date/Heure en format : DateGeneral. A titre d'exercice, essayez : Renommez le champ HeureCoucher en ProchainRendezVous, 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 ?

Les options générales de Windows portent bien leur nom : Ce sont des options générales : 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 régions par exemple).

Mais 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érente, pas pour toujours, mais seulement dans un certain contexte : Par exemple, dans notre table, 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 : Quel est le nom du jour de votre naissance ?

Connaissez-vous le nom du jour ou vous êtes né ? Un lundi, un mardi, un dimanche ? Pour le savoir, il vous suffit 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à à disposition. Ecrivez votre propre date de naissance sur n'importe quel client (Moi, je suis né le 21.2.1965) : . validez en changeant de champ ou en appuyant sur ENTER, 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 : .

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 strict dans la définition de vos champs. Un seul type de données est utilisé pour les années, mois, jours, heures, minutes et secondes : Date/Heure.
Les applications de ce type sont très larges : Date 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 placer 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 (testez !)?
    a. Lundi
    b. Mardi
    c. Mercredi
    d. Jeudi ***

  3. Peut-on installer 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 dans un champ Date/heure, Access va comprendre 22 comme
    a. 1922
    b. 2022 ***
    c. 22

  6. J'aimeras que dans tous mes programmes, les années soient affichées 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, contenant les inforrmations suivantes :

  • Le nom du marathonien
  • Le prénom
  • Le record personnel (le meilleur temps effectué)
  • La date exacte à laquelle ce record a été effectué
  • La date de sa dernière visite chez le médecin
  • Son heure de lever habituelle/moyenne
  • Le nom du jour de repos hebdomadaire

Pour vous aider, voici 2 exemples de 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 ProFormation.mdb exactement dans l'état ou elle devrait être à la fin de cette leçon. Besoin d'aide pour le téléchargement ? : Cliquez ici.

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