bonjour,
j'ai une error 1004 "application-defined or object-defined error" qui survient lors de l'exécution de mon code, et je n'arrive pas à en trouver la source.
cette erreur survient lorsque je rajoute l'item "*" & dblZ
lors du débuguage, je vois que ce dblZ est bien attribué, il m'affiche la valeur 0,98 mais l'erreur apparait. elle disparait si j'enlève cet item.
cet item est calculé par une autre macro
avec la fonction CalculZviaPcTcPT comme suit :
cette fonction me permet de calculer les différents terme d'une équation de degré 3.
vous remarquerez qu'elle fait aussi appel à une autre fonction, DEG3b, qui s'écris tel que :
cette fonction me permettant de résoudre l'équation de degré 3 (dans mon cas particulier).
en exécutant en pas à pas depuis la ligne précédente, je me rends compte que l'exécution repasse par la fonction CalculZviaPcTcPT alors que ce calcul a déjà été fais quelques lignes avant ! pour moi la variable est déjà censé avoir été définie mais elle encore calculée lorsqu'elle apparait dans la ligne de code
De plus, en pas à pas, le code tourne en boucle entre la fonction CalculZviaPcTcPT et DEG3b : arrivé au End Function de CalculZviaPcTcPT, on repars au début de cette même fonction ...
je ne suis pas sûr que l'erreur vienne de là, mais pour moi ce n'est pas normal.
voilà, je sais pas trop où chercher, tout marche très bien, le calcul de dblZ est correct mais dès que je fais appel à ce terme dans le code ça bug
je suis ouvert à tout vos conseils, parce que là je ne vois pas comment faire !
MAJ : en supprimant ces deux macro et en intégrant le calcul de dblZ à la macro initial, l'erreur apparait aussi...
j'ai une error 1004 "application-defined or object-defined error" qui survient lors de l'exécution de mon code, et je n'arrive pas à en trouver la source.
Code:
.Range("R3").Offset(lngNbEvent, intNumTemps * 35).Value = "= -( " & .Range("Q3").Offset(lngNbEvent, intNumTemps * 35).Address _
& "-" & .Range("P3").Offset(lngNbEvent, intNumTemps * 35).Address & ") /" & .Range("O3").Offset(lngNbEvent, intNumTemps * 35).Address & "*" & dblVBout & "*" & dblZ
cette erreur survient lorsque je rajoute l'item "*" & dblZ
lors du débuguage, je vois que ce dblZ est bien attribué, il m'affiche la valeur 0,98 mais l'erreur apparait. elle disparait si j'enlève cet item.
cet item est calculé par une autre macro
Code:
dblZ = Round(CalculZviaPcTcPT(dblPressCrit, dblTempCrit, dblPress, dblTemp), 6)
avec la fonction CalculZviaPcTcPT comme suit :
Code:
Function CalculZviaPcTcPT(ByVal Pc#, ByVal Tc#, ByVal P#, ByVal T#)
Dim A, B, q, r, c, d, Pr, Tr As Double
Pr = P / Pc
Tr = T / Tc
A = 0.42747 * Pr / (Tr ^ 2.5)
B = 0.08664 * (Pr / Tr)
q = (B ^ 2) + B - A
r = A * B
c = -q
d = -r
CalculZviaPcTcPT = DEG3b(c, d)
End Function
cette fonction me permet de calculer les différents terme d'une équation de degré 3.
vous remarquerez qu'elle fait aussi appel à une autre fonction, DEG3b, qui s'écris tel que :
Code:
Function DEG3b(ByVal c#, ByVal d#)
Application.Volatile
Dim B#, A#, P#, q#, r#, s#, rx1#, rx2#, rx3#, ix2#, ix3#
A = 1
B = -1
B = B / A / 3
P = B * B - c / A / 3
q = (B * c - d) / A / 2 - B * B * B
r = q * q
s = P * P * P
If Abs(r - s) < 0.00000000000001 Then
P = Sgn(q) * Abs(q) ^ (1 / 3)
rx1 = 2 * P
rx2 = -P
rx3 = -P
ElseIf r < s Then
If r / s >= 1 Then r = 2 * (1 - Sgn(q)) * Atn(1) Else r = Atn(-q / Sqr(s - r)) + 2 * Atn(1)
rx1 = Sqr(P) * Cos((r + 8 * Atn(1)) / 3) * 2
rx2 = Sqr(P) * Cos((r - 8 * Atn(1)) / 3) * 2
rx3 = Sqr(P) * Cos(r / 3) * 2
Else
r = Sqr(r - s)
P = Sgn(q + r) * Abs(q + r) ^ (1 / 3)
q = Sgn(q - r) * Abs(q - r) ^ (1 / 3)
rx1 = q + P
rx2 = -rx1 / 2
ix2 = Sqr(3) * (q - P) / 2
rx3 = rx2
ix3 = -ix2
End If
If ix3 = 0 Then
DEG3b = rx3 - B
Else
DEG3b = rx1 - B
End If
'DEG3b = Array(rx1 - b, rx2 - b, ix2, rx3 - b, ix3)
End Function
cette fonction me permettant de résoudre l'équation de degré 3 (dans mon cas particulier).
en exécutant en pas à pas depuis la ligne précédente, je me rends compte que l'exécution repasse par la fonction CalculZviaPcTcPT alors que ce calcul a déjà été fais quelques lignes avant ! pour moi la variable est déjà censé avoir été définie mais elle encore calculée lorsqu'elle apparait dans la ligne de code
De plus, en pas à pas, le code tourne en boucle entre la fonction CalculZviaPcTcPT et DEG3b : arrivé au End Function de CalculZviaPcTcPT, on repars au début de cette même fonction ...
je ne suis pas sûr que l'erreur vienne de là, mais pour moi ce n'est pas normal.
voilà, je sais pas trop où chercher, tout marche très bien, le calcul de dblZ est correct mais dès que je fais appel à ce terme dans le code ça bug
je suis ouvert à tout vos conseils, parce que là je ne vois pas comment faire !
MAJ : en supprimant ces deux macro et en intégrant le calcul de dblZ à la macro initial, l'erreur apparait aussi...
Dernière édition: