Microsoft 365 Date de naissance

Scorpio

XLDnaute Impliqué
Bonjour le Forum,
Dans ce classeur, j'ai une formule ancienne commençant par =DateDif,
Mais ce DateDif sauf erreur, n'existe plus, mais alors, par quelle formule je pourrais la remplacer ??
Merci de votre aide
Scorpio à ++++
 

Pièces jointes

  • 103_DateNaissance.xlsx
    23.7 KB · Affichages: 25

Phil69970

XLDnaute Barbatruc

patricktoulon

XLDnaute Barbatruc
en effet sur 2013 elle n'est plus proposée dans les fonctions dates
j'avais pas remarqué vu que j'utilise ma fonction perso
sinon ma fonction perso fonctionne en formule ou en VBA
VB:
'Formule:"=Datediff_AMJ(A2;B2)"
Function Datediff_AMJ$(ByVal dat1, Optional ByVal dat2 = 0)
    Dim a%, m%, j%, dtemp As Date, Erreur$
    If dat2 = 0 Then dat2 = Date
    Erreur = IIf(Not IsDate(dat1), "(1)", ""): Erreur = Erreur & IIf(Not IsDate(dat2), "(2)", ""): Erreur = IIf(Erreur <> "", "Invalid Argmt(" & Erreur & ")", "")
    If Erreur <> "" Then Datediff_AMJ = Erreur: Exit Function
    dat1 = CDate(dat1): dat2 = CDate(dat2)
    If dat1 > dat2 Then dtemp = dat1: dat1 = dat2: dat2 = dtemp
    a = Evaluate("DATEDIF(" & CDbl(dat1) & "," & CDbl(dat2) & ",""y"")")
    m = Evaluate("DATEDIF(" & CDbl(dat1) & "," & CDbl(dat2) & ",""ym"")")
    j = Abs(DateSerial(Year(dat1) + a, Month(dat1) + m, Day(dat1)) - dat2)
    Datediff_AMJ = RTrim(IIf(a, a & " an" & IIf(a = 1, " ", "s "), "") & IIf(m, m & " mois ", "") & IIf(j, j & " jour" & IIf(j = 1, "", "s"), ""))
End Function

Sub test()
    MsgBox Datediff_AMJ("02/02/2020", "25/01/2017")
    MsgBox Datediff_AMJ("25/01/2017", "02/02/2020")
    MsgBox Datediff_AMJ("04/03/1970")
    MsgBox Datediff_AMJ("toto", "titi")
    MsgBox Datediff_AMJ("25/04/2016", "titi")
End Sub
en formule c''est simple
=datedif_AMJ(A1) ' pour un anniversaire
ou différence entre deux dates
=datedif_AMJ(A1;B1)
 

Phil69970

XLDnaute Barbatruc
Le fil

As tu regardé et lus les liens ?

Autrement la fonction excel fonctionne très bien....
1620918892955.png

@Phil69970
 

patricktoulon

XLDnaute Barbatruc
ben non forcement tu cherche a faire des calculs avec une donnée calendaire
il faut bien discéquer la date j m a pour pouvoir faire les calculs
il y a aussi celle de @job75 qui fonctionne très bien aussi moins optionelle mais quand même
VB:
'Auteur @Job75 sur excelsdownloads'
Function AnsMoisJours$(dat1, dat2)
If Not IsDate(dat1) Or Not IsDate(dat2) Then Exit Function
If dat2 < dat1 Then Exit Function
Dim a%, m%, test As Boolean, j%
a = Evaluate("DATEDIF(" & CDbl(dat1) & "," & CDbl(dat2) & ",""y"")")
m = Evaluate("DATEDIF(" & CDbl(dat1) & "," & CDbl(dat2) & ",""ym"")")
test = dat2 < DateSerial(Year(dat2), Month(dat2), Day(dat1)) 'True = -1
j = dat2 - DateSerial(Year(dat2), Month(dat2) + test, Day(dat1))
AnsMoisJours = RTrim(IIf(a, a & " an" & IIf(a = 1, " ", "s "), "") & IIf(m, m & " mois ", "") & IIf(j, j & " jour" & IIf(j = 1, "", "s"), ""))
End Function
pour la formule c'est pareil sauf le nom de la fonction
 

JNP

XLDnaute Barbatruc
Bonjour @JNP
et le reste ??????????????
il est question ici de la différence en année mois et jours
Bonjour @patricktoulon,
Les mois seront donnés par "M" comme Month, les jours par "D" comme Day... Je constatais surtout que cette formule fonctionnait bien toujours avec les bons arguments.
=DATEDIF(DATEVAL("01/01/1900");MAINTENANT();"Y")&" ans ou "&DATEDIF(DATEVAL("01/01/1900");MAINTENANT();"M")&" mois ou "&DATEDIF(DATEVAL("01/01/1900");MAINTENANT();"D")&" jours."
donnera les 3, mais je ne vois pas l'intérêt... :)
 

Scorpio

XLDnaute Impliqué
Sur 365, les "anciennes formules" fonctionnent très bien.
Salut mapomme,
Effectivement cette formule fonctionne sur Office 365
=DATEDIF(B4;AUJOURDHUI();"y") & " an" & SI(DATEDIF(B4;AUJOURDHUI();"y")>1;"s";"") &" " & DATEDIF(B4;AUJOURDHUI();"ym") & " mois" & " " & DATEDIF(B4;AUJOURDHUI();"md") & " jour" & SI(DATEDIF(B4;AUJOURDHUI();"md")>1;"s";"")
Erreur corrigée. ;)
A bientôt
Scorpio
 

Discussions similaires

Statistiques des forums

Discussions
315 126
Messages
2 116 493
Membres
112 764
dernier inscrit
mouezby