patricktoulon
XLDnaute Barbatruc
Bonjour a tous
j'avais fait une fonction "DATEDIFFAMJ" il y a quelque temps pour obtenir la différence entres deux date ans mois et jour
et un demandeur a faite une demande concernant la différence entre deux dates
sauf que lui avait besoins de faire la différence de dates 1 et 2 (entre deux siècles)
et pour couronner le tout avec des dates en dessous l'année 1900
j'ai donc repris ma fonction de base et utilisé une astuce simple
si pour la date la plus ancienne c'est une année divisible par 4 ou 400 je la décale en 2020( fevrier 28/29) sinon je la décale en 1904
j'ai ajouté un argument optional "JustYear" pour me donner uniquement la différence en année
j'ai mis date2 en optional aussi histoire d'avoir l'anniversaire
en dessous 1800 non garantie
la fonction:
exemple d'utilisation en formule :
résultat complet souhaité
juste les années souhaitées
pour un anniversaire résultat complet (ans mois jour),on a besoins uniquement de la date 1
pour un anniversaire juste les "ans",on a besoins uniquement de la date 1 et de l'argument "Justyear" (0 ou 1)
petite démo
l'utilisation en VBA se fait de la même manière
et sauf erreur de ma part elle est compatible All version Excel
j'avais fait une fonction "DATEDIFFAMJ" il y a quelque temps pour obtenir la différence entres deux date ans mois et jour
et un demandeur a faite une demande concernant la différence entre deux dates
sauf que lui avait besoins de faire la différence de dates 1 et 2 (entre deux siècles)
et pour couronner le tout avec des dates en dessous l'année 1900
j'ai donc repris ma fonction de base et utilisé une astuce simple
si pour la date la plus ancienne c'est une année divisible par 4 ou 400 je la décale en 2020( fevrier 28/29) sinon je la décale en 1904
j'ai ajouté un argument optional "JustYear" pour me donner uniquement la différence en année
j'ai mis date2 en optional aussi histoire d'avoir l'anniversaire
en dessous 1800 non garantie
la fonction:
VB:
Function DATEDIFF_AMJ4$(ByVal dat1 As Date, Optional ByVal dat2 As Date = 0, Optional JustYear As Boolean = False)
'**************************************
'fonction DateDiffAMJ V°4
'auteur:patricktoulon sur Exceldownloads
'date de mise en jour V°4:04/07/2021
' mise a jour supplementaire
' ajout de l'argument boolean "JustYear" pour ne récuprérer que les années
'*************************************
Dim A$, M$, J$, Dtemp$, et$, yeardécalée&, y
If dat2 = 0 Then dat2 = Date
If dat1 > dat2 Then Dtemp = dat2: dat2 = dat1: dat1 = Dtemp
If Year(dat1) < 1904 Then If Year(dat1) Mod 4 <> 0 Or Year(dat1) Mod 400 <> 0 Then y = 2020 Else y = 1905
If Year(dat1) < y Then
'on decale la date la plus ancienne (Dat1)à l'année 1904
yeardécalée = Abs((Year(dat1) - y))
dat1 = DateSerial(Year(dat1) + yeardécalée, Month(dat1), Day(dat1))
dat2 = DateSerial(Year(dat2) + yeardécalée, Month(dat2), Day(dat2))
End If
A = Evaluate("=DATEDIF(" & CLng(dat1) & "," & CLng(dat2) & ",""y"")")
M = Evaluate("=DATEDIF(" & CLng(dat1) & "," & CLng(dat2) & ",""ym"")")
J = Evaluate("=DATEDIF(" & CLng(dat1) & "," & CLng(dat2) & ",""md"")")
A = IIf(A = 0, "", IIf(A = 1, A & " an", A & " ans"))
M = IIf(M = 0, "", IIf(M = 1, M & " mois", M & " mois"))
J = IIf(J = 0, "", IIf(J = 1, "1 jour", J & " jours"))
et = IIf(Val(A) > 0 Or Val(M) > 0, IIf(Val(J) > 0, " et ", " "), "")
DATEDIFF_AMJ4 = Application.Trim(A & IIf(Not JustYear, " " & M & " " & et & J, ""))
End Function
exemple d'utilisation en formule :
résultat complet souhaité
Code:
=datediff_amj4(A2;B2)
juste les années souhaitées
Code:
=datediff_amj4(A2;B2;1)
pour un anniversaire résultat complet (ans mois jour),on a besoins uniquement de la date 1
Code:
=datediff_amj4(A2)
pour un anniversaire juste les "ans",on a besoins uniquement de la date 1 et de l'argument "Justyear" (0 ou 1)
Code:
=datediff_amj4(A2;;1)
l'utilisation en VBA se fait de la même manière
et sauf erreur de ma part elle est compatible All version Excel
Dernière édition: