Erreur 1004

Résolu/Fermé
Monte_Carlo Messages postés 5 Date d'inscription lundi 3 octobre 2011 Statut Membre Dernière intervention 29 octobre 2011 - 3 oct. 2011 à 00:13
Monte_Carlo Messages postés 5 Date d'inscription lundi 3 octobre 2011 Statut Membre Dernière intervention 29 octobre 2011 - 5 oct. 2011 à 21:59
Bonjour,

J'ai une erreur de type 1004 en excécutant le code suivant : Sub Prix_Monte_Carlo_Americain()
'Calcul le prix de l'option par la méthode de Monte Carlo
'Définitions des variables
Dim Stock() As Double
'On stock les valeurs de S0
Dim StockS0() As Double
'On stock les payoff
Dim StockPrix()
'On stock les payoff actualisés
Dim StockPrixAct() As Double
'Valeur de continuation
Dim Cont As Integer
Dim ColX() As Variant
Dim ColY() As Variant
Dim Reg As Integer
Dim Moy As Double
Dim StD As Double
Dim BornInf As Double
Dim BornSup As Double

'Lecture des paramètres dans la feuille
t = Feuil1.Cells(9, 4).Value
sigma = Feuil1.Cells(8, 4).Value
mu = Feuil1.Cells(7, 4).Value
K = Feuil1.Cells(6, 4).Value
Npas = Feuil1.Cells(10, 4).Value
CP = Feuil1.Cells(11, 4)
Nsims = Feuil1.Cells(3, 4)

'Longueur d'un pas de temps
dt = t / Npas

'Calcul les paramètres de S
Trend = (mu - 0.5 * sigma ^ 2) * dt
Sto = sigma * Sqr(dt)

'Calcul du Z-score pour l'intervalle de confiance
zscore = Application.WorksheetFunction.NormSInv(0.975)

'On stoque les tirages de MC pour calculer l'écart-type
ReDim Stock(1 To Nsims)
ReDim StockS0(0 To Npas - 1, 0 To Nsims - 1)
ReDim StockPrix(0 To Npas - 1, 0 To Nsims - 1)
ReDim StockPrixAct(0 To Npas - 1, 0 To Nsims - 1)

'On enclenche les itérations dont le nombre vaut Nsims
For nsim = 1 To Nsims
'On récupère la valeur de départ de l'ASJ
S0 = Feuil1.Cells(5, 4).Value

'On calcule le prix de l'ASJ au bout de la trajectoire
For i = 1 To Npas
'on génère une variable aléatoire epsilon dans N(0,1)
eps = BoxMuller()
'on calcule le prix de l'action à Maturité
S0 = S0 * Exp(Trend + Sto * eps)
StockS0(i - 1, nsim - 1) = S0
Feuil2.Cells(i, nsim) = StockS0(i - 1, nsim - 1)
StockPrix(i - 1, nsim - 1) = Maximum(S0 - K, 0)
StockPrixAct(i - 1, nsim - 1) = StockPrix(i - 1, nsim - 1) * Exp(-mu * t)
Feuil3.Cells(i, nsim) = StockPrixAct(i - 1, nsim - 1)
Next i

Next nsim


ReDim ColX(0 To Npas - 1)
ReDim ColY(0 To Npas - 1)

For j = Nsims To 0 Step -1

For i = Npas To 0 Step -1

'If j = 0 Then Stop

ColX(j) = Application.WorksheetFunction.Index(StockS0, i, j)
'ColY(j) = Application.WorksheetFunction.Index(StockPrixAct, 0 ,j)

Feuil2.Cells(i, 10) = ColX(3)
Feuil2.Cells(i, 11) = ColX(2)

Next i

'Reg = Application.WorksheetFunction.LinEst(ColY(j), ColX(j))

Next j



End Sub

Le problème se situe à partir de
For j = Nsims To 0 Step -1

For i = Npas To 0 Step -1

Je n'arrive pas à le faire retourner sur la boucle de j une fois que la première boucle i est finie.

Merci d'avance




2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 750
3 oct. 2011 à 10:42
Salut,
Une erreur se situe ici :

For i = Npas To 0 Step -1 
Feuil2.Cells(i, 10) = ColX(3)

Pour i = 0 excel ne connais pas, à juste titre, la cellule située colonne 10 ligne 0.....
à remplacer par :
For i = Npas To 1 Step -1
0
Monte_Carlo Messages postés 5 Date d'inscription lundi 3 octobre 2011 Statut Membre Dernière intervention 29 octobre 2011
5 oct. 2011 à 21:59
Merci ça fonctionne ;)
0