Calcul entre deux dates (ancienne et récente)

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 !

alexandre33260

XLDnaute Occasionnel
Bonjour et bonne année à toutes et à tous.
Je vous joins mon fichier sur le calcul entre des dates. Mon souci est le calcul qui s'effectue dans la cellule C3-4 (fusionnées). Je suis obligé de donner la date la plus ancienne en B3 et la plus récente en B4, autrement la formule ne fonctionne pas.
Avez-vous une solution pour que je puisse mettre date 1 et Date 2 sans être obligé de respecter l'ancienneté (mettre la date la plus récente en B3 et la plus ancienne en B4)???

PS : La formule initiale respecte le format singulier et pluriel "1 an 2 ans / 1 jour 2 jours". Ce dernier doit être respecté. Autre règle, impossible d'utiliser des macros…
Merci pour votre aide.
Si ce n'est pas possible, merci de me le dire aussi…..
Cordialement Alexandre.
 

Pièces jointes

Re : Calcul entre deux dates (ancienne et récente)

Bonjour à tous,

Peux-tu essayer :
Code:
=SI(OU(B3="";B4="");"";DATEDIF(MIN(B3:B4);MAX(B3:B4);"Y")&SI(DATEDIF(MIN(B3:B4);MAX(B3:B4);"Y")>1;" ans, ";" an, ")&DATEDIF(MIN(B3:B4);MAX(B3:B4);"YM")&" mois et "&DATEDIF(MIN(B3:B4);MAX(B3:B4);"MD")&SI(DATEDIF(MIN(B3:B4);MAX(B3:B4);"MD")>1;" jours.";" jour."))

En sachant que DATEDIF() ne retourne pas forcément un résultat exact...

A+ à tous
 
Re : Calcul entre deux dates (ancienne et récente)

Bonsour®

=SI(OU(B3="";B4="");"";DATEDIF(MIN(B3;B4);MAX(B3;B4);"Y")&SI(DATEDIF(MIN(B3;B4);MAX(B3;B4);"Y")>1;" ans, ";" an, ")&DATEDIF(MIN(B3;B4);MAX(B3;B4);"YM")&" mois et "&DATEDIF(MIN(B3;B4);MAX(B3;B4);"MD")&SI(DATEDIF(MIN(B3;B4);MAX(B3;B4);"MD")>1;" jours.";" jour."))

😡
sauf que DATEDIF est buggé avec l'utilisation du paramètre "md"


Oupsss !!!
bonjour JC

petit +
en D3, D4 , D8 :
=SI(B3<>"";"c'était un "&(TEXTE(B3;"jjjj"));"")

😎
contournement :
=TEXTE(ABS(date1-date2)+1;"aaaa")-1900&" an"&SI(TEXTE(ABS(date1-date2)+1;"aaaa")-1900>1;"s ";" ")&TEXTE(ABS(date1-date2)+1;"m")-1
&" mois "&TEXTE(ABS(date1-date2)+1;" j")-1&" jour"&(SI(TEXTE(ABS(date1-date2)+1;" j")-1>1;"s";""))
 

Pièces jointes

Dernière édition:
Re : Calcul entre deux dates (ancienne et récente)

bonsour®
Geedeee : Je l'ai bien précisé dans mon #2 😡

Edition : Et tu as "Oupsé" 😱

il n'est jamais inutile de bien enfoncer les clous !!!
😱
d'autant que ce bug n'existe pas dans toutes les versions d'Excel
et est bien particulier à une période :
date récente en année bissextile ET date en janvier ET Jour inferieur à jour date ancienne
 
Re : Calcul entre deux dates (ancienne et récente)

Bonsoir à tous.


Moi, je n'aime pas DATEDIF...​
VB:
=SI(B3*B4;
    ANNEE(MAX(B3;B4))-ANNEE(MIN(B3;B4))-(100*(MOIS(MAX(B3;B4))-MOIS(MIN(B3;B4)))<(JOUR(MIN(B3;B4))-JOUR(MAX(B3;B4))))&" an"
&SI(ANNEE(MAX(B3;B4))-ANNEE(MIN(B3;B4))-(100*(MOIS(MAX(B3;B4))-MOIS(MIN(B3;B4)))<(JOUR(MIN(B3;B4))-JOUR(MAX(B3;B4))))>1;"s, ";", ")
   &MOIS(MAX(B3;B4))-MOIS(MIN(B3;B4))+12*(100*(MOIS(MAX(B3;B4))-MOIS(MIN(B3;B4)))<(JOUR(MIN(B3;B4))-JOUR(MAX(B3;B4)))-(JOUR(MAX(B3;B4))<JOUR(MIN(B3;B4)))*(1-DATE(ANNEE(MAX(B3;B4));MOIS(MAX(B3;B4))-1;1)+DATE(ANNEE(MAX(B3;B4));MOIS(MAX(B3;B4));1)))&" mois et "
   &JOUR(MAX(B3;B4))-JOUR(MIN(B3;B4))-(JOUR(MAX(B3;B4))<JOUR(MIN(B3;B4)))*(DATE(ANNEE(MAX(B3;B4));MOIS(MAX(B3;B4))-1;1)-DATE(ANNEE(MAX(B3;B4));MOIS(MAX(B3;B4));1))&" jour"
&SI(JOUR(MAX(B3;B4))-JOUR(MIN(B3;B4))-(JOUR(MAX(B3;B4))<JOUR(MIN(B3;B4)))*(DATE(ANNEE(MAX(B3;B4));MOIS(MAX(B3;B4))-1;1)-DATE(ANNEE(MAX(B3;B4));MOIS(MAX(B3;B4));1))>0;"s.";".");
"")


Bonne soirée.


ℝOGER2327
#7107


Samedi 14 Décervelage 141 (Saints 4 Sans-Cou, enchanteurs - fête Suprême Quarte)
22 Nivôse An CCXXII, 7,2633h - sel
2014-W02-6T17:25:55Z
 
Re : Calcul entre deux dates (ancienne et récente)

Bonjour à tous,

Je te conseille la formule de Geedee en #3 (légèrement modifiée pour correspondre à ta syntaxe) :

Code:
=TEXTE(ABS($B$3-$B$4)+1;"aaaa")-1900&" an"&SI(TEXTE(ABS($B$3-$B$4)+1;"aaaa")-1900>1;"s, ";" ")&TEXTE(ABS($B$3-$B$4)+1;"m")-1&" mois et "&TEXTE(ABS($B$3-$B$4)+1;" j")-2&" jour"&(SI(TEXTE(ABS($B$3-$B$4)+1;" j")-2>1;"s.";""))

A+ à tous
 
Re : Calcul entre deux dates (ancienne et récente)

Bonsour®
Bonsoir à tous.
Moi, je n'aime pas DATEDIF...​
VB:
=SI(B3*B4;
    ANNEE(MAX(B3;B4))-ANNEE(MIN(B3;B4))-(100*(MOIS(MAX(B3;B4))-MOIS(MIN(B3;B4)))<(JOUR(MIN(B3;B4))-JOUR(MAX(B3;B4))))&" an"
&SI(ANNEE(MAX(B3;B4))-ANNEE(MIN(B3;B4))-(100*(MOIS(MAX(B3;B4))-MOIS(MIN(B3;B4)))<(JOUR(MIN(B3;B4))-JOUR(MAX(B3;B4))))>1;"s, ";", ")
   &MOIS(MAX(B3;B4))-MOIS(MIN(B3;B4))+12*(100*(MOIS(MAX(B3;B4))-MOIS(MIN(B3;B4)))<(JOUR(MIN(B3;B4))-JOUR(MAX(B3;B4)))-(JOUR(MAX(B3;B4))<JOUR(MIN(B3;B4)))*(1-DATE(ANNEE(MAX(B3;B4));MOIS(MAX(B3;B4))-1;1)+DATE(ANNEE(MAX(B3;B4));MOIS(MAX(B3;B4));1)))&" mois et "
   &JOUR(MAX(B3;B4))-JOUR(MIN(B3;B4))-(JOUR(MAX(B3;B4))<JOUR(MIN(B3;B4)))*(DATE(ANNEE(MAX(B3;B4));MOIS(MAX(B3;B4))-1;1)-DATE(ANNEE(MAX(B3;B4));MOIS(MAX(B3;B4));1))&" jour"
&SI(JOUR(MAX(B3;B4))-JOUR(MIN(B3;B4))-(JOUR(MAX(B3;B4))<JOUR(MIN(B3;B4)))*(DATE(ANNEE(MAX(B3;B4));MOIS(MAX(B3;B4))-1;1)-DATE(ANNEE(MAX(B3;B4));MOIS(MAX(B3;B4));1))>0;"s.";".");
"")


Bonne soirée.
avec toute mes excuses Roger...
Joyeuse insomnie ...😱
Capture.JPG😀
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    26.7 KB · Affichages: 78
  • Capture.JPG
    Capture.JPG
    26.7 KB · Affichages: 79
Re : Calcul entre deux dates (ancienne et récente)

Bonjour à tous.

Re...
Bonsour®
avec toute mes excuses Roger...
Joyeuse insomnie ...😱
Regarde la pièce jointe 294798😀
Je me suis trompé de formule...
En fait, la formule proposée est une transcription de code VBA (que j'ai vu parfois attribué à J.M.Peters).
Je voulais proposer l'équivalent d'un code personnel :​
VB:
Function DifDate$(début As Date, fin As Date)
Dim D As Date, f As Date, M&, j&
  If début < fin Then D = début: f = fin + 1 Else D = fin: f = début + 1
  Do While DecMois(D, M + 1) < f: M = M + 1: Loop
  D = DateSerial(Year(DecMois(D, M)), Month(DecMois(D, M)), Day(DecMois(D, M)))
  j = f - D - 1
  DifDate = M \ 12 & " an" & IIf(M \ 12 > 1, "s, ", ", ") & M Mod 12 & " mois et " & j & " jour" & IIf(j > 1, "s.", ".")
End Function

Function DecMois(D As Date, dec&) As Date
Dim x, y
  x = DateSerial(Year(D), Month(D) + dec, 1)
  y = Day(DateSerial(Year(x), Month(x) + 1, 0))
  DecMois = DateSerial(Year(D), Month(D) + dec, (y + Day(D) - Abs(y - Day(D))) / 2)
End Function
sous forme d'une lourde formule Excel. Ce qui donne :​
VB:
=                                  TEXTE(ENT(SOMME(--(MOIS.DECALER(MIN(C$2;$B3);LIGNE(DECALER($A$1;;;12*(ABS(ANNEE($B3)-ANNEE(C$2))+1);)))<=MAX(C$2;$B3)))/12);
"[>1]0"" ans, "";0"" an, """)&
                                         MOD(SOMME(--(MOIS.DECALER(MIN(C$2;$B3);LIGNE(DECALER($A$1;;;12*(ABS(ANNEE($B3)-ANNEE(C$2))+1);)))<=MAX(C$2;$B3)));12)&" mois et "&
TEXTE(MAX(C$2;$B3)-MOIS.DECALER(MIN(C$2;$B3);SOMME(--(MOIS.DECALER(MIN(C$2;$B3);LIGNE(DECALER($A$1;;;12*(ABS(ANNEE($B3)-ANNEE(C$2))+1);)))<=MAX(C$2;$B3))));
"[>1]0"" jours."";0"" jour.""")
À valider par Ctrl Maj Entrée.


On trouvera la mise en œuvre du dit code et de sa transcription en formule Excel dans l'onglet Feuille03 du classeur joint.

Cela dit, je crois que le problème posé est difficile à résoudre à la satisfaction de tous. On trouvera dans l'onglet Memo quelques éléments d'explication de mon opinion.

Pour finir, j'ai repris, en la simplifiant, la formule de Modeste geedee revue par JCGL dans le message #12. Voir l'onglet Feuille02.​


Bonne journée.
 

Pièces jointes

Dernière édition:
Re : Calcul entre deux dates (ancienne et récente)

Bonjour à tous.


La fonction DifDate proposée ci-dessus est très-lente. On peut accélérer :​
VB:
Function DifDate$(début As Date, fin As Date) 
Dim D As Date, F As Date, T&, Jo%
'  Application.Volatile 'Facultatif
  If début < fin Then D = début: F = fin Else D = fin: F = début
  F = Int(F) - (Round(F - Int(F) - D + Int(D), 6) >= 0)
  T = 12 * (Year(F) - Year(D)) + Month(F) - Month(D)
  T = T + (DecMois(D, T) >= F)
  Jo = F - DecMois(D, T) - 1
  DifDate = T \ 12 & " an" & IIf(T \ 12 > 1, "s, ", ", ") & T Mod 12 & " mois et " & Jo & " jour" & IIf(Jo > 1, "s.", ".")
End Function


ℝOGER2327
#7137


Dimanche 8 Gueules 141 (Fête de la Chandelle Verte - fête Suprême Tierce)
14 Pluviôse An CCXXII, 5,8389h - avelinier
2014-W05-7T14:00:48Z
 
- 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éponses
1
Affichages
288
Retour