Userform - difference between two dates

Bonjour,

dans un formulaire j'ai 2 boites text avec 2 dates+times comme suit

start.value = 11/01/2016 06:54

stop_time.value = 12/01/2016 20:24

je voudrais que dans ma boite "gross dem" il m'apparaisse la difference entre ces 2 dates exprimees en "[hh]:mm:ss"le resultat devant etre = 37:30:00

voice le code format de la boite GROSS_dem ainsi que de la boite "stop" qui des qu'elle est updatee me calcule le Gross dem

Me.GROSS_DEM.Text = Format(GROSS_DEM.Value, "[hh]:mm:ss")

'CALCUL GROSS DEM
Dim GROSS_DEM As Integer

If CARGO2016.STOP_TIME.Value <> "" And CARGO2016.START.Value <> "" Then

CARGO2016.GROSS_DEM.Value = DateDiff("H", CDate(CARGO2016.START.Value), CDate(CARGO2016.STOP_TIME.Value))

Else: CARGO2016.GROSS_DEM.Value = ""
End If
Me.STOP_TIME.Value = Format(STOP_TIME.Value, "dd/mm/yyyy hh:mm")
End Sub

pour l'instant le resultat apparaissant dans la boite "gross dem" est :02:00

quelqu'un pourrait il me dire si c la formule de calcul qui est fausse ou comment modifier le format pour faire apparaitre le bon resultat c a dire 37:30:00

merci

Bonjour,

une solution trouvée sur

    Dim sngMinutes, sngHeures, sngJours As Single
    Dim intSecondes, intMinutes As Integer
    Dim lngFullHeures, lngFullMinutes, lngSecondes As Long
    lngSecondes = DateDiff("s", CDate(CARGO2016.Start.Value), CDate(CARGO2016.STOP_TIME.Value))
    sngMinutes = lngSecondes / 60
    sngHeures = sngMinutes / 60
    sngJours = sngHeures / 24
    lngFullMinutes = Int(sngMinutes)
    lngFullHeures = Int(sngHeures)
    intSecondes = CInt((sngMinutes - lngFullMinutes) * 60)
    intMinutes = Int((sngHeures - lngFullHeures) * 60)
    CARGO2016.GROSS_DEM.Value = lngFullHeures & ":" & Format(intMinutes, "00") & ":" & Format(intSecondes, "00")

Merci, en cherchant un peu j'avais trouve quelque chose du meme genre et j'arrivais a avoir 38:30:0...avec le code ci-dessous

'CALCUL GROSS DEM

If CARGO2016.STOP_TIME.Value <> "" And CARGO2016.START.Value <> "" Then

CARGO2016.GROSS_DEM.Value = CStr((DateDiff("H", CDate(CARGO2016.START.Value), CDate(CARGO2016.STOP_TIME.Value)) Mod 60) & ":" & CStr(DateDiff("S", CDate(CARGO2016.START.Value), CDate(CARGO2016.STOP_TIME.Value)) \ 60) Mod 60) & ":" & CStr(DateDiff("S", CDate(CARGO2016.START.Value), CDate(CARGO2016.STOP_TIME.Value)) Mod 60)

Else: CARGO2016.GROSS_DEM.Value = ""
End If

en tout cas merci beaucoup de ton aide

Petite question subsidiaire

toujours dans mon formulaire, je dois aussi faire la difference entre 2 temps (hh:mm:ss) comme suit (gross_dem, et shifting etant des textes boxes calculees d'apres ta formule)

gross_dem = 37:30:00

shifting = 08:36:00

resultat = 28:54:00

est ce que je peux utilizer la meme formule en l'adaptant (je presume en remplacant diffdate() par la simple formule (gross dem - shifting)? tous lers resultants devant apparaitre sous la meme forme ie hh:mm:ss

Si tu dois utiliser plusieurs fois le codage, il vaudrait mieux le placer dans une fonction :

Function convertir(lngSecondes As Long) As String
    Dim sngMinutes, sngHeures, sngJours As Single
    Dim intSecondes, intMinutes As Integer
    Dim lngFullHeures, lngFullMinutes As Long
    sngMinutes = lngSecondes / 60
    sngHeures = sngMinutes / 60
    sngJours = sngHeures / 24
    lngFullMinutes = Int(sngMinutes)
    lngFullHeures = Int(sngHeures)
    intSecondes = CInt((sngMinutes - lngFullMinutes) * 60)
    intMinutes = Int((sngHeures - lngFullHeures) * 60)
    convertir = lngFullHeures & ":" & Format(intMinutes, "00") & ":" & Format(intSecondes, "00")
End Function

Et il faudrait stocker le nombre de secondes correspondant à chaque codage que tu souhaites obtenir :

Dim secGross_Dem, secShifting, SecResultat As Long
    'Nb de secondes pour GROSS_DEM
    secGross_Dem = DateDiff("s", CDate(CARGO2016.Start.Value), CDate(CARGO2016.STOP_TIME.Value))
    'Nb de secondes pour shifting
    secShifting=DateDiff("s", ..., ...)
    'Nb de secondes pour le nouveau résultat
    SecResultat = secGross_Dem - secShifting
    'Les différentes valeurs souhaitées
    CARGO2016.GROSS_DEM.Value = convertir(secGross_Dem)
    CARGO2016.Shifting.Value = convertir(secShifting)
    CARGO2016.Resultat.Value = convertir(SecResultat)

dans la 1ere partie du code tu dis sngMinutes = lngSecondes / 60

mais tu ne defines pas lngSecondes? ou je dois le prendre du 1er code?

Il est passé en paramètre de la fonction.

Function convertir(lngSecondes As Long) As String

ok je vais essayer

Ok apres 2 jours intense j'ai reussi a adapte les codes pour tous mes calculs.

J'ai encore une petite question sur le display d'une textbox.

J'ai une texte box 'time allowed' que j'utilise dans differents codes pour calculer une difference entre le temps net utilise et cette boite.

cette boite est mise a jour manuellement par ex: 129600 qui correspond 36 hrs (36:00:00)

mes calculs marchent bien sous cette forme. Je voudrais que cette boite garde 129600 comme montant pour mes formules mais me montre a l'ecran 36:00:00...............si je la convertis d''apres ton code mes calculs ne marchent plus......

dans quel evenement dois je programmer le format juste pour une histoire d'affichage....?

je dois dire que j'ai bcp de soucis en regle generale entre le formulaire (afterupdate ou change)et/ou les modules

merci encore de ton aide

Tu pourrais afficher la chaîne ( le résultat de la fonction) dans un label à côté de ta textbox. Ou utiliser un bouton pour modifier la valeur de ta textbox une fois qu'elle aurait été renseignée, après l'avoir sauvegardée dans une variable que tu utiliserais pour les calculs.

Rechercher des sujets similaires à "userform difference between two dates"