Date et heure DATEDIFF_AMJ4

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

10/10/2025
mise ajour de la fonction est est doté du multi ReturnMode
toujours la date2 en optional aussi histoire d'avoir l'anniversaire


en dessous 1800 non garantie

la fonction:

exemple d'utilisation en formule :

VB:
Function DATEDIFF_AMJ4$(ByVal dat1 As Date, Optional ByVal dat2 As Date = 0, Optional ReturnMode As String = 0)
    '**************************************
    ' 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
    ' mise à jour 09/102025
    ' suppression de l'argument boolean "Justyear" et remplaement par un variant
    ' pouvant ùodifier le return
    ' an ou mois ou jour ou les trois  en textuelou les trois en array
    '*************************************
    Dim A$, M$, J$, Ax&, Mx&, Jx, 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"")"): Ax = A
    M = Evaluate("=DATEDIF(" & CLng(dat1) & "," & CLng(dat2) & ",""ym"")"): Mx = M
    J = Evaluate("=DATEDIF(" & CLng(dat1) & "," & CLng(dat2) & ",""md"")"): Jx = J
 
    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 ", " "), "")
       Select Case LCase(CStr(ReturnMode))
        Case "a", "1": DATEDIFF_AMJ4 = Ax
        Case "m", "2": DATEDIFF_AMJ4 = Mx
        Case "j", "3": DATEDIFF_AMJ4 = Jx
        Case "amj", "4", "0": DATEDIFF_AMJ4 = Application.Trim(A & M & " " & et & J)
        Case "T", 5: DATEDIFF_AMJ4 = Array(Ax, Mx, Jx)
    End Select
 End Function


Code:
=datediffAMJ4(date1;date2)      différence textuelle
=datediffAMJ4(date1)            anniversaire textuelle  par date2 par defaut
=datediffAMJ4(date1;date2;1)    année   argument (1 ou "a" ou "A")
=datediffAMJ4(date1;date2;2)    les mois   argument (2 ou "m" ou "M")
=datediffAMJ4(date1;date2,3)    les jours   argument (3 ou "j" ou "J")
=datediffAMJ4(date1;date2,4)    différence textuelle  argument (0 ou 4 ou "amj" ou "AMJ" )
=datediffAMJ4(date1;date2,5)    un array des trois datas de date argument (5 ou "t" ou "T") pratique pour le vba
petite démo
1760047154458.png


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:
Bonjour @VIARD
merci pour ces tests
et oui je ne traitre que les date valide yyyy/mm/dd ou dd/mm/yyyy
ce qui est déjà pas mal

ps:un peu humour
celui qui est né en 1789 y viendra pas me casser les noisettes si je me suis trompé hein
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour