Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
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
 
Dernière édition:

riton00

XLDnaute Impliqué
Bonsoir,

Autre formule

Code:
=ENT((AUJOURDHUI()-B4)/365,25)& " ans "&MOIS(AUJOURDHUI()-B4)-1&" mois "&ENT(JOUR(AUJOURDHUI()-B4)/7)&" semaines et "&MOD(JOUR(AUJOURDHUI()-B4);7)&" jours"

Slts
 

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


ç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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…