Fonction DateDiff : Calcul de l'intervalle en heure:minute

Bonjour,

Comment utilise-t-on, la fonction DateDiff pour calculer l'intervalle en heure entre deux dates?

Le code suivant me renvoie 29/12/1899 dans la variable Duree

La différence entre les deux dates est 1h alors je m'attendais plutot à u résultat comme 1:00:00 par exemple.

Sub test()
Dim Date1 As Date
Dim Date2 As Date
Dim Duree As Date

Date1 = #1/1/2019 11:00:00 PM#
Date2 = #1/1/2019 10:00:00 PM#

Duree = DateDiff("h", Date1, Date2) 

Merci pour votre aide,

Cdt

Bonjour,

Duree = Date1 - Date2

format personnalisé : [h]:mm si mis dans une cellule

eric

Bonjour,

Ca marche effectivement dans ce cas, mais pas dans l'exemple suivant. Ici j'obtient Duree = 30/12/1900 01:00:00.

Je cherche la différence en heure entre ces deux dates.

Sub test()
Dim Date1 As Date
Dim Date2 As Date
Dim Duree As Date

Date1 = #1/1/2019 11:00:00 PM#
Date2 = #1/1/2018 10:00:00 PM#

Duree = Date1 - Date2

Merci,

Cdt

Oui c'est normal, tu as mis Duree As Date.

Pour excel une date est un nombre comme un autre, c'est juste que tu lui dis d'interpréter ça comme une date et il te l'affiche comme telle.

Pour excel (feuille) le jour 0 début du calendrier est le 00/01/1900 (oui, chez MS il y a un 0 janvier, nous on dira 31/12/1899)

Pour VBA le jour 0 est 30/12/1899, ce qui peut t'expliquer un résultat précédent

(oui, un jour de moins que dans excel, mais c'est pas trop grave. A partir du 01/03/1900 ils tombent d'accord sur le jour 61 vu que pour excel le 29/02 existe (à tort, ils ont dû programmer ça un jour de pot de départ et ils étaient fins bourrés).

Une date est un nombre décimal, la partie entière est la date (ou le nombre de jours pour une durée), la partie décimale est une fraction de jour représentant les heures.

0.25=6:00, 0.5=12:00, etc

Il n'y a pas de notion de temps, c'est une date que tu dois interpréter.

1,5 peut donc être :

1,5 jour

1 jour et 12:00

le 31/12/1900 12:00 dans VBA

le 01/01/1900 12:00 dans une cellule

Selon l'interprétation que tu dois en faire et l'endroit où tu le lis

Tu peux finir ton doliprane...

Pour en revenir à ton Duree = 30/12/1900 01:00:00, à toi de l'interpréter selon l'usage que tu as prévu.

Le 30/12/1900 est le jour 365 de son calendrier, ça te fait donc 365 j 01:00

Tu aurais tout aussi bien pu mettre Dim Duree As Double et tu aurais lu 365.041666666672 jours

eric

Bonjour, bonjour Eric,

Sinon tu as :

Sub test()

    Dim Date1 As Date
    Dim Date2 As Date
    Dim Duree As Date

    Date1 = #1/1/2019 11:00:00 PM#
    Date2 = #1/1/2018 10:00:00 PM#

    Duree = Date1 - Date2

    MsgBox CLng(Int(Duree)) * 24 + Hour(Duree)

End Sub

extraction du nombre de jours fois 24 + l'heure se trouvant dans la partie décimale

Bonjour Theze,

CLng(Int(Duree)) * 24 + Hour(Duree), il n'y a pas un os là ?

Ah non, tu donnes le total d'heures...

eric

Bonjour,

La proposition d'Eric marche bien en passant par les Double. Il suffit ensuite de multiplier par 24 pour avoir la durée en heure.

Merci pour ces explications détaillées

Cdt

Rechercher des sujets similaires à "fonction datediff calcul intervalle heure minute"