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

Le
christophe.joly
Bonjour:

J'ai une macro ci-dessous qui génère une liste de créneaux horaires e=
n fonction de dates et d'heures de début et de fin et d'une incrémentat=
ion horaire.

Cette macro fonctionne parfaitement avec Excel 2003 et 2007 mais avec Excel=
2010 j'obtiens a VBA runtime error "51" en
nParJour = 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 = CDate(InputBox("Starting Date as mm/dd/yy e.g. 7/27/10", "", "7=
/27/10"))
Jr2 = CDate(InputBox("Ending Date as mm/dd/yy e.g. 7/29/10", "", "7/=
29/10"))
Hh1 = CDate(InputBox("Starting Time e.g. 10:00 AM", "", "10:00 AM"))
Hh2 = CDate(InputBox("Ending Time e.g. 5:30 PM", "", "5:30 PM"))
Pas = CDate(InputBox("Increment e.g. 00:30 for a 30 minutes interval"=
, "", "00:30"))

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

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

V = Evaluate(S)
=


Remerciements,

Christophe
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
DanielCo
Le #25315672
Bonjour,
Sans les données, on ne peut pas vooir grand-chose. Donne les valeurs
de toutes les variables de la ligne en erreur.
Cordialement.
Daniel


Bonjour:

J'ai une macro ci-dessous qui génère une liste de créneaux horaires en
fonction de dates et d'heures de début et de fin et d'une incrémentation
horaire.

Cette macro fonctionne parfaitement avec Excel 2003 et 2007 mais avec Excel
2010 j'obtiens a VBA runtime error "51" en nParJour = 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 = CDate(InputBox("Starting Date as mm/dd/yy e.g. 7/27/10", "",
"7/27/10")) Jr2 = CDate(InputBox("Ending Date as mm/dd/yy e.g. 7/29/10",
"", "7/29/10")) Hh1 = CDate(InputBox("Starting Time e.g. 10:00 AM", "",
"10:00 AM")) Hh2 = CDate(InputBox("Ending Time e.g. 5:30 PM", "", "5:30
PM")) Pas = CDate(InputBox("Increment e.g. 00:30 for a 30 minutes
interval", "", "00:30"))

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

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

V = Evaluate(S)
---------------------------------------------------------------------------------------

Remerciements,

Christophe
christophe.joly
Le #25315882
Bonjour,

Ci-dessous la macro plus complète. Elle fonctionne sur Excel 2003 et 2007 mais bug sur Excel 2010.

Remerciements,

Christophe

Sub DATEandTIME()

If MsgBox(Prompt:="You are going to Reset the Dates & Times of you r scheduling project", Buttons:=vbYesNo + vbQuestion, _
Title:="Change Dates & Times") = vbNo Then
Exit Sub
End If
' Daniel M.
Sheets("DateTime").Select
Range("B2:B65536").Select
Selection.ClearContents

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 = CDate(InputBox("Starting Date as mm/dd/yy e.g. 7/27/10", "", "7 /27/10"))
Jr2 = CDate(InputBox("Ending Date as mm/dd/yy e.g. 7/29/10", "", "7/ 29/10"))
Hh1 = CDate(InputBox("Starting Time e.g. 10:00 AM", "", "10:00 AM"))
Hh2 = CDate(InputBox("Ending Time e.g. 5:30 PM", "", "5:30 PM"))
Pas = CDate(InputBox("Increment e.g. 00:30 for a 30 minutes interval" , "", "00:30"))

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

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

V = Evaluate(S)

Sheets("Country Appointments").Select
Sheets("Country Appointments").Range("B2").Resize(nIntervalles) = App lication.Transpose(V)
Range("B1").End(xlDown).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "NO TIME SET (Int'l visitor request) (01)"
ActiveCell.Offset(1, 0).Select

End Sub
news.free.fr
Le #25315962
Ce qui est intéressant, c'est de connaître la valeur des variables en
cause dans la ligne en erreur.
Daniel
christophe.joly
Le #25315982
Bonjour Daniel,

Je ne sais pas répondre à cette question.

La seule chose que je puisse dire c'est que c'est la ligne

nParJour = Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / Pas + 0.000001)) + 1

qui est surlignée en jaune lorsque j'utilise le debogger.

Merci.

Christophe
MichD
Le #25315992
Bonjour,

Définition d'une erreur de type 51 : "erreur interne"
pas très significative comme message!

| nParJour = Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / Pas + 0.000001)) + 1

Scinde cette ligne de code en section :

Stop
x = Hh2 - Hh1
y = IIf(Hh2 < Hh1, 1, 0)
z = Pas + 0.000001
nParJour = Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / Pas + 0.000001)) + 1

Passe la commande STOP juste avant ces 3 lignes de code, de sorte que tu
pourras les exécuter pas à pas en utilisant la touche F8. Cela devrait te
permettre d'identifier la section qui pose problème et les valeurs associées
aux variables lorsque l'erreur est générée.

MichD
---------------------------------------------------------------
christophe.joly
Le #25316102
Bonjour MichD:

En fait, lorsque j'execute les ligne pas à pas, il n'y pas d'erreur jussq u'à ce que j'arrive sur nParJour = Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / Pas + 0.000001)) + 1
ou j'obtiens une erreur de type 51.

Sinon, en fin de macro par 2 fois, remplacer Sheets("DateTime") en lieu et place de Sheets("Country Appointments") mais ce n'est pas ce qui provoque l 'erreur ci-dessus.

Sur un forum microsoft US j'ai trouvé une erreur comparable avec access 2 010 pour des dates mais peut-être cela n'a strictement rien à voir.
http://answers.microsoft.com/en-us/office/forum/office_2010-access/access-2 010-variant-date-division-runtime-error-51/b0d94022-bd80-42a8-8093-b062b072 1025

Merci.

Christophe
MichD
Le #25316262
Au lieu de te répéter pourquoi ne pas appliquer
la suggestion que je t'ai faite?

MichD
---------------------------------------------------------------
christophe.joly
Le #25317462
Bonjour MichD,

Désolé mais, sauf erreur de ma part, je croyais avoir appliqué ta sug gestion i.e.

Scindé la ligne de code comme suit:

Stop
x = Hh2 - Hh1
y = IIf(Hh2 < Hh1, 1, 0)
z = Pas + 0.000001

nParJour = Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / Pas + 0.000001)) + 1


Comme indiqué dans mon post précédent, l'exécution du code pas à pas à l'aide de F8, ne révèle pas d'erreur en x = Hh2 - Hh1, ni en y = IIf(Hh2 < Hh1, 1, 0) et ni en z = Pas + 0.000001.

Ai-je manqué quelque chose?

Remerceiements,

Christophe
MichD
Le #25317772
| l'exécution du code pas à pas à l'aide de F8, ne révèle
| pas d'erreur en
| x = Hh2 - Hh1
| ni en y = IIf(Hh2 < Hh1, 1, 0)
| et ni en z = Pas + 0.000001

Tu nous ne donnes pas la valeur des variables X, Y et Z...

As-tu tenté de simplement réécrire la ligne de code sans
utiliser le copier-coller simplement pour t’assurer qu'il
n'y a pas un parasite quelconque sur cette ligne de code
et d'effacer complètement la ligne originale.
nParJour = Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / Pas + 0.000001)) + 1



MichD
---------------------------------------------------------------
christophe.joly
Le #25318952
On Wednesday, April 3, 2013 12:44:22 PM UTC+2, MichD wrote:
| l'exécution du code pas à pas à l'aide de F8, ne révèle | pas d'erreur en | x = Hh2 - Hh1 | ni en y = IIf(Hh2 < Hh1, 1, 0) | et ni e n z = Pas + 0.000001 Tu nous ne donnes pas la valeur des variables X, Y e t Z... As-tu tenté de simplement réécrire la ligne de code sans utili ser le copier-coller simplement pour t’assurer qu'il n'y a pas un parasit e quelconque sur cette ligne de code et d'effacer complètement la ligne o riginale. nParJour = Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / Pas + 0.00 0001)) + 1 MichD ---------------------------------------------------------- -----



ReBonjour:

J'ai réécrit la ligne de code mais cela ne change rien.
je ne suis pas certain de comprendre ce que tu veux que je fasse.
J'ai scindé le code en 3 lignes comme indiqué.
Lorsque je lance la Macro elle s'arrête en Mode Break sur Stop, puis lors que j'utilise la touche F8, la macro s'arrête à nouveau sur chacune des lignes de code x, y et z sans provoquer de message d'erreur. Ceci dit je n e sais pas ou trouver la valeur des variables X, Y et Z.

Remerciements,

Christophe
Publicité
Poster une réponse
Anonyme