Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1489 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Erreur d'exécution '6' : dépassement de capacité

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Erreur d'exécution '6' : dépassement de capacité

n°1499782
stagiaire1​3
Posté le 06-01-2007 à 17:36:12  profilanswer
 

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 ?

mood
Publicité
Posté le 06-01-2007 à 17:36:12  profilanswer
 

n°1499847
jpcheck
Pioupiou
Posté le 06-01-2007 à 22:30:11  profilanswer
 

pense à rajouter un end if dans ta fonction factgamma
une cellule excel peut accueilli une valeur maximale il me semble...

n°1499850
stagiaire1​3
Posté le 06-01-2007 à 22:48:33  profilanswer
 

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

n°1499858
jpcheck
Pioupiou
Posté le 06-01-2007 à 23:01:30  profilanswer
 

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 ?

n°1499872
stagiaire1​3
Posté le 07-01-2007 à 01:29:25  profilanswer
 

non non, les valeurs des cellules ne sont pas limitées.
Et oui, j'ai mis les .value

n°1500073
stagiaire1​3
Posté le 07-01-2007 à 20:02:18  profilanswer
 

Coucou, quelqu'un pourrait me venir en aide svp ?
 
C'est vraiment URGENT !!!

n°1500082
seniorpapo​u
Posté le 07-01-2007 à 20:42:35  profilanswer
 

Bonsoir,
inew est limité à 1,79769313486231E308  
Cordialement

n°1500091
stagiaire1​3
Posté le 07-01-2007 à 21:43:16  profilanswer
 

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 ?

n°1500153
seniorpapo​u
Posté le 08-01-2007 à 07:02:07  profilanswer
 

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

n°1500231
tegu
Posté le 08-01-2007 à 11:41:48  profilanswer
 

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.


Message édité par tegu le 08-01-2007 à 11:42:05
mood
Publicité
Posté le 08-01-2007 à 11:41:48  profilanswer
 

n°1500363
stagiaire1​3
Posté le 08-01-2007 à 16:01:10  profilanswer
 

Comment ça ? Il faut rajouter quelquechose dans factgamma?

n°1500609
kiki29
Posté le 09-01-2007 à 04:03:23  profilanswer
 

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


Message édité par kiki29 le 09-01-2007 à 06:55:33
n°1500652
tegu
Posté le 09-01-2007 à 09:49:15  profilanswer
 

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.

n°1501055
seniorpapo​u
Posté le 10-01-2007 à 07:29:50  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Erreur d'exécution '6' : dépassement de capacité

 

Sujets relatifs
Erreur de compilationprobleme d'execution sous IE
Asp.Net Erreur 302 "Object Moved Here"[ASM]erreur de compilation (debutant)
Erreur à corriger suite à validationControle WMP capricieux ou erreur de code ?
Erreur compilationErreur ? oui mais ou ?
Je comprends pas d'où vient mon erreurerreur avec des char*
Plus de sujets relatifs à : Erreur d'exécution '6' : dépassement de capacité


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR