#nombre et date

cocktail

XLDnaute Occasionnel
Re- Bonjour à tous,


Je cherche à mesurer le nombre de mois passés entre la date de fin de contrat de mes clients et aujourd'hui en nombre de mois.

Pour cela j'utilise cette formule :

=SI(B2="";0;SI(B2<AUJOURDHUI();DATEDIF(B2;AUJOURDHUI();"m")*-1;DATEDIF(AUJOURDHUI();B2;"m")))
hors sur mes echéances dépassées, j'ai un message d'erreur #nombre

si je change la date à la main, la formule semble fonctionner , le problème c'est que j'en ai un paquet à me coltiner :-(...et j'ai pourtant bien mis le format date sur les cellules concernées

Je vous joins un fichier avec le problème constaté et les résultats attendus pour que ce soit très clair.

Encore un grand Merci pour votre contribution.

A très vite

Cocktail
 

Pièces jointes

  • Classeur3.xls
    25.5 KB · Affichages: 65
  • Classeur3.xls
    25.5 KB · Affichages: 68
  • Classeur3.xls
    25.5 KB · Affichages: 56

Jacou

XLDnaute Impliqué
Re : #nombre et date

Bonsoir cocktail,

essaie en remplaçant B2 par DATE(ANNEE(B2);MOIS(B2);JOUR(B2)). ça donne =SI(B2="";"";SI(DATE(ANNEE(B2);MOIS(B2);JOUR(B2))<AUJOURDHUI();DATEDIF(DATE(ANNEE(B2);MOIS(B2);JOUR(B2));AUJOURDHUI();"m")*-1;DATEDIF(AUJOURDHUI();DATE(ANNEE(B2);MOIS(B2);JOUR(B2));"m"))) et ça a l'air de fonctionner
Jacou
 

cocktail

XLDnaute Occasionnel
Re : #nombre et date

Tout d'abord, un grand merci pour votre réactivité, et votre maîtrise de l'outil, je me répète mais vous êtes vraiment très talentueux.

Rachid, victor 21 et jacou , j'ai testé vos 3 propositions et visiblement celle qui fonctionne parfaitement est celle dce Jacou, alors à nouveau merci à vous 3 et en particulier à Jacou :)

Bonne soirée à vous Messieurs
Toutes mes amitiés
Cocktail
 

Modeste geedee

XLDnaute Barbatruc
Re : #nombre et date

Bonsour®
j'utilise cette formule :

=SI(B2="";0;SI(B2<AUJOURDHUI();DATEDIF(B2;AUJOURDHUI();"m")*-1;DATEDIF(AUJOURDHUI();B2;"m")))
hors sur mes echéances dépassées, j'ai un message d'erreur #nombre
essayer :
=SI(B2<>"";SI((AUJOURDHUI()-B2)>0;-1;1)*DATEDIF(MIN(B2;AUJOURDHUI());MAX(B2;AUJOURDHUI());"m");0)

si je change la date à la main, la formule semble fonctionner , le problème c'est que j'en ai un paquet à me coltiner :-(...et j'ai pourtant bien mis le format date sur les cellules concernées
en effet il me semble que certaines dates soient en fait du texte !!!
pour vérifier cela :
passer la plage "date fin de contrat" en format date étendue : jjj j mmmm aaaa
rectifier les cellules pour lesquelles le format n'est pas appliqué
 

Docmarti

XLDnaute Occasionnel
Re : #nombre et date

Bonjour cocktail; et à TOUS
si je change la date à la main, la formule semble fonctionner , le problème c'est que j'en ai un paquet à me coltiner :-(...et j'ai pourtant bien mis le format date sur les cellules concernées

Cocktail

Comme le dit Modeste geedee, certaines des dates sont du texte.
Et je rajouterais que les dates qui ne sont pas du texte sont toutes fausses car le jour et le mois ont été inversés.

Il y a 2 conditions à respecter pour transférer une date de VBA à une cellule Excel :
1) Le type de la variable doit être de type DATE (ou numérique. Il n'y a pas de problème si la variable est de type DOUBLE ou LONG).
2) Le format de la cellule doit être de type Date.

La raison de ton problème: tu as transféré des variables de type String (Texte ) contenant une date, vers des cellules dont le format n'est pas de type Texte. Il y a donc une conversion automatique de la variable contenant la date qui doit être effectuée par VBA. Et cette conversion automatique considère que c'est une date au format américain ( mois/jour/année ) ce qui fait qu'il y a inversion du jour et du mois si ta date a un format français.

Pour éviter la conversion automatique par VBA, il faut utiliser la fonction de conversion CDate.


Code:
Sub testTransfertDate()

Dim dbl As Double
Dim dt As Date

strDate = "12/01/2014"

dt = CDate(strDate)
dbl = CDbl(CDate(strDate))

'Conversion en type DATE avant le transfert
Cells(1, 1).NumberFormat = "m/d/yyyy"
Cells(1, 1).Value = CDate(strDate)
'NumberFormat = "m/d/yyyy" donne le format de date par défaut défini dans les paramètres régionaux de Windows

'Conversion en type DOUBLE avant le transfert
Cells(2, 1).NumberFormat = "m/d/yyyy"
Cells(2, 1).Value = CDbl(CDate(strDate))

'Test de Conversion en type STRING avant le transfert
Cells(3, 1).NumberFormat = "m/d/yyyy"
Cells(3, 1).Value = CStr(strDate)

If TypeName(Cells(3, 1).Value) <> "Date" Or CStr(Cells(3, 1).Value) <> CStr(strDate) Then

 MsgBox "Le résultat obtenu n'est pas une date ou bien est une autre date"

End If

End Sub



Cordialement

Docmarti
 
Dernière édition:

cocktail

XLDnaute Occasionnel
Re : #nombre et date

ok merci modeste geedee et docmarti pour vos retours, je comprends en effet mieux le sujet, le fichier provient de mon contrôle de gestion, et je suis totalement novice en vba, mais bon visiblement par la formule proposée par Jacou, je m'en sors :)

merci à toi

Bonne journeé à tous
 

Discussions similaires