Résolu XL 2016 VBA Evaluate

danielco

XLDnaute Accro
Bonjour,

Je ne vois pas où se situe mon erreur, entre ces deux lignes :
VB:
  [A10].Formula = "=DATEDIF(""" & Format(zv_Debut, "d/m/yyyy") & """,""" & Format(zv_Fin, "d/m/yyyy") & """,""md"")"
  Var = Evaluate("=DATEDIF(""" & Format(zv_Debut, "d/m/yyyy") & """,""" & Format(zv_Fin, "d/m/yyyy") & """,""md"")")
La première renvoie 1 et la seconde un erreur :
?zv_Debut
16/04/2019
?zv_Fin
17/10/2020
?[A10]
1
?var
Erreur 2015

Merci d'avance.

Daniel
 
Ce fil a été résolu! Aller à la solution…

BrunoM45

XLDnaute Barbatruc
Re,

Je t'ai répondu dans le sujet ICI

Mais apparemment tu ne veux pas écouter ce qu'on te dit :rolleyes:

Arf, mais en plus ce n'est pas pour toi pour quelqu'un qui à posé la question sur le forum

Non mais sans déconner, tu aimes t'attribuer la gloire d'une réponse donné par un autre !?
 
Dernière édition:

danielco

XLDnaute Accro
J'ai bien lu ton message. Il n'explique pas pourquoi le même string utillisé pour mettre une formule dans une cellule ne fonctionne pas avec "Evaluate".

Daniel
 

danielco

XLDnaute Accro
Pour le reste, tant en ce qui concerne le contenu que la forme de ton précédent post :
Essaie :
1. de rester courtois (ne serait-ce que pour respecter la charte de ce forum)
2. de modérer tes propos. On n'a pas gardé les porcs ensemble.
3. de lire ce qui est écrit. Je ne revendique pas la "gloire" de donner une solution (quelle bêtise de le penser). Je cherche seulement à aider le demandeur.

Au plaisir de ne plus te lire. Je ne te répondrai d'ailleurs pas.

Daniel
 
  • J'aime
Reactions: cp4

soan

XLDnaute Accro
Bonsoir @danielco,

dans ta 2ème ligne de code VBA, tu utilises le nom de variable « Var » ;
maintenant, regarde cette image :


Image.jpg

alors même si Var n'est pas un mot-clé de VBA mais un mot-clé d'Excel,
peut-être qu'il y a quand même une interférence gênante entre les 2 ?

je dis bien « peut-être », et à part ça, je n'ai pas d'autre piste. ;)
alors suggestion : si c'est ça, utilise un autre nom de variable.


soan
 
Dernière édition:

soan

XLDnaute Accro
@danielco (salut Patrick ;))

à tout hasard, lis le
post #3 de djidji59430 (et mon post situé en dessous)

c'est peut-être ça qui est la cause des résultats différents pour les 2 lignes ?
... ou peut-être que je me trompe, et que ça a rien à voir ?


soan
 

soan

XLDnaute Accro
@danielco

j'ai trouvé autre chose : tu as marqué dans l'énoncé : « Erreur 2015 »

or 2015 est le n° d'erreur de la constante xlErrValue ;

et xlErrValue corespond à #VALUE! (dans une cellule de la feuille) ;

donc si c'est ça, vérifie tes données sur la feuille de calcul ! ;)

si c'est toujours pas ça, lis mon post #9 ci-dessus,
si tu l'as pas déjà lu. :rolleyes:


soan
 

danielco

XLDnaute Accro
@danielco

j'ai trouvé autre chose : tu as marqué dans l'énoncé : « Erreur 2015 »

or 2015 est le n° d'erreur de la constante xlErrValue ;

et xlErrValue corespond à #VALUE! (dans une cellule de la feuille) ;

donc si c'est ça, vérifie tes données sur la feuille de calcul ! ;)

si c'est toujours pas ça, lis mon post #9 ci-dessus,
si tu l'as pas déjà lu. :rolleyes:


soan
Il va être temps que je ferme la boutique, par mes yeux finissent par se croiser. Je ne vois pas le rapport entre le post #9 et mon problème, ou alors, ce post a trait aux résultats différents ?
Sinon, mes données ne sont pas sur la feuille. J'utilise deux variables :
VB:
zv_Debut = #4/16/2019#
zv_Fin = Date
toto = Evaluate("=DATEDIF(""" & Format(zv_Debut, "d/m/yyyy") & """,""" & Format(zv_Fin, "d/m/yyyy") & """,""md"")")
Merci de ta persévérance.
Daniel
 

soan

XLDnaute Accro
Bonjour Daniel,

Tu as écrit : « Je ne vois pas le rapport entre le post #9 et mon problème »

Dans le code VBA de ton post #11 ci-dessus, il y a :


toto = Evaluate("=DATEDIF(""" & Format(zv_Debut, "d/m/yyyy") & """,""" &
Format(zv_Fin, "d/m/yyyy") & """,""md"")")

Le post #9 contient un lien sur le post #3 de djidji59430 ; as-tu cliqué dessus ?
si oui : djidji a d'abord mentionné une page du support Microsoft concernant
des problèmes connus de l'utilisation de l'argument "md" pour la fonction
DATEDIF() ; puis il a indiqué une façon de contourner un de ces problèmes.

alors bon, c'est vrai que je t'ai fourni ce lien plus comme complément d'infos
sur les problèmes connus de "md" avec DATEDIF() que pour autre chose, en
m'disant qu'ça pourrait peut-être te servir un jour. :)

comme y'a utilisation conjointe de DATEDIF() et "md", j'pensais qu'c'était
valable sur une feuille de calcul et en VBA)


soan
 
Ce message a été identifié comme étant une solution!

danielco

XLDnaute Accro
Bonjour Daniel,

Tu as écrit : « Je ne vois pas le rapport entre le post #9 et mon problème »

Dans le code VBA de ton post #11 ci-dessus, il y a :


toto = Evaluate("=DATEDIF(""" & Format(zv_Debut, "d/m/yyyy") & """,""" &
Format(zv_Fin, "d/m/yyyy") & """,""md"")")

Le post #9 contient un lien sur le post #3 de djidji59430 ; as-tu cliqué dessus ?
si oui : djidji a d'abord mentionné une page du support Microsoft concernant
des problèmes connus de l'utilisation de l'argument "md" pour la fonction
DATEDIF() ; puis il a indiqué une façon de contourner un de ces problèmes.

alors bon, c'est vrai que je t'ai fourni ce lien plus comme complément d'infos
sur les problèmes connus de "md" avec DATEDIF() que pour autre chose, en
m'disant qu'ça pourrait peut-être te servir un jour. :)

comme y'a utilisation conjointe de DATEDIF() et "md", j'pensais qu'c'était
valable sur une feuille de calcul et en VBA)


soan
Effectivement. Je n'avais pas vu ce qui, ce matin, parait évident. C'est exactement l'explication à mon problème.

Merci infiniment.

Daniel
 

patricktoulon

XLDnaute Barbatruc
Bonjour a tous
permettez moi de vous rappelez ce que l'aide dit pour md
Capture.JPG


et donc si je fait un simple test
a oui !!!j'oubliais comparez le long de la date SVP et non son string dans Evaluate vous me ferrez plaisir

donc on teste

VB:
Sub test()
    Dim i&
    For i = 1 To 10
        date1 = CDate(i & "/10/2020")
        date2 = Date    ' donc aujourdh'ui
        Var = Evaluate("=DATEDIF(""" & CLng(date1) & """,""" & CLng(date2) & """,""md"")")
        MsgBox Day(date1) & "  " & Day(date2) & vbCrLf & Var
    Next
End Sub
et désolé de vous le dire mais le résultat est juste si on comprend bien ce qui est dit dans l'aide

demo6.gif

donc la fonction fonctionne tres bien sauf qu'elle a toujours été mal comprise pour l'argument "md"

et pour conclure je dirais qu''elle est utilisable avec "md" pour seulement comparer 2 dates du même mois/année
puisque comme il est clairement dit dans l'aide que "md" fait abstraction des mois années

ps j'ai donné un fichier qui regroupait plusieurs méthodes pour donner la datedif jour,mois,année
si vous aviez pris la peine de le regarder certaines choses auraient été plus claires


en gros !!!

avec md on compare simplement la différence des nombres représentant les jours des deux dates
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
de rien Soan

j'ajouterais qu'a mon sens cet argument voir même 'j" n'a aucune utilité dans le sens ou abs(date1-date2)te donnera le nombre de jours avec prise en compte des mois/années
(ABS) au cas ou date1<date2 a moins que l'on veuille garder le contexte "SGN" de l’opération

les fonctions date et VBA/excel toute un histoire :p :oops::rolleyes:
 

soan

XLDnaute Accro
tu as écrit : « les fonctions date et VBA/excel toute un histoire :p :oops::rolleyes: »

oui, je suis entièrement d'accord avec ta conclusion ! (même si j'aurais préféré
que les fonctions date et ce qui leur est lié soient moins compliqués !)


soan
 

danielco

XLDnaute Accro
Bonjour à tous,
à @patricktoulon : tu écris :
a oui !!!j'oubliais comparez le long de la date SVP et non son string dans Evaluate vous me ferrez plaisir
Pourtant, l'aide parle bien de "chaînes de texte" :
Capture d’écran 2020-10-18 124553.png
Et d'ailleurs, la formule :
VB:
=DATEDIF("16/4/2019";"17/10/2020";"md")
fonctionne. Que le résultat soit ou non correct, c'est autre chose. Ton classeur, très intéressant par ailleurs, ne traite pas de mon problème, sauf erreur de ma part. J'ai donc, contrairement à ce que tu écris en gras, pris le temps de le regarder.
En ce qui concerne ton code de test, je ne comprends pas trop, puisque tu évalues une chaîne de texte :
Code:
Sub test()
    For i = 1 To 10
        date1 = CDate(i & "/10/2020")
        date2 = Date    ' donc aujourdh'ui
        [A1] = "=DATEDIF(""" & CLng(date1) & """,""" & CLng(date2) & """,""md"")"
        Var = Evaluate("=DATEDIF(""" & CLng(date1) & """,""" & CLng(date2) & """,""md"")")
        MsgBox Day(date1) & "  " & Day(date2) & vbCrLf & Var
    Next
End Sub
mets :
Code:
=DATEDIF("44105";"44122";"md")
en A1 (pour i=1). Il faut donc admettre que le résultat de "Evaluate" n'est pas conforme à l'aide Excel.

Daniel
 

danielco

XLDnaute Accro
tu as écrit : « les fonctions date et VBA/excel toute un histoire :p :oops::rolleyes: »

oui, je suis entièrement d'accord avec ta conclusion ! (même si j'aurais préféré
que les fonctions date et ce qui leur est lié soient moins compliqués !)


soan
A partir du moment ou Microsoft a décidé que l'année 1900 était bissextile (pour des raisons de compatibilité ?), ça commençait fort...

Daniel
 

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