OVH Cloud OVH Cloud

Temps écoulé entre 2 dates

4 réponses
Avatar
Cervolent
J'avais posé une question en avril de cette année concernnat un calcul
permettant de trouver le nombre d'année, mois, jour séparant 2 dates. La
fonction Datedif n'avais pas donnée le résultat escompté à ma demande. Une
personne (dont je ne citerais pas le nom avait même répondu un peu violemment
à mon problème ...) bref
J'ai trouvé ce que je recherche depuis, aussi je tiens à en faire profiter
tout le monde ... C'est beaucoup plus court que ce qui a pu m'être proposé ...

Il s'agit d'une fonction VBA EXCEL à placer dans un module du fichier
perso.xls de façon à s'en servir dans n'importe quel fichier ouvert dans
Excel...

Function TEMPSECOULE(Debut, Fin) As String
Dim ValAnnée As Integer, ValMois As Integer
Dim ValJour As Integer, ValJour1 As Integer, ValJour2 As Integer

ValAnnée = Year(Fin) - Year(Debut)
ValMois = Month(Fin) - Month(Debut)
If ValMois < 0 Then
ValAnnée = ValAnnée - 1
ValMois = ValMois + 12
End If
ValJour1 = Day(Debut)
ValJour2 = Day(Fin)
ValJour = ValJour2 - ValJour1
If ValJour < 0 Then
ValJour = Day(DateSerial(Year(Debut), Month(Debut) + 1, 0)) - ValJour1 +
ValJour2
If ValMois > 0 Then
ValMois = ValMois - 1
Else
ValAnnée = ValAnnée - 1
ValMois = 11
End If
End If
'les tests qui suivent ne servent qu'aux accrords de pluriel !!
If ValAnnée > 1 Then
antexte = " ans "
Else
antexte = " an "
End If
If ValJour > 1 Then
jrtexte = " jours"
Else
jrtexte = " jour"
End If
TEMPSECOULE = ValAnnée & antexte & ValMois & " mois " & ValJour & jrtexte
End Function

4 réponses

Avatar
Jacky
Bonjour
Date de début en a1, date de fin b1
'--------
'Sur une seule ligne

=SI(DATEDIF(A1;B1;"y"); " "&DATEDIF(A1;B1;"y")&"
an"&SI(ABS(ANNEE(B1)-ANNEE(A1))>1;"s ";" ");"")&DATEDIF(A1;B1;"ym")&" mois
"&DATEDIF(A1--(MOD(A1;1)>MOD(MAINTENANT();1));B1;"md")&" jour"&
SI(ABS(JOUR(B1)-JOUR(A1))>1;"s ";" ")&HEURE(MAINTENANT()-A1)&" heure"&
SI(ABS(HEURE(MAINTENANT()-A1))>1;"s ";" ")&MINUTE(MAINTENANT()-A1)&"
minute"& SI(ABS(MINUTE(MAINTENANT()-A1))>1;"s ";"
")&SECONDE(MAINTENANT()-A1)&" seconde"&
SI(ABS(SECONDE(MAINTENANT()-A1))>1;"s ";" ")
'----------
Salutations
JJ

"Cervolent" a écrit dans le message de
news:
J'avais posé une question en avril de cette année concernnat un calcul
permettant de trouver le nombre d'année, mois, jour séparant 2 dates. La
fonction Datedif n'avais pas donnée le résultat escompté à ma demande. Une
personne (dont je ne citerais pas le nom avait même répondu un peu
violemment

à mon problème ...) bref
J'ai trouvé ce que je recherche depuis, aussi je tiens à en faire profiter
tout le monde ... C'est beaucoup plus court que ce qui a pu m'être proposé
...


Il s'agit d'une fonction VBA EXCEL à placer dans un module du fichier
perso.xls de façon à s'en servir dans n'importe quel fichier ouvert dans
Excel...

Function TEMPSECOULE(Debut, Fin) As String
Dim ValAnnée As Integer, ValMois As Integer
Dim ValJour As Integer, ValJour1 As Integer, ValJour2 As Integer

ValAnnée = Year(Fin) - Year(Debut)
ValMois = Month(Fin) - Month(Debut)
If ValMois < 0 Then
ValAnnée = ValAnnée - 1
ValMois = ValMois + 12
End If
ValJour1 = Day(Debut)
ValJour2 = Day(Fin)
ValJour = ValJour2 - ValJour1
If ValJour < 0 Then
ValJour = Day(DateSerial(Year(Debut), Month(Debut) + 1, 0)) - ValJour1
+

ValJour2
If ValMois > 0 Then
ValMois = ValMois - 1
Else
ValAnnée = ValAnnée - 1
ValMois = 11
End If
End If
'les tests qui suivent ne servent qu'aux accrords de pluriel !!
If ValAnnée > 1 Then
antexte = " ans "
Else
antexte = " an "
End If
If ValJour > 1 Then
jrtexte = " jours"
Else
jrtexte = " jour"
End If
TEMPSECOULE = ValAnnée & antexte & ValMois & " mois " & ValJour & jrtexte
End Function


Avatar
Cervolent
C'est bon Jacky mais je me vois mal recréer cette formule à chaque fois
qu'une personne me demande de calculer pour son établissement les écarts de
dates d'entrée en service et fin de service. (nous avons environ 150
etablissements différents.
Je reste sur ma méthode ... j'espère que tu m'en voudra pas ;-))



Bonjour
Date de début en a1, date de fin b1
'--------
'Sur une seule ligne

=SI(DATEDIF(A1;B1;"y"); " "&DATEDIF(A1;B1;"y")&"
an"&SI(ABS(ANNEE(B1)-ANNEE(A1))>1;"s ";" ");"")&DATEDIF(A1;B1;"ym")&" mois
"&DATEDIF(A1--(MOD(A1;1)>MOD(MAINTENANT();1));B1;"md")&" jour"&
SI(ABS(JOUR(B1)-JOUR(A1))>1;"s ";" ")&HEURE(MAINTENANT()-A1)&" heure"&
SI(ABS(HEURE(MAINTENANT()-A1))>1;"s ";" ")&MINUTE(MAINTENANT()-A1)&"
minute"& SI(ABS(MINUTE(MAINTENANT()-A1))>1;"s ";"
")&SECONDE(MAINTENANT()-A1)&" seconde"&
SI(ABS(SECONDE(MAINTENANT()-A1))>1;"s ";" ")
'----------
Salutations
JJ

"Cervolent" a écrit dans le message de
news:
J'avais posé une question en avril de cette année concernnat un calcul
permettant de trouver le nombre d'année, mois, jour séparant 2 dates. La
fonction Datedif n'avais pas donnée le résultat escompté à ma demande. Une
personne (dont je ne citerais pas le nom avait même répondu un peu
violemment

à mon problème ...) bref
J'ai trouvé ce que je recherche depuis, aussi je tiens à en faire profiter
tout le monde ... C'est beaucoup plus court que ce qui a pu m'être proposé
....


Il s'agit d'une fonction VBA EXCEL à placer dans un module du fichier
perso.xls de façon à s'en servir dans n'importe quel fichier ouvert dans
Excel...

Function TEMPSECOULE(Debut, Fin) As String
Dim ValAnnée As Integer, ValMois As Integer
Dim ValJour As Integer, ValJour1 As Integer, ValJour2 As Integer

ValAnnée = Year(Fin) - Year(Debut)
ValMois = Month(Fin) - Month(Debut)
If ValMois < 0 Then
ValAnnée = ValAnnée - 1
ValMois = ValMois + 12
End If
ValJour1 = Day(Debut)
ValJour2 = Day(Fin)
ValJour = ValJour2 - ValJour1
If ValJour < 0 Then
ValJour = Day(DateSerial(Year(Debut), Month(Debut) + 1, 0)) - ValJour1
+

ValJour2
If ValMois > 0 Then
ValMois = ValMois - 1
Else
ValAnnée = ValAnnée - 1
ValMois = 11
End If
End If
'les tests qui suivent ne servent qu'aux accrords de pluriel !!
If ValAnnée > 1 Then
antexte = " ans "
Else
antexte = " an "
End If
If ValJour > 1 Then
jrtexte = " jours"
Else
jrtexte = " jour"
End If
TEMPSECOULE = ValAnnée & antexte & ValMois & " mois " & ValJour & jrtexte
End Function







Avatar
Jacky
Re..
... j'espère que tu m'en voudra pas ;-))
Si peu, si peu...
;o))
JJ

"Cervolent" a écrit dans le message de
news:
C'est bon Jacky mais je me vois mal recréer cette formule à chaque fois
qu'une personne me demande de calculer pour son établissement les écarts
de

dates d'entrée en service et fin de service. (nous avons environ 150
etablissements différents.
Je reste sur ma méthode ... j'espère que tu m'en voudra pas ;-))



Bonjour
Date de début en a1, date de fin b1
'--------
'Sur une seule ligne

=SI(DATEDIF(A1;B1;"y"); " "&DATEDIF(A1;B1;"y")&"
an"&SI(ABS(ANNEE(B1)-ANNEE(A1))>1;"s ";" ");"")&DATEDIF(A1;B1;"ym")&"
mois


"&DATEDIF(A1--(MOD(A1;1)>MOD(MAINTENANT();1));B1;"md")&" jour"&
SI(ABS(JOUR(B1)-JOUR(A1))>1;"s ";" ")&HEURE(MAINTENANT()-A1)&" heure"&
SI(ABS(HEURE(MAINTENANT()-A1))>1;"s ";" ")&MINUTE(MAINTENANT()-A1)&"
minute"& SI(ABS(MINUTE(MAINTENANT()-A1))>1;"s ";"
")&SECONDE(MAINTENANT()-A1)&" seconde"&
SI(ABS(SECONDE(MAINTENANT()-A1))>1;"s ";" ")
'----------
Salutations
JJ

"Cervolent" a écrit dans le
message de


news:
J'avais posé une question en avril de cette année concernnat un calcul
permettant de trouver le nombre d'année, mois, jour séparant 2 dates.
La



fonction Datedif n'avais pas donnée le résultat escompté à ma demande.
Une



personne (dont je ne citerais pas le nom avait même répondu un peu
violemment

à mon problème ...) bref
J'ai trouvé ce que je recherche depuis, aussi je tiens à en faire
profiter



tout le monde ... C'est beaucoup plus court que ce qui a pu m'être
proposé



....

Il s'agit d'une fonction VBA EXCEL à placer dans un module du fichier
perso.xls de façon à s'en servir dans n'importe quel fichier ouvert
dans



Excel...

Function TEMPSECOULE(Debut, Fin) As String
Dim ValAnnée As Integer, ValMois As Integer
Dim ValJour As Integer, ValJour1 As Integer, ValJour2 As Integer

ValAnnée = Year(Fin) - Year(Debut)
ValMois = Month(Fin) - Month(Debut)
If ValMois < 0 Then
ValAnnée = ValAnnée - 1
ValMois = ValMois + 12
End If
ValJour1 = Day(Debut)
ValJour2 = Day(Fin)
ValJour = ValJour2 - ValJour1
If ValJour < 0 Then
ValJour = Day(DateSerial(Year(Debut), Month(Debut) + 1, 0)) -
ValJour1



+
ValJour2
If ValMois > 0 Then
ValMois = ValMois - 1
Else
ValAnnée = ValAnnée - 1
ValMois = 11
End If
End If
'les tests qui suivent ne servent qu'aux accrords de pluriel !!
If ValAnnée > 1 Then
antexte = " ans "
Else
antexte = " an "
End If
If ValJour > 1 Then
jrtexte = " jours"
Else
jrtexte = " jour"
End If
TEMPSECOULE = ValAnnée & antexte & ValMois & " mois " & ValJour &
jrtexte



End Function









Avatar
AV
Une formule (LL) :

=SUPPRESPACE(SI(Fin-Déb;TEXTE(DATEDIF(Déb;Fin;"y");"[>1]0"" ans"";[>]""1
an"";")&TEXTE(DATEDIF(Déb;Fin;"ym");"[>] 0"" mois "";
")&TEXTE(DATEDIF(Déb;Fin;"md");"[>1]0"" jours"";[>]""1 jour"";");"0 jour"))

Une fonction perso issue d'icelle ?
Function DATDIF(Déb As Date, Fin As Date)
DATDIF = Evaluate("trim(if(" & Fin * 1 & "-" & Déb * 1 & ",text(datedif(" & Déb
* 1 & "," & Fin * 1 & ",""y""),""[>1]0"""" ans"""";[>]""""1
an"""";"")&text(datedif(" & Déb * 1 & "," & Fin * 1 & ",""ym""),""[>] 0"""" mois
""""; "")&text(datedif(" & Déb * 1 & "," & Fin * 1 & ",""md""),""[>1]0""""
jours"""";[>]""""1 jour"""";""),""0 jour""))")
End Function

AV