MANIPULATION HEURE

Résolu
winvsmac Messages postés 84 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 14 décembre 2016 - 4 nov. 2007 à 17:27
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 10 nov. 2007 à 09:48
Bonjour à tous !!!

Je suis en train de me faire un soft pour gérer un planning, cependant je bloque sur la manipulation des heures.

On considère que les heures effectuées entre 22h00 et 06h00 sont considérées en heure de nuit.
Par exemple, si une personne travaille de 15h00 à 23h00 par exemple, il aura fait 1 heure de nuit. Si une autre travaille de 01h00 à 11h00, elle aura fait 5 heures de nuit.

En fait, je n'arrive pas à caculer le nombre d'heures de nuit en fonction de différents horaires de travail.

Si quelq'un peut éclairer ma lanterne, ça serait sympa.
C'est pour du VB6.

Merci !!!!!!!

5 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
8 nov. 2007 à 14:04
 Bonjour à tous,

En suivant les directives de Jacques, ci-desous un script vbs, facilement adaptable pour vb6.
Utilisation des fonctions FormatDateTime, TimeSerial, DateDiff, Hour et Minute.
J'ai dissocié volontairement date1=date2 et date1<>date2 pour limiter les "If".
Ce script est très certainement perfectible !!! Avis aux courageux.
A rajouter un test de cohérence des Dates et Heures.

'Gestion des heures de nuit (22h00 - 06h00)
'---------------------------------------------
'exemple1: h1="06h05" : date1="07/11/2007" : h2="20h20" : date2="07/11/2007"  '  heures de nuit = "aucune heure de nuit" 
'exemple2: h1="20h05" : date1="07/11/2007" : h2="23h15" : date2="07/11/2007"  '  heures de nuit = 01h15
'exemple3: h1="22h15" : date1="07/11/2007" : h2="23h20" : date2="07/11/2007"  '  heures de nuit = 01h05
'                h1="00h05" : date1="08/11/2007" : h2="05h20" : date2="08/11/2007"  '  heures de nuit = 05h15
'exemple4: h1="00h15" : date1="08/11/2007" : h2="07h20" : date2="08/11/2007"  '  heures de nuit = 05h45
'---------------------------------------------
'exemple5: h1="20h05" : date1="07/11/2007" : h2="00h15" : date2="08/11/2007"  '  heures de nuit = 02h15
'exemple6: h1="20h05" : date1="07/11/2007" : h2="06h15" : date2="08/11/2007"  '  heures de nuit = 08h00
'exemple7: h1="23h30" : date1="07/11/2007" : h2="05h20" : date2="08/11/2007"  '  heures de nuit = 05h50
'---------------------------------------------
Option Explicit
Dim h1, date1,h2, date2, DateDebut, DateFin, Diff
 
h1="23h30" : date1="07/11/2007" : h2="05h20" : date2="08/11/2007"

DateDebut =  CDate(date1 & " " & Replace(LCase(h1),"h",":"))
DateFin   =  CDate(date2 & " " & Replace(LCase(h2),"h",":"))
Diff =  DateDiff("n",DateDebut,DateFin)

Msgbox "DateFin  : " & DateFin &vbCrLf& "DateDeb : " & DateDebut &vbCrLf&vbCrLf& _
            Replace(VerifHeuresNuit(DateDebut, DateFin, Diff),":","h"),, _
            "Heures de nuit comprises entre 22h et 06h"

Function VerifHeuresNuit(DateDebut, DateFin, Diff)
'DateFin - DateDebut limitée à 15h00
If Diff > 0 And Diff < 900 Then
   'Comparaison date1 et date2
   Select Case CBool(FormatDateTime(DateDebut, vbShortDate) = FormatDateTime(DateFin, vbShortDate))
          Case True
               'date1 = date2               If Hour(DateDebut) >6 And Hour(DateFin)< 22 Then                  VerifHeuresNuit "Exemple1 aucune heure de nuit"
               ElseIf Hour(DateDebut) < 22 And Hour(DateFin) >= 22 Then                        VerifHeuresNuit "Exemple2 " & _
                                                    FormatDateTime(TimeSerial(Hour(DateFin) - 22, Minute(DateFin), 0),vbShortTime)
               ElseIf (Hour(DateDebut) >= 22 And Hour(DateFin) >= 22) Or _
                        (Hour(DateDebut) >= 0 And Hour(DateFin) < 6) Then                        VerifHeuresNuit "Exemple3 " & _
                                                    FormatDateTime(TimeSerial(0, 0 + Diff, 0), vbShortTime)
               ElseIf Hour(DateDebut) >= 0 And Hour(DateFin) >= 6 Then  
                        DateFin = FormatDateTime(DateFin, vbShortDate) & Space(1) & TimeSerial(6,0,0)                         VerifHeuresNuit "Exemple4 " & _
                                                    FormatDateTime(TimeSerial(0, 0 + DateDiff("n",DateDebut, DateFin), 0), vbShortTime)
               End If
               Exit Function
          Case False
               'date1 <> date2
               If Hour(DateDebut) < 22 And Hour(DateFin) < 6 Then                  VerifHeuresNuit "Exemple5 " & _
                                              FormatDateTime(TimeSerial(0, 0 + DateDiff("n",FormatDateTime(DateDebut, vbShortDate) & _
                                              Space(1) & TimeSerial(22,0,0),DateFin), 0), vbShortTime)
               ElseIf Hour(DateDebut) < 22 And Hour(DateFin) >= 6 Then                          VerifHeuresNuit "Exemple6 " & _
                                                   FormatDateTime(TimeSerial(8, 0 , 0), vbShortTime)
               ElseIf Hour(DateFin) < 6 Then                              VerifHeuresNuit "Exemple7 " & _
                                                    FormatDateTime(TimeSerial(0, 0 + DateDiff("n",DateDebut, DateFin), 0), vbShortTime)
               ElseIf Hour(DateFin) > 6 Then 
                        DateFin = FormatDateTime(DateFin, vbShortDate) & Space(1) & TimeSerial(6,0,0)                        VerifHeuresNuit "Exemple8 " & _
                                                    FormatDateTime(TimeSerial(0, 0 + DateDiff("n",DateDebut, DateFin), 0), vbShortTime)         
               End If
               Exit Function
   End Select
End If
VerifHeuresNuit = "dates non conformes"
End Function

jean-marc
3
bricoyeye Messages postés 326 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 avril 2008 2
4 nov. 2007 à 18:11
Salut,

Une solution un peu ouf, mais elle vaut ce qu'elle vaut:

Si heure debut >ou= à 22 et heure fin <ou=à 6
Toutes les heures sont de nuit
Si heure debut<à 22 et heure fin>ou=à 22
HN=Heure fin-22
Si heure debut>= à22 et Heure fin >ou= à6
HN= 6-heure debut
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
4 nov. 2007 à 18:13
Bonsoir,

Je ne vais pas te faire cet exercice, mais me contenter de te guider.

1) les seules notions d'heures de début et de fin ne suffiisent pas. Il faut nécessairement inclure les notions de dates de début et de fin
égalemnt (pense donc à un bourreau de travail restant à son poste plus de 24 heures et tu vas vite comprendre de quoi il retourne)
2) une feuille de papier et un crayon pour y consigner le calcul que tu ferais manuellement (et tout deviendra alors fort simple).
0
winvsmac Messages postés 84 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 14 décembre 2016
8 nov. 2007 à 17:10
un grand merci a jean marc, je ne m'en sortais pas malgré mes brouillons .... pour faire les calculs.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
10 nov. 2007 à 09:48
 Bonjour [auteur/WINVSMAC/1071832.aspx winvsmac] ,

Pour info:
http://www.vbfrance.com/codes/GESTION-HEURES-NUIT-22H-0H-CALCUL-DATES_44648.aspx

jean-marc
0
Rejoignez-nous