XL 2016 VBA - Datedif bugguée ?

danielco

XLDnaute Accro
Bonjour,

Un cas apparemment curieux.
VB:
=DATEDIF("16/4/19";AUJOURDHUI();"md")
renvoie 1 dans Excel, alors qu'en VBA :
zv_Debut = #4/16/2019#
zv_Fin = Date
?Evaluate("DATEDIF(" & zv_Debut & "," & zv_Fin & ",""md"")")
0

Quelle est l'erreur ?

merci d'avance.

Daniel
 
Dernière édition:

danielco

XLDnaute Accro
Bonjour et merci @BrunoM45 En fait, en mettant mon code dans une cellule, voici ce que j'obtiens :

VB:
=DATEDIF(16/4/2019;17/10/2020;"md")
au lieu de :
Code:
=DATEDIF("16/4/2019";"17/10/2020";"md")
Le code aurait don dû être :
Code:
Evaluate("DATEDIF(""" & Format(zv_Debut, "d/m/yyyy") & """,""" & Format(zv_Fin, "d/m/yyyy") & """,""md"")")

Désolé.

Daniel
 

patricktoulon

XLDnaute Barbatruc
re
oserais-je dire quand même que si un formatage "m/d/yyyy" est nécessaire avant tout calcul
c'est qu'il y a un sérieux problème de conception dans le fichier
en effet
msgbox cdate("04/15/2020")'donnera 15/04/2020 et cela sur un pc US ou FR
mais!!!
msgbox cdate("04/05/2020")'donnera 04/05/2020'pas d'inversion en dessous de 12 pour le segment 1 et 2 de la date

la plus part du temps la raison de cette inversion dans les cellules c'est que la date a été inscrite en string(c'est une erreur)
il ne sagit là donc qu'un choix du concepteur de travailler une pré conversion en supposant que TOUTES!!! les dates soient inversées

si ça n'est pas le cas alors c'est simple fichier=poubelle

car il est impossible a vba voir même excel de deviner si toute date egale ou en dessous de 12(mois/jour) est au format US ou FR ex:"11/12/xxxx" ben va savoir toi
a bon entendeur ;)
 

patricktoulon

XLDnaute Barbatruc
re
@danielco
et oui les dates c'est très compliqué et très simple a la fois ;)

1° décider sous quel format dans les cellules on travaille des le départ

2° NE PAS INJECTER DE DATE EN STRING DANS UNE CELLULE!!! mais une date (dateserial ou cdate OU CDBL(DATE))

3° en vba toujours travailler avec le clng ou cdbl de la date pour les calcul (on a le même résultat qu'avec formule)

ne pas oublier que formater une date peut se faire avec numberformat dans une cell (pas la peine d'arranger un string de la date)

5° si utilisation de datedif(vba ou excel formule) bien cerner le besoins et comprendre la fonction et ses arguments (pas toujours évident dans l'aide ou chez MS)

6° si possible utiliser le calcul(- ou +) sur les dates ( c'est simple net et propre)

7° datediff est proposée dans des fonctions persos par divers membres de ce forum dont la mienne
ces membres ont pris du temps sur eux pour répondre a (une/des) demandes
ces fonctions ont été éprouvées en grande largeurs
j'ai donc compilé pour tous ,certaines de ces propositions dans un fichier
libre a chacun de les utiliser voir même d'apporter d'autre solutions vba ou excel ou de les améliorer


;)
 

Discussions similaires

Réponses
45
Affichages
4 K
Réponses
45
Affichages
4 K
Réponses
22
Affichages
732
Réponses
21
Affichages
949
Réponses
17
Affichages
793

Statistiques des forums

Discussions
312 024
Messages
2 084 724
Membres
102 640
dernier inscrit
Alml