Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2011, 14h14   #1
Invité de passage
 
Inscription : avril 2005
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 6
Points : 1
Points : 1
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 .
icestation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 17h48   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
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 :
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.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/01/2011, 19h37   #3
Invité de passage
 
Inscription : avril 2005
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 6
Points : 1
Points : 1
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 .
icestation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 23h04   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
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.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 09h23   #5
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
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
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 10h04   #6
Membre habitué
 
quentin massé
Inscription : janvier 2010
Messages : 251
Détails du profil
Informations personnelles :
Nom : quentin massé
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2010
Messages : 251
Points : 125
Points : 125
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 :
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
rob1son76 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/01/2011, 19h15   #7
Invité de passage
 
Inscription : avril 2005
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 6
Points : 1
Points : 1
merci richard , pier_antoine et rob1son , je vais essayer le code et vous dir si ca a marcher pour moi .
icestation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 18h20   #8
Invité de passage
 
Inscription : avril 2005
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 6
Points : 1
Points : 1
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 :
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 .
icestation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 13h22   #9
Invité de passage
 
Inscription : avril 2005
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 6
Points : 1
Points : 1
si quelqu'un peu bien m'aider ?
icestation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2011, 23h36   #10
Invité de passage
 
Inscription : avril 2005
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 6
Points : 1
Points : 1
j'ai corriger un peu le code que j'ai adapter de celui de rob1inson et ca parrais marcher correctement .
Code :
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 .
icestation est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h32.


 
 
 
 
Partenaires

Hébergement Web