Autres inclure des si dans une formule datedif

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

je voudrais inclure des si dans une formule datedif
en effet j'ai une formule qui peut me donner comme résultat
0 ans 0 mois 15 jours

je voudrais inclure des si si les valeurs an et mois et jour donne zero
l'exemple précédemment donné devrait donner par exemple simplement 15 jours
et pour parfaire la chose je voudrais aussi des si >1 mettre les "s"

la formule
=DATEDIF(A1;B1;"y")&" Ans "
&DATEDIF(A1;B1;"ym")&" mois "
&DATEDIF(DATE(ANNEE(B1);MOIS(B1);JOUR(A1));B1;"d")&" jours"
 
Dernière édition:
bon j'espere ne pas encore tomber sur des dates qui vont planter

la formule sans name
=SUPPRESPACE(REPT(DATEDIF(Feuil1!A2;Feuil1!B2;"y")&" an"&SI(DATEDIF(Feuil1!A2;Feuil1!B2;"y")=1;" ";"s ");DATEDIF(Feuil1!A2;Feuil1!B2;"y")>0)&REPT(DATEDIF(Feuil1!A2;Feuil1!B2;"ym")&" mois ";DATEDIF(Feuil1!A2;Feuil1!B2;"ym")>0)&REPT(Feuil1!B2-DATE(ANNEE(Feuil1!B2);MOIS(Feuil1!B2)-(Feuil1!B2<DATE(ANNEE(Feuil1!B2);MOIS(Feuil1!B2);JOUR(Feuil1!A2)));JOUR(Feuil1!A2))&" jour"&REPT("s";Feuil1!B2-DATE(ANNEE(Feuil1!B2);MOIS(Feuil1!B2)-(Feuil1!B2<DATE(ANNEE(Feuil1!B2);MOIS(Feuil1!B2);JOUR(Feuil1!A2)));JOUR(Feuil1!A2))>1);Feuil1!B2-DATE(ANNEE(Feuil1!B2);MOIS(Feuil1!B2)-(Feuil1!B2<DATE(ANNEE(Feuil1!B2);MOIS(Feuil1!B2);JOUR(Feuil1!A2)));JOUR(Feuil1!A2))>0))

pour l'ecrire car ca devient difficile de voir une erreur vu la longueur

VB:
Sub test()
    f = "=SUPPRESPACE(REPT(fan&"" an""&SI(fan=1;"" "";""s "");fan>0)&REPT(fmois&"" mois "";fmois>0)&REPT(fjour&"" jour""&REPT(""s"";fjour>1);fjour>0))"
    fan = "DATEDIF(Feuil1!A2;Feuil1!B2;""y"")"
    fmois = "DATEDIF(Feuil1!A2;Feuil1!B2;""ym"")"
    fjour = "Feuil1!B2-DATE(ANNEE(Feuil1!B2);MOIS(Feuil1!B2)-(Feuil1!B2<DATE(ANNEE(Feuil1!B2);MOIS(Feuil1!B2);JOUR(Feuil1!A2)));JOUR(Feuil1!A2))"

    f = Replace(Replace(Replace(f, "fan", fan), "fmois", fmois), "fjour", fjour)
    Debug.Print f
End Sub
 
En VBA cette fonction semble bien convenir :
VB:
Function AnsMoisJours$(dat1, dat2)
If Not IsDate(dat1) Or Not IsDate(dat2) Then Exit Function
If dat2 < dat1 Then Exit Function
Dim test As Boolean, a%, m%, j%
test = dat2 < DateSerial(Year(dat2), Month(dat2), Day(dat1)) 'True = -1
a = Year(dat2) - Year(dat1) + test
m = Month(dat2) - Month(dat1) + test
If m < 0 Then m = m + 12
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
 

Pièces jointes

Dernière édition:
Bon dans ce fichier (2) je reprends exactement en VBA ce que j'ai fait par formule :
VB:
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
 

Pièces jointes

Bonjour®
Bon dans ce fichier (2) je reprends exactement en VBA ce que j'ai fait par formule :
les durées de mois et années n'étant pas des constantes mathématiques,
les habitués savent ici ce que je pense de la représentation d'un âge en année mois jours😎
[MODE 😵 ]
1571943990846.png

il y a 2 jours jusque fin de mois janvier 2016
il y a 22 jours en début mars 2020 soit 24 jours (22 si l'on exclu les bornes)
si l'on considère 4 années entières et 1 mois complets
comment expliquer le 21 jours obtenu ??
[/MODE 😵 ]

😉😉😉😉
 
re
si on considère la date 2 à 22/03/2020 00:00:00 le 22 jour ne peut pas être compté
et pareil pour le jour date 1 on considere quoi? 00:00:00 ou 23:59:59
je pense que la on peut simplement ajouter une option true/false a la fonction vba et laisser le choix a l'utilisateur de borner -1/+1
 
Bonjour®
Avec la méthode que j'ai utilisée, 1 mois après le 30/01/2020 nous amène au 01/03/2020 (29 + 1).
Il faut bien se donner une méthode, qui ne fait rien n'a rien 😎
🙂 je ne remet pas en cause la méthode...

le problème est biaisé dès qu'on le pose !!!
"les durées de mois et années ne sont pas des constantes mathématiques"
🙂 il faut manger 5 fruits ou légumes par jour !! (cerises ou pastèques ???)

l'anomalie signalée #25 devient kafkaïenne si le nombre de jour cumulés (jusque fin mois début + jours début mois fin) dépasse 29jr
dans ce cas on doit ajouter un mois entier et réduire la fraction de jours résiduels...
Quelle durée de mois choisir ???
  • durée de mois début ou bien durée de mois fin
  • ou encore durée de mois la plus ou la moins représentée dans la décomposition en mois
  • ou autre durée.
😎la méthode qui me semble la plus satisfaisante (vue de l'esprit)
est celle des durées moyennes: 365.25 et 365.25/12
bien que inconsistante, elle est réversible .
et qui pour une même durée totale en jours donne toujours le même résultat AMJ indépendamment des dates de début et de fin.

🙄 Par curiosité connaîtrais-tu d'autres applications intégrant l'équivalent de DATEDIF ou cette représentation AMJ et éventuellement les anomalies ou bugs y attachés ??
dès l'origine d'Excel les anomalies de DATEDIF ont été signalées, à mettre relation avec le fait que cette fonction ne soit plus documentée depuis plus de bientôt 20 ans !!!
 
Bonsour®
re
si on considère la date 2 à 22/03/2020 00:00:00 le 22 jour ne peut pas être compté
et pareil pour le jour date 1 on considere quoi? 00:00:00 ou 23:59:59
je pense que la on peut simplement ajouter une option true/false a la fonction vba et laisser le choix a l'utilisateur de borner -1/+1
🙄 l'utilisateur n'a bien souvent simplement pas conscience de la complexité de la gestion des dates et calendriers.
 
- 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

  • Question Question
Microsoft 365 Formule si ?
Réponses
7
Affichages
305
Réponses
6
Affichages
416
Retour