Microsoft 365 Date de naissance

  • Initiateur de la discussion Initiateur de la discussion Scorpio
  • Date de début Date de début

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 !

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

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:
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
 
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
 
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

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
 
- 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

Discussions similaires

  • Résolu(e)
Microsoft 365 DateDif()
Réponses
5
Affichages
170
Réponses
3
Affichages
151
Réponses
6
Affichages
283
Réponses
16
Affichages
1 K
Retour