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
 
Solution
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...

patricktoulon

XLDnaute Barbatruc
c'est trop compliqué pour moi !
ben non d'autre se sont cassé la tete avant toi profite de leur expérience

VB:
'*******************************
'DAtediff perso patricktoulon
'date version 10/2019
'*******************************
Function Datediff_AMJ$(ByVal dat1, Optional ByVal dat2 = 0)
    Dim a%, m%, j%, dtemp As Date, Erreur$
    If dat2 = 0 Then dat2 = Date
    Erreur = IIf(Not IsDate(dat1), "(1)", ""): Erreur = Erreur & IIf(Not IsDate(dat2), "(2)", ""): Erreur = IIf(Erreur <> "", "Invalid Argmt(" & Erreur & ")", "")
    If Erreur <> "" Then Datediff_AMJ = Erreur: Exit Function
    dat1 = CDate(dat1): dat2 = CDate(dat2)
    If dat1 > dat2 Then dtemp = dat1: dat1 = dat2: dat2 = dtemp
    a = Evaluate("DATEDIF(" & CDbl(dat1) & "," & CDbl(dat2) & ",""y"")")
    m = Evaluate("DATEDIF(" & CDbl(dat1) & "," & CDbl(dat2) & ",""ym"")")
    j = Abs(DateSerial(Year(dat1) + a, Month(dat1) + m, Day(dat1)) - dat2)
    Datediff_AMJ = RTrim(IIf(a, a & " an" & IIf(a = 1, " ", "s "), "") & IIf(m, m & " mois ", "") & IIf(j, j & " jour" & IIf(j = 1, "", "s"), ""))
End Function

Sub test()
    MsgBox Datediff_AMJ("02/02/2020", "25/01/2017")
    MsgBox Datediff_AMJ("25/01/2017", "02/02/2020")
    MsgBox Datediff_AMJ("04/03/1970")
    MsgBox Datediff_AMJ("toto", "titi")
    MsgBox Datediff_AMJ("25/04/2016", "titi")
End Sub

et en formule
=Datediff_AMJ(A2;B2)
 

danielco

XLDnaute Accro
Soyons fous, quel était le jour de la semaine du 28/2/1900 ?
Excel :
Capture d’écran 2020-10-18 153717.png

VBA :
Capture d’écran 2020-10-18 153820.png


Et le 1/1/1900 ? Dimanche avec Excel ou lundi avec VBA ?

Daniel
 

patricktoulon

XLDnaute Barbatruc
re
VB:
Sub test()
'Soyons fous, quel était le jour de la semaine du 28/2/1900 ?
MsgBox "le 28/2/1900" & vbCrLf & "c' etait le " & Weekday(CDate("28/2/1900"), vbUseSystemDayOfWeek) & " EME jour de la semaine en FR" & vbCrLf _
& "soit un " & Format(CDate("28/2/1900"), "dddd")

End Sub

weekday ou JOURSEM ont les même arguments et donne le même résultat pour peu que l'argument mode de visual basic usesystemdate soit respecté dans les deux et par conséquent Donneront "a same résult "

les arguments vb
vbmonday=2
vbtuesday=3
vbwednesday=4
vbthursday=5
vbfriday=6
vbsaturday=7
vbsunday=
1
vbUseSystemDayOfWeek=0(c'est le joker qui va utiliser le parametre défini de ton pc)


donc!!!!
si en vba je fait

msgbox Weekday(CDate("28/02/1900"), vbmonday)et que j'obtiens 3

avec la formule je fait

=JOURSEM(DATE(1900;2;28);2) j'obtiens 3 aussi


c'est bon ça rentre ?
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Patrick a écrit : « j'ai bien connu ça dans le temps ou je bidouillait les XP Corporate et compagnie »
quoi, quoi, quoi ? tu étais un ancien hacker ? :p alors c'est toi qui a piraté le KGB, le FBI, la CIA,
le Pentagone, et la Maison Blanche ? j'vois d'ici Donald Trump en train d'twitter tout ça en 1ère
page des infos du Web !!! :p:D


soan
 

danielco

XLDnaute Accro
@soan :
Tu trouves également mercredi ? Je n'ai plus qu'à me suicider :)

Microsoft écrit :

Si le comportement reste incorrect, un seul problème se produit :


  • La fonction WEEKDAY renvoie des valeurs incorrectes pour les dates antérieures au 1er mars 1900. Étant donné que la plupart des utilisateurs n’utilisent pas de dates antérieures au 1er mars 1900, ce problème est rare.


Daniel
 

Discussions similaires

Réponses
45
Affichages
4 K
Réponses
18
Affichages
2 K
Réponses
18
Affichages
2 K