Différence de jours entre 2 DATEDIF

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.
 

tdenfert

XLDnaute Impliqué
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
 

Misange

XLDnaute Barbatruc
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.
 

C@thy

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

Misange

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

C@thy

XLDnaute Barbatruc
Re : Différence de jours entre 2 DATEDIF

voici un exemple dans le fichier joint.

Les résultats diffèrent quand il y a un 28 (ou 29) février

Tout dépend comment on compte...

Bises et bonne journée

C@thy
 

Pièces jointes

  • datedif macro.xls
    29 KB · Affichages: 94

criscris11

XLDnaute Accro
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.
 

C@thy

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

C@thy

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

Discussions similaires

Réponses
11
Affichages
504

Statistiques des forums

Discussions
312 113
Messages
2 085 426
Membres
102 887
dernier inscrit
MarcVeretz