IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 heure dans un formulaire


Sujet :

Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 216
    Points : 137
    Points
    137
    Par défaut Problème heure dans un formulaire
    Bonjour tout le monde.

    J'ai un simple problème, et après recherche, je ne trouve pas de solution.

    J'ai une base de données qui me permet de gérer les heure d'employés.

    Dans un formulaire, je peut faire une saisie d'horaire. J'ai 4 champs (heure d'arrivé matin/départ matin, heure d'arrivé après midi/Départ après midi).

    Les champs d'horaires on un masque de saisie pour facilité le travail.

    Mon problème est classique, tout fonctionne sauf dans un cas : quand la personne fini de travailler vers 24:00 (l'hotellerie ). En effet, Access refuse de saisir une heure plus grande que 23h59.

    Si j'écris 0H00, cela fausse tout naturellement les calculs que je fais ensuite dans mon état ...

    Merci à tous pour votre aide (rechercher sur le forum 'ma permit de régler plusieurs problème déjà !)
    Le Gameplay doit forcer le Roleplay

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Le masque de saisie autorise le 00:00...
    Pour l'heure de fin, il faut que tu vérifies son contenu avant de calculer le temps réel de travail. En effet, si la personne termine à 00h07 il est évident qu'il empiète sur la journée suivante et de ce fait, tu as besoin d'une date car l'intervalle de temps se calcule entre deux dates en réalité.
    Donc si ta txtHeureFinPM est inférieure à 00:00 alors le programme doit considérer que c'est Date J sinon Date J+1.

    A toi de jouer avec les événements BeforeUpdate ou Exit pour vérifier quelle date tu dois prendre en compte.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    En effet, la masque de saisie autorise le 00:00, c'est le 24:00 qu'il refuse.
    Cependant, je peut jouer avec les événements BeforeUpdate ou Exit si mon champ dans la table est aussi défini en Date/heure, heure abrégé ?

    Faro

    Citation Envoyé par argyronet
    Bonjour,

    Le masque de saisie autorise le 00:00...
    Pour l'heure de fin, il faut que tu vérifies son contenu avant de calculer le temps réel de travail. En effet, si la personne termine à 00h07 il est évident qu'il empiète sur la journée suivante et de ce fait, tu as besoin d'une date car l'intervalle de temps se calcule entre deux dates en réalité.
    Donc si ta txtHeureFinPM est inférieure à 00:00 alors le programme doit considérer que c'est Date J sinon Date J+1.

    A toi de jouer avec les événements BeforeUpdate ou Exit pour vérifier quelle date tu dois prendre en compte.

    Argy
    Le Gameplay doit forcer le Roleplay

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Mmmmm
    Quand on te demande l'heure, tu ne dis pas il est 24H00 mais bel et bien minuit.
    Ce qui fais que tu dois avoir (en champ caché par exemple) 4 zones de texte (Date_1 à date_4) qui contiennent la date du jour. Sur la 4ème zone,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si l'heure est >= 0h00 et < à Heure_1
    (celle du départ) alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Date_4 = Date_4 + 1 jour
    ce qui fait que tu peux calculer ton temps travaillé.
    Pour vérifier, entraîne toi sous Excel, tu verras comment c'est simple à comprendre.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    Une chose importante, les horaires sont rentré chaque fin de mois.

    Je pense avoir compris le système de fonctionnement.

    J'ai commencé à coder ta solution, mais je bute (encore) sur un problème. Je ne sais tout simplement pas rajouter 1 jours à mon champ

    J'ai tenté avec différentes fonction, mais dès que je touche a une fonction date, il me fait n'importe quoi (il me place le champ en 1899, ou au jour d'aujourd'hui).

    Désolé d'être aussi lent à comprendre

    Faro
    Le Gameplay doit forcer le Roleplay

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Mai 2004
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 236
    Points : 310
    Points
    310
    Par défaut
    Tu peux utiliser la fonction DateAdd (intervalle, nombre, date) pour ajouter des jours :

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateAdd("d", 1, now()) 'renvoi maintenant + 1 jour
    en espérant t'avoir aidé.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    J'ai tenté de travailler avec la formule, j'ai fait cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If HDA <= "10:00" Then
        MsgBox (HDA)
        HDA = DateAdd("d", 1, HDA)
        MsgBox (HDA)
    End If
    Cela me permet de dire que tant que l'horaire de fin de travail l'après midi est une heure du matin (ici avant 10H) et bien il faut rajouter 1 jour.

    Je sais que cela n'est pas éllégant (il rentre en fait dans le champ la date aussi comme par exemple 12/05/1899) cependant cela fonctionne ensutie dans mes calculs dans mes états.

    Merci pour votre aide à tous, si vous trouver une solution plus "éllégante", je suis toujours preneur !

    Faro
    Le Gameplay doit forcer le Roleplay

  8. #8
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Re,

    Essaye de t'inspirer de ce point de départ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Private Sub cmdCalculerTemps_Click()
    Dim dblH1 As Double
    Dim dblTempH1 As Double
    Dim dblH2 As Double
    Dim dblH3 As Double
    Dim dblH4 As Double
     
    Dim strUneDate As String
    Dim dtmDateDuJour As Date
    Dim dtmDateFin As Date
    Dim dblTotal As Double
     
      'Matin
      dtmDateDuJour = CDate(Format(Me!txtHeure1, "dd/mm/yyyy hh:mm"))
      dblH1 = CDbl(dtmDateDuJour)
      dtmDateDuJour = CDate(Format(Me!txtHeure2, "dd/mm/yyyy hh:mm"))
      dblH2 = CDbl(dtmDateDuJour)
     
      'Après midi
      dtmDateDuJour = CDate(Format(Me!txtHeure3, "dd/mm/yyyy hh:mm"))
      dblH3 = CDbl(dtmDateDuJour)
     
      dblH4 = CDbl(Me!txtHeure4)
      dblTempH1 = CDbl(Me!txtHeure1)
      Select Case dblH4
        Case 0 To dblTempH1
          strUneDate = Format(DateAdd("d", 1, Now()), "dd/mm/yyyy")
          dtmDateFin = CDate(Format(strUneDate & " " & Me!txtHeure4, "dd/mm/yyyy hh:mm"))
          dblH4 = CDbl(dtmDateFin)
        Case Else
      End Select
      'Total
      dblTotal = (dblH2 - dblH1) + (dblH4 - dblH3)
      Me!txtTempsTravail = Format(dblTotal, "hh:mm")
    End Sub
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2002] Gestion de la date et de l'heure dans un formulaire.
    Par vortexlechien dans le forum IHM
    Réponses: 1
    Dernier message: 04/04/2009, 20h34
  2. soustraction d'heures dans un formulaire
    Par patmar83 dans le forum VBA Access
    Réponses: 5
    Dernier message: 10/06/2008, 13h17
  3. Problème inconu dans mon formulaire
    Par abdell dans le forum Langage
    Réponses: 2
    Dernier message: 08/06/2008, 21h11
  4. Afficher heure dans une formulaire
    Par orandriam dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 28/11/2007, 15h12
  5. Calculs d'heures dans un formulaire
    Par rossy dans le forum IHM
    Réponses: 1
    Dernier message: 27/11/2006, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo