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

patricktoulon

XLDnaute Barbatruc
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... :)
hoh là la formule n'est pas aussi simple !!!!!
c'est pas différence décanter sous 3 unité qu'il est question ici
reprends la discussion depuis le début et tu va comprendre tout seul ;)

@JNP voila ce que donne ta formule en A1 et la mienne avec ma fonction perso en A2
demo7.gif
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
je l'ai encore un peu amélioré avec le "et " optionel selon le résultat
VB:
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(m Or a, "et ", "") & IIf(j, j & " jour" & IIf(j = 1, "", "s"), ""))
End Function
 

patricktoulon

XLDnaute Barbatruc
bien vu @Modeste geedee
VB:
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(m Or a And j > 0, "et ", "") & IIf(j, j & " jour" & IIf(j = 1, "", "s"), ""))
End Function
 

VIARD

XLDnaute Impliqué
Bonsoir à tous

Si je peux me permettre, vos fonction sont sophistiquées.
Bon tous les chemins mènent à Rome, alors j'y vais de ma fonction.
qui tourne depuis une quinzaines d'années, sans retouche, aujourd'hui je ferais autrement.
pièce jointe.

salutation Jean-Paul
 

Pièces jointes

  • Manip_Âge.xlsm
    26.3 KB · Affichages: 10

patricktoulon

XLDnaute Barbatruc
Bonsoir @VIARD
pareil même punition que @riton00
tu n'accorde pas tu te contente de mettre en parenthèses
et tu ne nettoie pas ton résultat si moins d'un mois
1620944701073.png


ça quand meme du bon quand c'est sophistiqué ;)
VB:
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(m Or a, IIf(j > 0, "et ", ""), "") & IIf(j, j & " jour" & IIf(j = 1, "", "s"), ""))
End Function
d'autant plus que ta fonction est chronophage
pour 4 cellules on voit le curseur d'attente c'est significatif
 

Discussions similaires

Réponses
16
Affichages
588