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

VBA Access Discussion :

duree en heure de nuit et de jour entre une heure de debut et une heure de fin. [AC-2007]


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 3
    Points
    3
    Par défaut duree en heure de nuit et de jour entre une heure de debut et une heure de fin.
    bonjour a tous ,

    etant debutant en access et en VBA j'ai un probleme a coder une formule qui puisse calculer la duree en heure entre une heure de debut et une heure de fin , tout en specifiant les heures de jours ( entre 6 h et 21 h ) et les heures de nuit ( entre 21 h et 6 h du lendemain) .

    par exemple : heure debut: 8:00 et heure fin : 1:h du lendemmain

    le calcul rendra les resultat suivant : heures jour: 13:00 , heures nuit: 4:00

    si quelqu'un peux m'aider ca sera le bienvenue .

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Icestation,

    Question intéressante plus ardue qu'il n'y paraît au premier abord...

    Il me semble, qu'une boucle pourrait faire l'affaire.
    Je ne connais pas VBA, je ne peux donc pas tester la fonction que je te propose. Néanmoins, la voici en semi-français.

    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
    f(date_debut, date_fin, compteur_jour, compteur_nuit)
    nombre_heure_difference : date_fin - date_debut (en nombre d'heure)
    compteur_jour = 0
    compteur_nuit = 0
    date_debut_incrementee = date_debut
     
       for i = 1 to nombre_heure_difference
       date_debut_incrementee = date_debut_incrementee + 1 heure
          si heure(date_debut_incrementee) entre 8 et 20
          compteur_jour = compteur_jour + 1
          endsi
     
          si heure(date_debut_incrementee) entre 0 et 7 ou entre 21 et 23
          compteur_nuit = compteur_nuit + 1
          endsi
       next i
    fin fonction
    Compteur_jour et compteur_nuit devrait contenir les valeurs que tu souhaites.

    Il faudrait faire tourner cette fonction "à la main", en modifiant les différentes valeurs manuellement, et voir ce que cela donne...

    Si un codeur pouvait traduire cela en VBA, nous pourrions tester cette fonction.

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    merci pour la reponse rapide , en effet j'ai penser a l incrementation aussi , mais comme j'ai besoin des minutes aussi c'est moin pratique.

    je croit que la solution optimale serais plutot de prevoir des choix conditionnels de type "case of " ou des if imbriquées peut etre .

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Les minutes ne posent pas de problème insurmontable, me semble-t-il : elles ne doivent être calculées que entre la date/heure/minute_début jusqu'à la date/heure pleine suivante et entre date/heure pleine précédente à la date/heure/minute_fin.

    Ensuite, la boucle indiquée tient la route puisqu'elle traite des date/heure pleine (sans les minutes, donc).

    A tester.

  5. #5
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Avez-vous fait une recherche sur l'utilisation des dates?

    Il y a quelques réponses dans la FAQ et quelques tutoriels, entre autre celui là :

    Les Fonctions Date/Heure

    Bonne lecture

    Pierre

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 302
    Points : 185
    Points
    185
    Par défaut
    Salut,

    Tiens je te met mon code que j'ai fait pour calculer les heures de nuit et de jours.
    Je les ai calculé en minute.
    N=compteur nuit
    J= compteur jour

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    If ([Heure deb] * 1440) < ([Heure fin] * 1440) Then
     
        If ([Heure deb] * 1440) > 360 Then
     
            If ([Heure fin] * 1440) < 1260 Then
            J = ([Heure fin] * 1440) - ([Heure deb] * 1440)
            n = 0
            ElseIf ([Heure fin] * 1440) >= 1260 Then
            n = ([Heure fin] * 1440) - 1260
            J = 1260 - ([Heure deb] * 1440)
            End If
     
        ElseIf ([Heure deb] * 1440) <= 360 Then
     
            If ([Heure fin] * 1440) < 1260 Then
            n = 360 - ([Heure deb] * 1440)
            J = ([Heure fin] * 1440) - 360
            ElseIf ([Heure fin] * 1440) >= 1260 Then
            n = (360 - ([Heure deb] * 1440)) + (([Heure fin] * 1440) - 1260)
            J = 900
            End If
        End If
     
    ElseIf ([Heure deb] * 1440) > ([Heure fin] * 1440) Then
     
        If ([Heure deb] * 1440) < 1260 Then
     
            If ([Heure fin] * 1440) > 360 Then
            n = 900
            J = ((([Heure fin] * 1440) + 1440) - ([Heure deb] * 1440)) - 900
            ElseIf ([Heure fin] * 1440) <= 360 Then
            J = 1260 - ([Heure deb] * 1440)
            n = (([Heure fin] * 1440) + 1440) - 1260
            End If
     
        ElseIf ([Heure deb] * 1440) >= 1260 Then
     
            If ([Heure fin] * 1440) > 360 Then
            J = ([Heure fin] * 1440) - 360
            n = 1800 - ([Heure deb] * 1440)
            ElseIf ([Heure fin] * 1440) <= 360 Then
            J = 0
            n = (([Heure fin] * 1440) + 1440) - ([Heure deb] * 1440)
            End If
     
        End If
     
    End If

  7. #7
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    merci richard , pier_antoine et rob1son , je vais essayer le code et vous dir si ca a marcher pour moi .

  8. #8
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    rebonjour a tous .

    j'ai un peu adapter le code de rob1sn76 pour ne renvoyer que les heures de jours en heure mais c'est pas completement au point .


    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Function CalculJour(Heure_Debut As Date, Heure_Fin As Date) As Date
     
    If (Heure_Debut) < (Heure_Fin) Then
     
        If (Heure_Debut) > #7:00:00 AM# Then
     
            If (Heure_Fin) < #9:00:00 PM# Then
            CalculJour = (Heure_Fin) - (Heure_Debut)
            ElseIf (Heure_Fin) >= #9:00:00 PM# Then
     
            CalculJour = #9:00:00 PM# - (Heure_Debut)
            End If
     
        ElseIf (Heure_Debut) <= #7:00:00 AM# Then
     
            If (Heure_Fin) < #9:00:00 PM# Then
            CalculJour = (Heure_Fin) - #7:00:00 AM#
            ElseIf (Heure_Fin) >= #9:00:00 PM# Then
            CalculJour = #3:00:00 PM#
            End If
        End If
     
    ElseIf (Heure_Debut) > (Heure_Fin) Then
     
        If (Heure_Debut) < #9:00:00 PM# Then
     
            If (Heure_Fin) > #7:00:00 AM# Then
            CalculJour = (((Heure_Fin) + #12:00:00 PM#) - (Heure_Debut)) - #3:00:00 PM#
            ElseIf (Heure_Fin) <= #7:00:00 AM# Then
            CalculJour = #9:00:00 PM# - (Heure_Debut)
            End If
     
        ElseIf (Heure_Debut) >= #9:00:00 PM# Then
     
            If (Heure_Fin) > #7:00:00 AM# Then
            CalculJour = (Heure_Fin) - #7:00:00 AM#
            ElseIf (Heure_Fin) <= #7:00:00 AM# Then
            CalculJour = 0
            End If
     
        End If
     
    End If
     
    End Function
    si vous pouviez me dir ou sont les erreurs que j commis . merci .

  9. #9
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    si quelqu'un peu bien m'aider ?

  10. #10
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    j'ai corriger un peu le code que j'ai adapter de celui de rob1inson et ca parrais marcher correctement .
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
           Function CalculJour(HEURE_DEBUT As Date, HEURE_FIN As Date) As Date
     
    If (HEURE_DEBUT) < (HEURE_FIN) Then
     
        If ((HEURE_DEBUT) > #7:00:00 AM# And (HEURE_FIN) < #9:00:00 PM#) Then
            CalculJour = (HEURE_FIN) - (HEURE_DEBUT)
          ElseIf ((HEURE_DEBUT) > #12:00:00 AM# And (HEURE_FIN) <= #7:00:00 AM#) Then
            CalculJour = 0
          ElseIf ((HEURE_DEBUT) > #7:00:00 AM# And (HEURE_FIN) >= #9:00:00 PM#) Then
            CalculJour = #9:00:00 PM# - (HEURE_DEBUT)
          ElseIf ((HEURE_DEBUT) <= #7:00:00 AM#) And ((HEURE_FIN) < #9:00:00 PM#) Then
            CalculJour = (HEURE_FIN) - #7:00:00 AM#
          ElseIf ((HEURE_DEBUT) <= #7:00:00 AM#) And (HEURE_FIN) >= #9:00:00 PM# Then
            CalculJour = #9:00:00 PM# - #7:00:00 AM#
     
         End If
     
    ElseIf (HEURE_DEBUT) > (HEURE_FIN) Then
     
        If ((HEURE_DEBUT) < #9:00:00 PM#) And ((HEURE_FIN) > #7:00:00 AM#) Then
            CalculJour = ((HEURE_FIN - #7:00:00 AM#) + (#9:00:00 PM# - HEURE_DEBUT))
          ElseIf ((HEURE_DEBUT) < #9:00:00 PM#) And (HEURE_FIN) <= #7:00:00 AM# Then
           CalculJour = #9:00:00 PM# - (HEURE_DEBUT)
          ElseIf ((HEURE_DEBUT) >= #9:00:00 PM#) And ((HEURE_FIN) > #7:00:00 AM#) Then
            CalculJour = (HEURE_FIN) - #7:00:00 AM#
          ElseIf ((HEURE_DEBUT) >= #9:00:00 PM#) And (HEURE_FIN) <= #7:00:00 AM# Then
            CalculJour = 0
     
         End If
     
    End If
     
    End Function
     
     
           Function CalculTotal(HEURE_DEBUT As Date, HEURE_FIN As Date) As Date
     
    CalculTotal = [HEURE_FIN] - [HEURE_DEBUT] + 1
     
     
    End Function
     
     
           Function CalculNuit(HEURE_DEBUT As Date, HEURE_FIN As Date) As Date
     
    CalculNuit = ([HEURE_FIN] - [HEURE_DEBUT] + 1) - CalculJour(HEURE_DEBUT, HEURE_FIN)
     
     
    End Function
    je vais tester pour quelques temps pour etre sure que ca marche bien .

    merci a tous encore une fois .

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

Discussions similaires

  1. lancer une serie de slide suivant l heure et le jour
    Par mister_jo dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 05/09/2008, 05h38
  2. Formule VB pour heures de nuit ayant une faille
    Par super_newbie_pro dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/01/2008, 10h04
  3. Heures de nuit comprises dans une amplitude
    Par Philou29 dans le forum Modélisation
    Réponses: 8
    Dernier message: 21/10/2007, 23h09
  4. [Programmation]Durée en Mois ET Jours entre 2 dates
    Par Shamard dans le forum VBA Access
    Réponses: 5
    Dernier message: 23/04/2007, 18h52
  5. Durée en jours, entre deux dates
    Par Arvulis dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/09/2006, 18h45

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