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:

BrunoM45

XLDnaute Barbatruc
Salut Danielco

Effectivement, il faut passer par une usine à gaz si tu veux que ça fonctionne :p

Edit supprimé

@+
 
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
bonjour
les formules dans les cellules utilisent en interne le numéro de série des dates pour faire leur calcul
et donc dans evaluate faite la même chose
il me semble avoir répondu ici
 

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 ;)
 

danielco

XLDnaute Accro
@patricktoulon :
Effectivement, l'ajout de "Format" n'a été qu'une tentative infructueuse de résoudre le problème. J'ai ensuite été trompé par le fait que le même string fonctionnait quand il était copié dans une cellule.

Daniel
 

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


;)
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas