Différence de jours entre 2 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 !

criscris11

XLDnaute Accro
Bonjour à tous,
Je me pose deux petites questions avec la fonction DATEDIF.

La première : peut-on trouver le nombre de jours (par exemple) entre 2 résultats calculés par la fonction DATEDIF ?
Exemple : 1an , 6 mois, 3 jours- 1 an, 6 mois, 0 jour = 3 jours

Deuxième question : comment calculer un DATEDIF entre la première valeur fixe (là pas de problème) et entre une période de x mois, par exemple entre le 01/06/2012 et le 31/08/2012 ?

Merci pour vos lumières et bonne journée à tous.
 
Re : Différence de jours entre 2 DATEDIF

Bonjour,

pour la première question ,
il suiffit de reprendre les arguments des deux datediff() et de faire (D2-D1)-D4-D3) format nombre
Il est possible que D2=D3 (période consécutive)

pour la deuxième question je ne comprends pas la demande
 
Re : Différence de jours entre 2 DATEDIF

Bonjour

Attention à datedif. Il y a eu de multiples discussions sur ce sujet ici et ailleurs pour signaler que cette fonction est sujette à caution dans de nombreux cas. Ceci est particulièrement bien expliqué (en anglais) sur le site de Chip Pearson
DATEDIF Worksheet Function

En gros Datedif a tendance a faire des arrondis d'une drole de manière. Et le problème c'est que les erreurs ont tendance à s'accumuler et non pas à s'annuler. Alors faire des différences de datedif c'est vraiment très risqué. Mieux vaut repartir des valeurs de départ et mieux vaut compter en jours qu'en mois ou année avant de faire des arrondis et des différences.


un petit exemple tiré du site de Chip
DATEDIF And Leap Years

When calculating date intervals, DATEDIF uses the year of Date1, not Date2 when calculating the yd, ym and md intervals. For example,

=DATEDIF(Date1,Date2,"md")

returns 28 for Date1 = 1-Feb-2007 and Date2 = 1-March-2009. Since Date1 is not a leap year, the date 29-Feb is not counted. But the same formula with Date1 = 1-Feb-2008 returns 29, since Date1 is a leap year and therefore the date 29-Feb is counted.
 
Re : Différence de jours entre 2 DATEDIF

Tu peux télécharger le fichier Dates et heures CMC qui explique la lonnnngue formule en entier (3 DATEDIF)

tu peux aussi utiliser ces fonctions :

Code:
Public Function DiffDate(Madate1, Madate2, MonMode)
AnnéeDebut = Year(Madate1)
Moisdebut = Month(Madate1)
Jourdebut = Day(Madate1)
AnnéeFin = Year(Madate2)
MoisFin = Month(Madate2)
JourFin = Day(Madate2)
If JourFin < Jourdebut Then
    JourFin = JourFin + (DateSerial(AnnéeFin, MoisFin + 1, JourFin) - DateSerial(AnnéeFin, MoisFin, JourFin))
    MoisFin = MoisFin - 1
End If
If MoisFin < Moisdebut Then
    MoisFin = MoisFin + 12
    AnnéeFin = AnnéeFin - 1
End If
DifAnnée = AnnéeFin - AnnéeDebut
DifMois = MoisFin - Moisdebut
difjour = Int((Madate2 - Madate1 - 365.25 * (AnnéeFin - AnnéeDebut) - 30.6 * (MoisFin - Moisdebut)))
datefintest = (DateSerial(AnnéeDebut + DifAnnée, Moisdebut + DifMois, Jourdebut + difjour))
difjour = difjour + Madate2 - datefintest
Select Case MonMode
Case 1
    DiffDate = DifAnnée
Case 2
    DiffDate = DifMois
Case 3
    DiffDate = difjour
End Select
End Function
Code:
Function DifDate&(ByVal Date1, ByVal Date2, ByVal Mode%)
Dim DD1 As Date, DD2 As Date
  DifDate = 0
  On Error GoTo erreur
  DD1 = Date1
  DD2 = Date2
  If Date1 <= Date2 Then
    Date1 = DD1
    Date2 = DD2
  Else
    Date1 = DD2
    Date2 = DD1
  End If
  Select Case Mode
    Case 1
      If Year(Date2) > Year(Date1) Then
        DifDate = (Year(Date2) - Year(Date1)) - IIf(Month(Date2) < Month(Date1), 1, _
            IIf(Month(Date2) = Month(Date1) And Day(Date2) < Day(Date1), 1, 0))
      End If
    Case 2
      DifDate = Month(Date2) - Month(Date1) + 12 * (Year(Date2) - Year(Date1)) - _
      IIf(Day(Date2) < Day(Date1), 1, 0)
    Case 3
      DifDate = Date2 - Date1
  End Select
  If DD1 > DD2 Then DifDate = -DifDate
  Exit Function
erreur:
   DifDate = 0
  On Error GoTo 0
End Function
Code:
Function StrDifDate$(ByVal Date1, ByVal Date2)
Dim DD1 As Date, DD2 As Date
Dim An&, Mois&, Jour&, Res$
  On Error GoTo erreur
  DD1 = Date1
  DD2 = Date2
  If Date1 <= Date2 Then
    Date1 = DD1
    Date2 = DD2
  Else
    Date1 = DD2
    Date2 = DD1
  End If
  If Year(Date2) > Year(Date1) Then
    An = (Year(Date2) - Year(Date1)) - IIf(Month(Date2) < Month(Date1), 1, _
        IIf((Month(Date2) = Month(Date1)) And (Day(Date2) < Day(Date1)), 1, 0))
  End If
  Mois = Month(Date2) - Month(Date1) + 12 * (Year(Date2) - Year(Date1)) - _
      IIf(Day(Date2) < Day(Date1), 1, 0) - (12 * An)
  If Day(Date2) >= Day(Date1) Then
    Jour = Day(Date2) - Day(Date1)
  Else
    Jour = DateSerial(Year(Date1), Month(Date1) + 1, 1) - Date1
    Jour = Jour + Date2 - DateSerial(Year(Date2), Month(Date2), 1)
  End If
  If An > 0 Then Res = An & " an"
  If An > 1 Then Res = Res & "s"
  If Mois > 0 Then Res = Res & " " & Mois & " mois"
  If Jour > 0 Then Res = Res & " " & Jour & " jour"
  If Jour > 1 Then Res = Res & "s"
  Res = Trim(Res)
  If Res = "" Then Res = "0 jour"
  StrDifDate = Res
  Exit Function
erreur:
  StrDifDate = ""
  On Error GoTo 0
End Function
C@thy
 
Dernière édition:
Re : Différence de jours entre 2 DATEDIF

Bonjour

Le problème est assez différent avec la fonction datediff (2 f...) de VBA qui n'admet pas de renvoyer par exemple 2 ans et 3 mois. les intervalles valides sont
yyyy année
q trimestre
m Mois
y jour de l'année
d jour
w jour de semaine
ww semaine
h heure
n Minute
s Seconde
 
Re : Différence de jours entre 2 DATEDIF

Bonsoir à toutes et à tous,
Merci à vous pour vos réponses, il ne me reste plus qu'à tester tout cela.
En fait pour ma deuxième question, je voulais simplement savoir si la date d'ancienneté de service calculée par un DATEDIF (15 ans) était atteinte entre le 01/06/2012 et le 31/08/2012 sans passer par 10 colonnes et 10 formules pour décomposer le tout.
Puis pareil pour une limite d'âge mais cela marche pour un cela marchera pour l'autre.
Bonne soirée à tous et encore merci pour vos contributions.
 
Re : Différence de jours entre 2 DATEDIF

tu peux faire une mise en forme conditionnelle avec la formule :
ET(A1>=$D$1;A1<=$D$2)
ou une fonction SI
SI(et(A1>=DATE1;A1<=DATE2);"compris;"non compris")

sauf que le DATEDIF ne te donne pas une date mais un nombre d'années, mois, jours

En fait, tu n'as peut-être pas besoin de DATEDIF :

=SI(ET(MOIS.DECALER(A1;180)>=DATE1;MOIS.DECALER(A1;180)<=DATE2;"compris";"nom compris")
s'il s'agit bien de 15 ans tout rond

principe à adapter selon ton cas.

NB : il te faudra cocher l'utilitaire d'analyse dans Outils Macros complémentaires pour pouvoir utiliser cette fonction.

C@thy
 
Dernière édition:
Re : Différence de jours entre 2 DATEDIF

Si tu n'arrives pas à tes fins envoie un petit fichier exemple
avec ce que tu as au départ et ce que tu veux obtenir,
et tu peux aussi télécharger Dates et heures CMC une mine d'informations en matière de dates

Biz

C@thy
 
- 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
395
  • Résolu(e)
Microsoft 365 DATEDIF
Réponses
11
Affichages
420
Réponses
0
Affichages
305
Retour