Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Excel 2010: VBA Run-Time Error "51" (Date)

23 réponses
Avatar
christophe.joly
Bonjour:

J'ai une macro ci-dessous qui g=E9n=E8re une liste de cr=E9neaux horaires e=
n fonction de dates et d'heures de d=E9but et de fin et d'une incr=E9mentat=
ion horaire.

Cette macro fonctionne parfaitement avec Excel 2003 et 2007 mais avec Excel=
2010 j'obtiens a VBA runtime error "51" en=20
nParJour =3D Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / Pas + _
0.000001)) + 1


---------------------------------------------------------------------------=
------------
Dim Jr1 As Date, Jr2 As Date, Hh1 As Date, Hh2 As Date, Pas As Date
Dim V As Variant, S As String
Dim nParJour As Integer, nIntervalles As Integer

Jr1 =3D CDate(InputBox("Starting Date as mm/dd/yy e.g. 7/27/10", "", "7=
/27/10"))
Jr2 =3D CDate(InputBox("Ending Date as mm/dd/yy e.g. 7/29/10", "", "7/=
29/10"))
Hh1 =3D CDate(InputBox("Starting Time e.g. 10:00 AM", "", "10:00 AM"))
Hh2 =3D CDate(InputBox("Ending Time e.g. 5:30 PM", "", "5:30 PM"))
Pas =3D CDate(InputBox("Increment e.g. 00:30 for a 30 minutes interval"=
, "", "00:30"))

nParJour =3D Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / Pas + _
0.000001)) + 1
nIntervalles =3D (1 + Jr2 - Jr1) * nParJour

S =3D "TRANSPOSE(MOD(ROW(1:" & nIntervalles & ")-1," & _
nParJour & "))*" & CDbl(Pas) & _
"+TRANSPOSE(INT((ROW(1:" & nIntervalles & _
")-1)/" & CDbl(nParJour) & "))+" & CDbl(Jr1 + Hh1)

V =3D Evaluate(S)
---------------------------------------------------------------------------=
------------

Remerciements,

Christophe

3 réponses

1 2 3
Avatar
christophe.joly
Bonjour MichD,

Merci pour tes conseils. J'ai fait les changements et la bonne nouvelle est que la macro fonctionne toujours avec Excel 2007. Je ne peux pas la tester avec Excel 2010 aujoud'hui mais je ne sais pas pourquoi mais je suis confi ant :-)

Pour info tu as oublié

Do
Pas = InputBox("Increment e.g. 00:30 for a 30 minutes interval", "", "00:30 AM")
If Pas = "" Then
MsgBox "Opération annulée"
Exit Sub
End If
Loop Until IsDate(Pas)
Pas = CDate(Pas)

Merci,

Christophe
Avatar
christophe.joly
Bonjour,

Je te confirme que ta solution fonctionne effectivement non seulement sur E xcel 2007 mais aussi sur Excel 2010.

Mille mercis et sincères salutations,

Christophe

P.S. Je n'ai inclus de date picker mais ce serait effectivement la meilleur e solution pour éviter les erreurs de saisie et de macro.
Avatar
MichD
Merci du retour!


MichD
---------------------------------------------------------------
1 2 3