Problématique bien connue :
Énoncé de JE McGimpsey, MVP Excel
'--------------------------------------------
The problem is that DATEDIF() uses the length of the first month to
determine what a "month" is.
This problem (with variations of the given example) has been discussed
here many, many times.
Because "month" is a fuzzy concept, there's simply no definition of
"month" that will allow both algorithmically consistent, and generally
acceptable, results without including this kind of anomaly.
'--------------------------------------------
Il est mieux de ne pas utilisé "MD" mais à toi de décider ....!
Une fonction personnelle parue ici sous la plume de "cervolent"
'----------------------------------------------
Function TEMPSECOULE(Debut, Fin) As String
Dim ValAnnée As Integer, ValMois As Integer
Dim ValJour As Integer, ValJour1 As Integer, ValJour2 As Integer
ValAnnée = Year(Fin) - Year(Debut)
ValMois = Month(Fin) - Month(Debut)
If ValMois < 0 Then
ValAnnée = ValAnnée - 1
ValMois = ValMois + 12
End If
ValJour1 = Day(Debut)
ValJour2 = Day(Fin)
ValJour = ValJour2 - ValJour1
If ValJour < 0 Then
ValJour = Day(DateSerial(Year(Debut), Month(Debut) + 1, 0)) - ValJour1 + ValJour2
If ValMois > 0 Then
ValMois = ValMois - 1
Else
ValAnnée = ValAnnée - 1
ValMois = 11
End If
End If
'les tests qui suivent ne servent qu'aux accrords de pluriel !!
If ValAnnée > 1 Then
antexte = " ans "
Else
antexte = " an "
End If
If ValJour > 1 Then
jrtexte = " jours"
Else
jrtexte = " jour"
End If
TEMPSECOULE = ValAnnée & antexte & ValMois & " mois " & ValJour & jrtexte
End Function
'----------------------------------------------
Est-ce que tout est sous contrôle maintenant ?
Problématique bien connue :
Énoncé de JE McGimpsey, MVP Excel
'--------------------------------------------
The problem is that DATEDIF() uses the length of the first month to
determine what a "month" is.
This problem (with variations of the given example) has been discussed
here many, many times.
Because "month" is a fuzzy concept, there's simply no definition of
"month" that will allow both algorithmically consistent, and generally
acceptable, results without including this kind of anomaly.
'--------------------------------------------
Il est mieux de ne pas utilisé "MD" mais à toi de décider ....!
Une fonction personnelle parue ici sous la plume de "cervolent"
'----------------------------------------------
Function TEMPSECOULE(Debut, Fin) As String
Dim ValAnnée As Integer, ValMois As Integer
Dim ValJour As Integer, ValJour1 As Integer, ValJour2 As Integer
ValAnnée = Year(Fin) - Year(Debut)
ValMois = Month(Fin) - Month(Debut)
If ValMois < 0 Then
ValAnnée = ValAnnée - 1
ValMois = ValMois + 12
End If
ValJour1 = Day(Debut)
ValJour2 = Day(Fin)
ValJour = ValJour2 - ValJour1
If ValJour < 0 Then
ValJour = Day(DateSerial(Year(Debut), Month(Debut) + 1, 0)) - ValJour1 + ValJour2
If ValMois > 0 Then
ValMois = ValMois - 1
Else
ValAnnée = ValAnnée - 1
ValMois = 11
End If
End If
'les tests qui suivent ne servent qu'aux accrords de pluriel !!
If ValAnnée > 1 Then
antexte = " ans "
Else
antexte = " an "
End If
If ValJour > 1 Then
jrtexte = " jours"
Else
jrtexte = " jour"
End If
TEMPSECOULE = ValAnnée & antexte & ValMois & " mois " & ValJour & jrtexte
End Function
'----------------------------------------------
Est-ce que tout est sous contrôle maintenant ?
Problématique bien connue :
Énoncé de JE McGimpsey, MVP Excel
'--------------------------------------------
The problem is that DATEDIF() uses the length of the first month to
determine what a "month" is.
This problem (with variations of the given example) has been discussed
here many, many times.
Because "month" is a fuzzy concept, there's simply no definition of
"month" that will allow both algorithmically consistent, and generally
acceptable, results without including this kind of anomaly.
'--------------------------------------------
Il est mieux de ne pas utilisé "MD" mais à toi de décider ....!
Une fonction personnelle parue ici sous la plume de "cervolent"
'----------------------------------------------
Function TEMPSECOULE(Debut, Fin) As String
Dim ValAnnée As Integer, ValMois As Integer
Dim ValJour As Integer, ValJour1 As Integer, ValJour2 As Integer
ValAnnée = Year(Fin) - Year(Debut)
ValMois = Month(Fin) - Month(Debut)
If ValMois < 0 Then
ValAnnée = ValAnnée - 1
ValMois = ValMois + 12
End If
ValJour1 = Day(Debut)
ValJour2 = Day(Fin)
ValJour = ValJour2 - ValJour1
If ValJour < 0 Then
ValJour = Day(DateSerial(Year(Debut), Month(Debut) + 1, 0)) - ValJour1 + ValJour2
If ValMois > 0 Then
ValMois = ValMois - 1
Else
ValAnnée = ValAnnée - 1
ValMois = 11
End If
End If
'les tests qui suivent ne servent qu'aux accrords de pluriel !!
If ValAnnée > 1 Then
antexte = " ans "
Else
antexte = " an "
End If
If ValJour > 1 Then
jrtexte = " jours"
Else
jrtexte = " jour"
End If
TEMPSECOULE = ValAnnée & antexte & ValMois & " mois " & ValJour & jrtexte
End Function
'----------------------------------------------
Est-ce que tout est sous contrôle maintenant ?
bonjour florence,
avec ces dates :
2008-01-31
2009-03-01
et la formule :
=SUPPRESPACE(SI(A2-A1;TEXTE(DATEDIF(A1;A2;"y");"[>1]0"" ans"";[>]""1
an"";")&TEXTE(DATEDIF(A1;A2;"ym");"[>] 0"" mois
"";")&TEXTE(DATEDIF(A1;A2;"md");"[>1]0"" jours"";[>]""1 jour"";");"0
jour"))
le résultat est :
1 an 1 mois -
mais le résultat reste le même si je modifie la première date pour
2008-01-30 ou 2008-01-29
petit test:
2008-01-31 résultat : 1 an 1 mois -
2009-03-01
2008-01-30 résultat : 1 an 1 mois -
2009-03-01
2008-01-29 résultat : 1 an 1 mois
2009-03-01
2008-01-28 résultat : 1 an 1 mois 1 jour
2009-03-01
j'ai parcouru plusieurs sites et on ne fait mention nul part de ce
problème ?
isabelleBonjour
Je n'obtiens pas ce résultat...
datedif("31/1/2008";"1/3/2009";"md") renvoie 1
si tu relis l'aide (rappelée ici :
http://www.excelabo.net/excel/lexique.php#datedif)
tu voies que MD renvoie le nombre de jours SANS TENIR COMPTE du nombre
de mois. Ca ne renvoie pas le nombre de mois + le nombre de jours.
MAis de toutes façons tu ne dois pas récupérer un nombre négatif !
as tu réessayé dans un classeur tout neuf ?
pour récupérer une durée en année et en joursn datedif n'est pas ce
qu'il te faut.
Je te conseille d'utiliser effectivement la fonction de Frédéric
Sigonneau
http://www.excelabo.net/excel/tempomesurer.php#diffdates
ou, pour éviter l'utilisation de VBA, cette formule à mettre sur une
seuleme ligne de Laurent pour calculer l'age d'une personne à la date
d'aujourd'hui (à toi d'adapter)
En nommant (insertion/nom/définir) D la cellule contenant la date de
naissance
=SUPPRESPACE(SI(AUJOURDHUI()-D;TEXTE(DATEDIF(D;AUJOURDHUI();"y");"[>1]0""
ans"";[>]""1 an"";")&TEXTE(DATEDIF(D;AUJOURDHUI();"ym");"[>] 0"" mois
"";")&TEXTE(DATEDIF(D;AUJOURDHUI();"md");"[>1]0"" jours"";[>]""1
jour"";");"0 jour"))
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour
en suivant les conseils de divers posts j'ai voulu utiliser la
fonction datedif mais celle-ci me retourne des résultats surprenants
ainsi Útedif("31/1/2008";"1/3/2009";"md") retourne : -2
soit un nombre négatif
comment est-ce possible; la fonction est elle buggée?
est-ce que cette fonction est incompatible avec excel 2000??
bonjour florence,
avec ces dates :
2008-01-31
2009-03-01
et la formule :
=SUPPRESPACE(SI(A2-A1;TEXTE(DATEDIF(A1;A2;"y");"[>1]0"" ans"";[>]""1
an"";")&TEXTE(DATEDIF(A1;A2;"ym");"[>] 0"" mois
"";")&TEXTE(DATEDIF(A1;A2;"md");"[>1]0"" jours"";[>]""1 jour"";");"0
jour"))
le résultat est :
1 an 1 mois -
mais le résultat reste le même si je modifie la première date pour
2008-01-30 ou 2008-01-29
petit test:
2008-01-31 résultat : 1 an 1 mois -
2009-03-01
2008-01-30 résultat : 1 an 1 mois -
2009-03-01
2008-01-29 résultat : 1 an 1 mois
2009-03-01
2008-01-28 résultat : 1 an 1 mois 1 jour
2009-03-01
j'ai parcouru plusieurs sites et on ne fait mention nul part de ce
problème ?
isabelle
Bonjour
Je n'obtiens pas ce résultat...
datedif("31/1/2008";"1/3/2009";"md") renvoie 1
si tu relis l'aide (rappelée ici :
http://www.excelabo.net/excel/lexique.php#datedif)
tu voies que MD renvoie le nombre de jours SANS TENIR COMPTE du nombre
de mois. Ca ne renvoie pas le nombre de mois + le nombre de jours.
MAis de toutes façons tu ne dois pas récupérer un nombre négatif !
as tu réessayé dans un classeur tout neuf ?
pour récupérer une durée en année et en joursn datedif n'est pas ce
qu'il te faut.
Je te conseille d'utiliser effectivement la fonction de Frédéric
Sigonneau
http://www.excelabo.net/excel/tempomesurer.php#diffdates
ou, pour éviter l'utilisation de VBA, cette formule à mettre sur une
seuleme ligne de Laurent pour calculer l'age d'une personne à la date
d'aujourd'hui (à toi d'adapter)
En nommant (insertion/nom/définir) D la cellule contenant la date de
naissance
=SUPPRESPACE(SI(AUJOURDHUI()-D;TEXTE(DATEDIF(D;AUJOURDHUI();"y");"[>1]0""
ans"";[>]""1 an"";")&TEXTE(DATEDIF(D;AUJOURDHUI();"ym");"[>] 0"" mois
"";")&TEXTE(DATEDIF(D;AUJOURDHUI();"md");"[>1]0"" jours"";[>]""1
jour"";");"0 jour"))
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net
Bonjour
en suivant les conseils de divers posts j'ai voulu utiliser la
fonction datedif mais celle-ci me retourne des résultats surprenants
ainsi Útedif("31/1/2008";"1/3/2009";"md") retourne : -2
soit un nombre négatif
comment est-ce possible; la fonction est elle buggée?
est-ce que cette fonction est incompatible avec excel 2000??
bonjour florence,
avec ces dates :
2008-01-31
2009-03-01
et la formule :
=SUPPRESPACE(SI(A2-A1;TEXTE(DATEDIF(A1;A2;"y");"[>1]0"" ans"";[>]""1
an"";")&TEXTE(DATEDIF(A1;A2;"ym");"[>] 0"" mois
"";")&TEXTE(DATEDIF(A1;A2;"md");"[>1]0"" jours"";[>]""1 jour"";");"0
jour"))
le résultat est :
1 an 1 mois -
mais le résultat reste le même si je modifie la première date pour
2008-01-30 ou 2008-01-29
petit test:
2008-01-31 résultat : 1 an 1 mois -
2009-03-01
2008-01-30 résultat : 1 an 1 mois -
2009-03-01
2008-01-29 résultat : 1 an 1 mois
2009-03-01
2008-01-28 résultat : 1 an 1 mois 1 jour
2009-03-01
j'ai parcouru plusieurs sites et on ne fait mention nul part de ce
problème ?
isabelleBonjour
Je n'obtiens pas ce résultat...
datedif("31/1/2008";"1/3/2009";"md") renvoie 1
si tu relis l'aide (rappelée ici :
http://www.excelabo.net/excel/lexique.php#datedif)
tu voies que MD renvoie le nombre de jours SANS TENIR COMPTE du nombre
de mois. Ca ne renvoie pas le nombre de mois + le nombre de jours.
MAis de toutes façons tu ne dois pas récupérer un nombre négatif !
as tu réessayé dans un classeur tout neuf ?
pour récupérer une durée en année et en joursn datedif n'est pas ce
qu'il te faut.
Je te conseille d'utiliser effectivement la fonction de Frédéric
Sigonneau
http://www.excelabo.net/excel/tempomesurer.php#diffdates
ou, pour éviter l'utilisation de VBA, cette formule à mettre sur une
seuleme ligne de Laurent pour calculer l'age d'une personne à la date
d'aujourd'hui (à toi d'adapter)
En nommant (insertion/nom/définir) D la cellule contenant la date de
naissance
=SUPPRESPACE(SI(AUJOURDHUI()-D;TEXTE(DATEDIF(D;AUJOURDHUI();"y");"[>1]0""
ans"";[>]""1 an"";")&TEXTE(DATEDIF(D;AUJOURDHUI();"ym");"[>] 0"" mois
"";")&TEXTE(DATEDIF(D;AUJOURDHUI();"md");"[>1]0"" jours"";[>]""1
jour"";");"0 jour"))
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour
en suivant les conseils de divers posts j'ai voulu utiliser la
fonction datedif mais celle-ci me retourne des résultats surprenants
ainsi Útedif("31/1/2008";"1/3/2009";"md") retourne : -2
soit un nombre négatif
comment est-ce possible; la fonction est elle buggée?
est-ce que cette fonction est incompatible avec excel 2000??
Problématique bien connue :
Énoncé de JE McGimpsey, MVP Excel
'--------------------------------------------
The problem is that DATEDIF() uses the length of the first month to
determine what a "month" is.
This problem (with variations of the given example) has been discussed
here many, many times.
Because "month" is a fuzzy concept, there's simply no definition of
"month" that will allow both algorithmically consistent, and generally
acceptable, results without including this kind of anomaly.
'--------------------------------------------
Il est mieux de ne pas utilisé "MD" mais à toi de décider ....!
Une fonction personnelle parue ici sous la plume de "cervolent"
'----------------------------------------------
Function TEMPSECOULE(Debut, Fin) As String
Dim ValAnnée As Integer, ValMois As Integer
Dim ValJour As Integer, ValJour1 As Integer, ValJour2 As Integer
ValAnnée = Year(Fin) - Year(Debut)
ValMois = Month(Fin) - Month(Debut)
If ValMois < 0 Then
ValAnnée = ValAnnée - 1
ValMois = ValMois + 12
End If
ValJour1 = Day(Debut)
ValJour2 = Day(Fin)
ValJour = ValJour2 - ValJour1
If ValJour < 0 Then
ValJour = Day(DateSerial(Year(Debut), Month(Debut) + 1, 0)) - ValJou r1 + ValJour2
If ValMois > 0 Then
ValMois = ValMois - 1
Else
ValAnnée = ValAnnée - 1
ValMois = 11
End If
End If
'les tests qui suivent ne servent qu'aux accrords de pluriel !!
If ValAnnée > 1 Then
antexte = " ans "
Else
antexte = " an "
End If
If ValJour > 1 Then
jrtexte = " jours"
Else
jrtexte = " jour"
End If
TEMPSECOULE = ValAnnée & antexte & ValMois & " mois " & ValJour & jrte xte
End Function
'----------------------------------------------
Est-ce que tout est sous contrôle maintenant ?
Problématique bien connue :
Énoncé de JE McGimpsey, MVP Excel
'--------------------------------------------
The problem is that DATEDIF() uses the length of the first month to
determine what a "month" is.
This problem (with variations of the given example) has been discussed
here many, many times.
Because "month" is a fuzzy concept, there's simply no definition of
"month" that will allow both algorithmically consistent, and generally
acceptable, results without including this kind of anomaly.
'--------------------------------------------
Il est mieux de ne pas utilisé "MD" mais à toi de décider ....!
Une fonction personnelle parue ici sous la plume de "cervolent"
'----------------------------------------------
Function TEMPSECOULE(Debut, Fin) As String
Dim ValAnnée As Integer, ValMois As Integer
Dim ValJour As Integer, ValJour1 As Integer, ValJour2 As Integer
ValAnnée = Year(Fin) - Year(Debut)
ValMois = Month(Fin) - Month(Debut)
If ValMois < 0 Then
ValAnnée = ValAnnée - 1
ValMois = ValMois + 12
End If
ValJour1 = Day(Debut)
ValJour2 = Day(Fin)
ValJour = ValJour2 - ValJour1
If ValJour < 0 Then
ValJour = Day(DateSerial(Year(Debut), Month(Debut) + 1, 0)) - ValJou r1 + ValJour2
If ValMois > 0 Then
ValMois = ValMois - 1
Else
ValAnnée = ValAnnée - 1
ValMois = 11
End If
End If
'les tests qui suivent ne servent qu'aux accrords de pluriel !!
If ValAnnée > 1 Then
antexte = " ans "
Else
antexte = " an "
End If
If ValJour > 1 Then
jrtexte = " jours"
Else
jrtexte = " jour"
End If
TEMPSECOULE = ValAnnée & antexte & ValMois & " mois " & ValJour & jrte xte
End Function
'----------------------------------------------
Est-ce que tout est sous contrôle maintenant ?
Problématique bien connue :
Énoncé de JE McGimpsey, MVP Excel
'--------------------------------------------
The problem is that DATEDIF() uses the length of the first month to
determine what a "month" is.
This problem (with variations of the given example) has been discussed
here many, many times.
Because "month" is a fuzzy concept, there's simply no definition of
"month" that will allow both algorithmically consistent, and generally
acceptable, results without including this kind of anomaly.
'--------------------------------------------
Il est mieux de ne pas utilisé "MD" mais à toi de décider ....!
Une fonction personnelle parue ici sous la plume de "cervolent"
'----------------------------------------------
Function TEMPSECOULE(Debut, Fin) As String
Dim ValAnnée As Integer, ValMois As Integer
Dim ValJour As Integer, ValJour1 As Integer, ValJour2 As Integer
ValAnnée = Year(Fin) - Year(Debut)
ValMois = Month(Fin) - Month(Debut)
If ValMois < 0 Then
ValAnnée = ValAnnée - 1
ValMois = ValMois + 12
End If
ValJour1 = Day(Debut)
ValJour2 = Day(Fin)
ValJour = ValJour2 - ValJour1
If ValJour < 0 Then
ValJour = Day(DateSerial(Year(Debut), Month(Debut) + 1, 0)) - ValJou r1 + ValJour2
If ValMois > 0 Then
ValMois = ValMois - 1
Else
ValAnnée = ValAnnée - 1
ValMois = 11
End If
End If
'les tests qui suivent ne servent qu'aux accrords de pluriel !!
If ValAnnée > 1 Then
antexte = " ans "
Else
antexte = " an "
End If
If ValJour > 1 Then
jrtexte = " jours"
Else
jrtexte = " jour"
End If
TEMPSECOULE = ValAnnée & antexte & ValMois & " mois " & ValJour & jrte xte
End Function
'----------------------------------------------
Est-ce que tout est sous contrôle maintenant ?
Énoncé de JE McGimpsey, MVP Excel
Because "month" is a fuzzy concept, there's simply no definition of
"month" that will allow both algorithmically consistent, and generally
acceptable, results without including this kind of anomaly.
Une fonction personnelle parue ici sous la plume de "cervolent"
Énoncé de JE McGimpsey, MVP Excel
Because "month" is a fuzzy concept, there's simply no definition of
"month" that will allow both algorithmically consistent, and generally
acceptable, results without including this kind of anomaly.
Une fonction personnelle parue ici sous la plume de "cervolent"
Énoncé de JE McGimpsey, MVP Excel
Because "month" is a fuzzy concept, there's simply no definition of
"month" that will allow both algorithmically consistent, and generally
acceptable, results without including this kind of anomaly.
Une fonction personnelle parue ici sous la plume de "cervolent"
Énoncé de JE McGimpsey, MVP Excel
Because "month" is a fuzzy concept, there's simply no definition of
"month" that will allow both algorithmically consistent, and generally
acceptable, results without including this kind of anomaly.
Une fonction personnelle parue ici sous la plume de "cervolent"
Énoncé de JE McGimpsey, MVP Excel
Because "month" is a fuzzy concept, there's simply no definition of
"month" that will allow both algorithmically consistent, and generally
acceptable, results without including this kind of anomaly.
Une fonction personnelle parue ici sous la plume de "cervolent"
Énoncé de JE McGimpsey, MVP Excel
Because "month" is a fuzzy concept, there's simply no definition of
"month" that will allow both algorithmically consistent, and generally
acceptable, results without including this kind of anomaly.
Une fonction personnelle parue ici sous la plume de "cervolent"
Quand une fonction te retourne ce type de résultat, il me
semble que cela devrait poser problème nécessitant un correctif.
Si la fonction de Cervolent (optimale puisque c'est la seule qui fait
le boulot proprement) tient la route, difficile de croire que
microsoft ne puisse pas en faire autant !
Quand une fonction te retourne ce type de résultat, il me
semble que cela devrait poser problème nécessitant un correctif.
Si la fonction de Cervolent (optimale puisque c'est la seule qui fait
le boulot proprement) tient la route, difficile de croire que
microsoft ne puisse pas en faire autant !
Quand une fonction te retourne ce type de résultat, il me
semble que cela devrait poser problème nécessitant un correctif.
Si la fonction de Cervolent (optimale puisque c'est la seule qui fait
le boulot proprement) tient la route, difficile de croire que
microsoft ne puisse pas en faire autant !