OVH Cloud OVH Cloud

DateDiff("??"date1;date2)

5 réponses
Avatar
Pierre Durand
comment faire pour utiliser cette fonction pour qu'elle puissent
retourner

Les heures minutes et secondes

Merci :)


--
Pierre Durand
pdurand@informaticien.net
http://www.geocities.com/cymonpir/
Surfer vous êtes payez : http://www.mediabarre.com/cgi-bin/mba?66852
ou aller sur www.alladvantage.com mon numéro de membre est le tbo-727
(encore plus payant !!! )

5 réponses

Avatar
Raymond [mvp]
Bonsoir.

ce n'est pas aussi simple qu'on le dit.
tu peux utiliser une fonction que tu places dans un module standard à
laquelle tu passes les paramètres. la fonction s'appelle intervalle, elle
est à la fin de ce post. dans ton formulaire tu fais par exemple:
Private Sub Commande4_Click()
MsgBox Intervalle(#1/1/2004#, Now, J_H_M_S)
End Sub
le 3e paramètre indique le format que tu désires : J, J_H, J_H_M,
J_H_M_S

fonction à inclure dans le module:

Option Compare Database
Option Explicit
Public Enum FormatIntervalle
J
J_H
J_H_M
J_H_M_S
End Enum
Dim Date_début As Date
Dim Date_fin As Date
Dim Fmt As FormatIntervalle

Public Function Intervalle(Date_début As Date _
, Date_fin As Date _
, Fmt As FormatIntervalle) As String
On Error GoTo Err_Func
Dim Jours As Long, Heures As Long, Minutes As Long, Secondes As Long
Secondes = DateDiff("s", Date_début, Date_fin)
Jours = Int(Secondes / 86400)
Secondes = Secondes - (Jours * 86400)
Heures = Int(Secondes / 3600)
Secondes = Secondes - (Heures * 3600)
Minutes = Int(Secondes / 60)
Secondes = Secondes - (Minutes * 60)
Select Case Fmt
Case J
Intervalle = Format(Jours, "###0")
Case J_H
Intervalle = Format(Jours, "###0") & ":" & Format(Heures, "00")
Case J_H_M
Intervalle = Format(Jours, "###0") & ":" & Format(Heures, "00") & ":" &
Format(Minutes, "00")
Case J_H_M_S
Intervalle = Format(Jours, "###0") & ":" & Format(Heures, "00") & ":" &
Format(Minutes, "00") & ":" & Format(Secondes, "00")
Case Else
Intervalle = "#Erreur"
End Select
Exit Function
Err_Func:
Intervalle = "#Erreur"
End Function

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Pierre Durand" a écrit dans le message de
news:

comment faire pour utiliser cette fonction pour qu'elle puissent
retourner

Les heures minutes et secondes

Merci :)


--
Pierre Durand

http://www.geocities.com/cymonpir/
Surfer vous êtes payez : http://www.mediabarre.com/cgi-bin/mba?66852
ou aller sur www.alladvantage.com mon numéro de membre est le tbo-727
(encore plus payant !!! )




Avatar
Maxence HUBICHE
Bonsoir

Raymond, petite question ...
Pourquoi n'utilises-tu pas format directement sur la date ?

Format([LaDate],"hhnnss")
Donnera le résultat en HeuresMinutesSecondes

Non ?

--
----------------------------------------------------------------
Maxence HUBICHE
Formateur et développeur indépendant
Modérateur/rédacteur sur http://www.developpez.com
Site perso : http://perso.club-internet.fr/mhubiche (en cours de
construction)
"Raymond [mvp]" a écrit dans le message de
news:
Bonsoir.

ce n'est pas aussi simple qu'on le dit.
tu peux utiliser une fonction que tu places dans un module standard à
laquelle tu passes les paramètres. la fonction s'appelle intervalle, elle
est à la fin de ce post. dans ton formulaire tu fais par exemple:
Private Sub Commande4_Click()
MsgBox Intervalle(#1/1/2004#, Now, J_H_M_S)
End Sub
le 3e paramètre indique le format que tu désires : J, J_H, J_H_M,
J_H_M_S

fonction à inclure dans le module:

Option Compare Database
Option Explicit
Public Enum FormatIntervalle
J
J_H
J_H_M
J_H_M_S
End Enum
Dim Date_début As Date
Dim Date_fin As Date
Dim Fmt As FormatIntervalle

Public Function Intervalle(Date_début As Date _
, Date_fin As Date _
, Fmt As FormatIntervalle) As String
On Error GoTo Err_Func
Dim Jours As Long, Heures As Long, Minutes As Long, Secondes As Long
Secondes = DateDiff("s", Date_début, Date_fin)
Jours = Int(Secondes / 86400)
Secondes = Secondes - (Jours * 86400)
Heures = Int(Secondes / 3600)
Secondes = Secondes - (Heures * 3600)
Minutes = Int(Secondes / 60)
Secondes = Secondes - (Minutes * 60)
Select Case Fmt
Case J
Intervalle = Format(Jours, "###0")
Case J_H
Intervalle = Format(Jours, "###0") & ":" & Format(Heures, "00")
Case J_H_M
Intervalle = Format(Jours, "###0") & ":" & Format(Heures, "00") & ":"
&

Format(Minutes, "00")
Case J_H_M_S
Intervalle = Format(Jours, "###0") & ":" & Format(Heures, "00") & ":"
&

Format(Minutes, "00") & ":" & Format(Secondes, "00")
Case Else
Intervalle = "#Erreur"
End Select
Exit Function
Err_Func:
Intervalle = "#Erreur"
End Function

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Pierre Durand" a écrit dans le message de
news:

comment faire pour utiliser cette fonction pour qu'elle puissent
retourner

Les heures minutes et secondes

Merci :)


--
Pierre Durand

http://www.geocities.com/cymonpir/
Surfer vous êtes payez : http://www.mediabarre.com/cgi-bin/mba?66852
ou aller sur www.alladvantage.com mon numéro de membre est le tbo-727
(encore plus payant !!! )









Avatar
Maxence HUBICHE
PS à mon post précédent ...
Sous-entendu que [LaDate] est tout simplement égal à DateFin - DateDebut
.... bien sûr !

;)

--
----------------------------------------------------------------
Maxence HUBICHE
Formateur et développeur indépendant
Modérateur/rédacteur sur http://www.developpez.com
Site perso : http://perso.club-internet.fr/mhubiche (en cours de
construction)
"Raymond [mvp]" a écrit dans le message de
news:
Bonsoir.

ce n'est pas aussi simple qu'on le dit.
tu peux utiliser une fonction que tu places dans un module standard à
laquelle tu passes les paramètres. la fonction s'appelle intervalle, elle
est à la fin de ce post. dans ton formulaire tu fais par exemple:
Private Sub Commande4_Click()
MsgBox Intervalle(#1/1/2004#, Now, J_H_M_S)
End Sub
le 3e paramètre indique le format que tu désires : J, J_H, J_H_M,
J_H_M_S

fonction à inclure dans le module:

Option Compare Database
Option Explicit
Public Enum FormatIntervalle
J
J_H
J_H_M
J_H_M_S
End Enum
Dim Date_début As Date
Dim Date_fin As Date
Dim Fmt As FormatIntervalle

Public Function Intervalle(Date_début As Date _
, Date_fin As Date _
, Fmt As FormatIntervalle) As String
On Error GoTo Err_Func
Dim Jours As Long, Heures As Long, Minutes As Long, Secondes As Long
Secondes = DateDiff("s", Date_début, Date_fin)
Jours = Int(Secondes / 86400)
Secondes = Secondes - (Jours * 86400)
Heures = Int(Secondes / 3600)
Secondes = Secondes - (Heures * 3600)
Minutes = Int(Secondes / 60)
Secondes = Secondes - (Minutes * 60)
Select Case Fmt
Case J
Intervalle = Format(Jours, "###0")
Case J_H
Intervalle = Format(Jours, "###0") & ":" & Format(Heures, "00")
Case J_H_M
Intervalle = Format(Jours, "###0") & ":" & Format(Heures, "00") & ":"
&

Format(Minutes, "00")
Case J_H_M_S
Intervalle = Format(Jours, "###0") & ":" & Format(Heures, "00") & ":"
&

Format(Minutes, "00") & ":" & Format(Secondes, "00")
Case Else
Intervalle = "#Erreur"
End Select
Exit Function
Err_Func:
Intervalle = "#Erreur"
End Function

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Pierre Durand" a écrit dans le message de
news:

comment faire pour utiliser cette fonction pour qu'elle puissent
retourner

Les heures minutes et secondes

Merci :)


--
Pierre Durand

http://www.geocities.com/cymonpir/
Surfer vous êtes payez : http://www.mediabarre.com/cgi-bin/mba?66852
ou aller sur www.alladvantage.com mon numéro de membre est le tbo-727
(encore plus payant !!! )









Avatar
Raymond [mvp]
Bonjour Maxence.

tout simplement que la fonction doit retourner des valeurs bonnes.
fais cet essai :
MsgBox Format(Now() - #1/1/2004#, "dd hh:nn:ss")
MsgBox Intervalle(#1/1/2004#, Now, J_H_M_S)

la premiere fonction affiche : 2 11:23:25
la deuxième fonction affiche : 3 11:23:25

par défaut je prend 00:00:00 du jour de départ sinon l'heure indiquée alors
que la première fonction débute le jour suivant à l'heure indiquée.

si tu indiques:
MsgBox Format(Now() - #1/1/2004 1:00:00 AM#, "dd hh:nn:ss")
MsgBox Intervalle(#1/1/2004 1:00:00 AM#, Now, J_H_M_S)
entre le 1er janvier 2004 01:00:00 et maintenant, il y a eu 3 jours et 10 h
alors que la 1ere fonction ne trouve que 2 jours et 10h.
on peut bien sûr rajouter 1 jour sans être sûr de la portabilité dans le
temps, mais expliquer à un débutant qu'un intervalle ne démarre que le jour
suivant et que access ne sait pas le calculer n'est pas facile.
d'autre part la fonction est conçue pour pouvoir récupérer toutes les
valeurs en remplaçant les dim par des public et en les déplaçant dans les
déclaratives. ce type de conversion n'est pas fait en général pour un simple
affichage mais pour des calculs ultérieurs, notamment séparer les jhms dans
des contrôles distincts. c'était le but de la fonction à l'origine. Bien
entendu celui qui n'a besoin que d'un seul affichage peut très bien se
satisfaire d'une simple soustraction. une si longue explication pour une
seule ligne de code..........
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Maxence HUBICHE" a écrit dans le message de
news:
PS à mon post précédent ...
Sous-entendu que [LaDate] est tout simplement égal à DateFin - DateDebut
.... bien sûr !


Avatar
Maxence HUBICHE
voui voui voui voui voui ...
Je comprends.
Une simple histoire de poteaux et d'intervalles en somme...
OK.
merci pour l'explication :)
d'un autre côté, comme le système de dates est purement numérique, le coup
du +1 pour rattraper l'intervalle ne me parait pas désastreux.
Cependant, l'explication sur l'origine de l'utilité de la fonction ets
convaincante :D

Merci encore, et à plus. ;)

--
----------------------------------------------------------------
Maxence HUBICHE
Formateur et développeur indépendant
Modérateur/rédacteur sur http://www.developpez.com
Site perso : http://perso.club-internet.fr/mhubiche (en cours de
construction)
"Raymond [mvp]" a écrit dans le message de
news: OCZHZ#
Bonjour Maxence.

tout simplement que la fonction doit retourner des valeurs bonnes.
fais cet essai :
MsgBox Format(Now() - #1/1/2004#, "dd hh:nn:ss")
MsgBox Intervalle(#1/1/2004#, Now, J_H_M_S)

la premiere fonction affiche : 2 11:23:25
la deuxième fonction affiche : 3 11:23:25

par défaut je prend 00:00:00 du jour de départ sinon l'heure indiquée
alors

que la première fonction débute le jour suivant à l'heure indiquée.

si tu indiques:
MsgBox Format(Now() - #1/1/2004 1:00:00 AM#, "dd hh:nn:ss")
MsgBox Intervalle(#1/1/2004 1:00:00 AM#, Now, J_H_M_S)
entre le 1er janvier 2004 01:00:00 et maintenant, il y a eu 3 jours et 10
h

alors que la 1ere fonction ne trouve que 2 jours et 10h.
on peut bien sûr rajouter 1 jour sans être sûr de la portabilité dans le
temps, mais expliquer à un débutant qu'un intervalle ne démarre que le
jour

suivant et que access ne sait pas le calculer n'est pas facile.
d'autre part la fonction est conçue pour pouvoir récupérer toutes les
valeurs en remplaçant les dim par des public et en les déplaçant dans les
déclaratives. ce type de conversion n'est pas fait en général pour un
simple

affichage mais pour des calculs ultérieurs, notamment séparer les jhms
dans

des contrôles distincts. c'était le but de la fonction à l'origine. Bien
entendu celui qui n'a besoin que d'un seul affichage peut très bien se
satisfaire d'une simple soustraction. une si longue explication pour une
seule ligne de code..........
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Maxence HUBICHE" a écrit dans le message de
news:
PS à mon post précédent ...
Sous-entendu que [LaDate] est tout simplement égal à DateFin - DateDebut
.... bien sûr !