Erreur d'exécution '6' : dépassement de capacité - VB/VBA/VBS - Programmation
Marsh Posté le 06-01-2007 à 22:30:11
pense à rajouter un end if dans ta fonction factgamma
une cellule excel peut accueilli une valeur maximale il me semble...
Marsh Posté le 06-01-2007 à 22:48:33
Le End If y est, juste au-dessus du End Function
Alors, d'après toi, pourquoi est-ce que ça bloque ? Pourquoi est-ce que ça met une erreur si mon n est trop grand ?
Je comprend vraiment pas ...
Marsh Posté le 06-01-2007 à 23:01:30
je te demandais justement si une cellule excel a une valeur limite maxi, vu que tu donnes a cells(k,3) une valeur.... d'ailleurs, tu as bien tous les .value dans ton code ?
Marsh Posté le 07-01-2007 à 01:29:25
non non, les valeurs des cellules ne sont pas limitées.
Et oui, j'ai mis les .value
Marsh Posté le 07-01-2007 à 20:02:18
Coucou, quelqu'un pourrait me venir en aide svp ?
C'est vraiment URGENT !!!
Marsh Posté le 07-01-2007 à 20:42:35
Bonsoir,
inew est limité à 1,79769313486231E308
Cordialement
Marsh Posté le 07-01-2007 à 21:43:16
Salut,
je comprend que inew soit limité, mais 1,79769313486231E308 c'est énorme, donc normalement y'a aucun pb si je veux que n soit égal a 100 1000 ou 10000, c'est-à-dire que ma boucle fait 100 1000 ou 10000 itérations, je me trompe ?
Marsh Posté le 08-01-2007 à 07:02:07
Bonjour,
si tu ne trouves pas, peux-tu mettre sur cjoint.com (ou autre) un xls avec tes échantillons et tes formules? en précisant si c'est bien à partir de n=26 que tu as le pb.
Cordialement
Marsh Posté le 08-01-2007 à 11:41:48
J'ai du mal à interpréter les symptômes que tu rencontres.
L'erreur est bien à la compilation et pas à l'exécution ?
Sinon ta fonction FactGamma() n'est pas typée. Cela peut poser problème vu qu'elle sert aux calculs.
Marsh Posté le 08-01-2007 à 16:01:10
Comment ça ? Il faut rajouter quelquechose dans factgamma?
Marsh Posté le 09-01-2007 à 04:03:23
A mon humble avis et à premiere vue un de ces pbs de dépassement de capacité vient entre autre de Fact(1 / Cells(k, 2) si la valeur de cells(k,2) tend vers 0
Marsh Posté le 09-01-2007 à 09:49:15
Tu peux déclarer ta fonction comme suit :
Function FactGamma(ByVal X As Double) As Double |
Cela permet de typer la fonction de la même manière que tes variables.
Reste que je doute que cela soit l'origine du problème.
Marsh Posté le 10-01-2007 à 07:29:50
Bonjour,
prenons
0,195105372 0,005743192
dans factGamma X=199,919 et des poussières
Gammaln(X) = 857,505 et d'autres poussières
e puissance 857.... donne dépassement de capacité
Exp, fonction
Renvoie une valeur de type Double indiquant la valeur de e (base des logarithmes népériens) élevé à une puissance.
Syntaxe
Exp(number)
L'argument number peut contenir une valeur de type Double ou toute expression numérique valide.
Remarques
Si la valeur de l'argument number est supérieure à 709,782712893, une erreur se produit. La constante e est environ égale à 2,718282.
Note La fonction Exp, qui est la fonction réciproque de la fonction Log, est parfois désignée par l'expression "antilogarithme".
Cordialement
Marsh Posté le 06-01-2007 à 17:36:12
Salut,
Quand j'essaie de compiler ce code en VBA, ça me donne l'erreur suivante "Erreur d'exécution '6' : dépassement de capacité"
En fait, ce code me sert a évaluer l'intégrale double suivante grace a Monte Carlo :
1
E(T)= ∫ (Γ(25.8+(1/m)) / ((1/m)! Γ(25.8))) * (0.11^r)((1-0.11)^(1/m)) * (1/m)*((1/m)-1)*(1/m²)
0 1
*[∫ 0.04(350² / (t^3)) ((1-exp(-0.04((350 / t) - 350))))^((1/m)-2)*exp(-2*004((350 / t) - 350)) dt] dm
0
Pour ça, j'utilise la fonction gamma, codée de la manière suivante:
Function FactGamma(ByVal X As Double)
If X > 0 Then
FactGamma = Exp(Application.WorksheetFunction.GammaLn(X))
Else
If X = Int(X) Then FactGamma = "#INFINI!": Exit Function
X = -X + 1
FactGamma = Exp(WorksheetFunction.GammaLn(X))
FactGamma = 4 * Atn(1) / (FactGamma * Sin(4 * Atn(1) * X))
End If
End Function
Voilà mon code pour le calcul de l'intégrale double; je précise que j'ai auparavant simulé deux échantillons de 100 valeurs d'une variable aléatoire suivant une loi uniforme sur [O,1] avec le générateur de nombres aléatoires d'Excel, dans les colonnes 1 et 2 de ma feuille Excel :
Sub k2()
Dim n As Double
Dim k As Double
Dim x0 As Double
Dim r As Double
Dim p As Double
Dim alpha As Double
Dim I1new As Double
Dim I2new As Double
Dim Inew As Double
Dim Enew As Double
n = 25
k = 1
alpha = 0.04
x0 = 350
p = 0.11
r = 25.8
Inew = 0
For k = 1 To n
Cells(k, 3) = (FactGamma(r + (1 / Cells(k, 2))) / ((WorksheetFunction.Fact(1 / Cells(k, 2))) * FactGamma(r))) * (p ^ r) * ((1 - p) ^ (1 / Cells(k, 2))) * (1 / Cells(k, 2)) * ((1 / Cells(k, 2)) - 1) * (1 / (Cells(k, 2) ^ 2)) * alpha * ((350 ^ 2) / (Cells(k, 1) ^ 3)) * ((1 - Exp(-alpha * ((350 / Cells(k, 1)) - 350))) ^ ((1 / Cells(k, 2)) - 2)) * Exp(-2 * alpha * ((350 / Cells(k, 1)) - 350))
Inew = Inew + Cells(k, 3)
Next k
Inew = Inew / n
Cells(11, 11) = Inew
End Sub
Quelqu'un pourrait me dire pourquoi je n'ai pas l'erreur dont j'ai parlé plus haut si je met n=25 et je l'ai si je met n supérieur a 25 svp ?