Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Problème de calcul avec les heures


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Problème de calcul avec les heures
    Bonjour à tous,
    J'ai un petit souci de calcul entre deux champs de type date et heure.

    Je saisie une heure dans le premier champs
    Je saisie une heure dans le deuxième champs
    J'ai ensuite créée un champs indépendant qui fait la différence entre le deuxième champs et le premier.
    Ainsi si je saisie :
    10:00:00 - 12:00:00 j'obtient bien 2:00:00
    en revanche quand je saisie
    23:00:00 - 1:00:00 j'obtient 22:00:00 alors que normalement je devrais obtenir 2:00:00.

    Quelqu'un a-t-il la solution ?
    Merci d'avance
    Steph

  2. #2
    Membre habitué
    Heure... d'une même journée.
    Si tu saisie seulement une heure, la partie date du champ est la même pour les deux champs.

    Donc 10:00:00, 12:00:00, 23:00:00 et 1:00:00 sont en fait

    1988-12-30 1:00:00
    1988-12-30 10:00:00
    1988-12-30 12:00:00
    1988-12-30 23:00:00

    Il y a bien 22h de différence entre 1h et 23h... de la même journée.
    La solution serait d'ajouter 1 journée si l'heure est le matin (ou l'avant midi, ça dépend de ton besoin).

    Si, quand c'est "1h du matin", on parle du lendemain, on aurait donc
    (1988-12-31 1:00:00 - 1988-12-30 23:00:00), ce qui te donnera 2h.

    Caroline
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

  3. #3
    Membre habitué
    Ou encore
    23h - 1h = 22h. OK Normal.

    Mais puisque le 1h vient APRÈS, pour toi, c'est ceci que tu as besoin :
    1h - 23h = -2h.
    Te reste plus qu'à prendre la valeur absolue.

    C'est à tester.

    Modif:
    Ça ne fonctionne pas. Access, bien malin, semble corriger tout seul le sens de l'équation. Pour 1h-23h, il donne aussi 22h.
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

  4. #4
    Nouveau membre du Club
    Je suis vraiment bête mais je ne comprend absolument rien...
    En fait, il est possible aussi que je saisisse des minutes comme par exemple :
    12:20:00

    J'ai un exemple en fichier joint.

    Merci d'avance

  5. #5
    Nouveau membre du Club
    Ok merci beaucoup
    Je vais tester.

  6. #6
    Membre habitué
    Tes champs sont de type "Date/Heure". C'est à dire que pour chaque donnée, il y a de la place pour saisir une date ET une heure (et des minutes et des secondes)

    Si tu ne mets qu'une heure (heure, minute et seconde) dans le champ, Access met quand même quelque chose par défaut dans la première partie. Il met "1899-12-30" , mais tu ne la vois pas. Tu peux faire le test :

    -Ouvre ta table en création.
    -Sélectionne ton champ de type "Date/Heure".
    -Écrit "aaaa-j-m\ h:nn:ss" (sans les guillemets) dans la propriété "format".
    -Ouvre ta table en feuille de données et regarde les données qui se trouvent dans le champ Date/Heure.


    Quand tu fais la différence entre deux heures, Access fait en fait un calcul sur des champs Date/Heure. Au complet. D'où ton 23h de différence que tu ne comprennais pas.

    1h du matin vient AVANT 23h du soir. Du moins dans une même journée. Si tu veux que 23h - 1h = 2h, tu dois préciser que c'est 1h le lendemain matin.
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

  7. #7
    Nouveau membre du Club
    Je comprend mieux... mais je ne vois pas comment faire... ceci dit rare seront les fiches ou l'heure de fin sera la nuit mais cela peut arriver...
    Merci de m'avoir aider... c'est vraiment sympas.

  8. #8
    Nouveau membre du Club
    J'ai vu et bien compris le problème mais comment ajouter ou plutôt préciser que c'est la journée du lendemain comme tu me conseilles dans ton message ?

  9. #9
    Membre habitué
    Tu dois passer par le code VBA, avec une condition.
    Quelque chose comme :

    If (monHeureFin est la nuit) then monHeureFin = monHeureFin + 1 journée.
    La condition "est la nuit", c'est à toi de la déterminer. Tu peux dire par exemple que monHeureFin < 6:00 (donc à partir de 6:00:01, c'est le matin.)

    Comment/où fais-tu actuellement ta différence d'heure?
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

  10. #10
    Nouveau membre du Club
    Je fais la différence dans un champs indépendant d'un formulaire avec une formule comme :
    =[heure fin] - [heure début]

  11. #11
    Membre habitué
    Il te faut ça à la place :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    =VraiFaux([heure fin]<#06:00:00#;[heure fin]+24-[heure debut];[heure fin]-[heure debut])

    VraiFaux est une fonction. VraiFaux(condition, siVrai, siFaux). Si la condition est vraie, alors le contenu devient siVrai. Si la condition est fausse, le contenu devient siFaux.

    La condition est [HeureFin]<#06:00:00#.
    # est le symbôle pour indiqué que c'est une date (ou une partie de date).
    Ici, on teste si l'heure de fin survient avant 6h du matin.

    Si oui, on calcule la durée comme je te l'ai suggéré : on ajoute une journée (24h).

    Si non, on calcule comme normalement, donc ce que tu fesais.
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

  12. #12
    Nouveau membre du Club
    Ca Marche !
    Merci Caroline !!! Ca marche !!!!
    Je ne sais comment te remercier... J'ai passé toute l'après midi à chercher...
    Merci encore !!!

  13. #13
    Membre habitué
    Fait plaisir .

    La fonction VraiFaux est en fait une fonction VBA. En anglais, elle s'appelle iif(condition, siVrai, siFaux). D'ailleurs, si tu tapes iif dans le champ contrôle, Access en français te le traduit par VraiFaux.

    Regarde du côté de VBA quand tu auras du temps pour apprendre ça. Dès que tu veux faire un truc "un peu" automatisé, la solution se trouve par là.

    Caroline
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

###raw>template_hook.ano_emploi###