Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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:
C

Compte Supprimé 979

Guest
Salut Danielco

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

Edit supprimé

@+
 
Dernière modification par un modérateur:

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
5 K
Réponses
22
Affichages
1 K
Réponses
21
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…