Problème avec boucle code VBA
Bonjour,
J'ai un problème pour réaliser une boucle sur le code ci dessous. Il fonctionne bien pour une simulation. J'aimerais pouvoir le lancer NbCinf fois et obtenir à chaque fois dans ThisWorkbook.Sheets("Feuil3").Cells(l,1) = MC_CallPrice la valeur renvoyée à chaque fin de simulation afin d'en faire une moyenne (l était l'indice que j'ai choisi pour la grande boucle).
J'ai beau cherché, je n'y arrive pas. la boucle ne fonctionne pas. Il ne lance le traitement qu'une seule fois
Sub Bouton2_QuandClic()
Dim NbrPas As Single
McMethod = Range("MCMethode").Value
NbCInf = Range("NbCinf").Value
S0 = Range("TheSpot").Value
K = Range("TheStrike").Value
R = Range("TheFreeRate ").Value
NbrSteps = Range("Pas").Value
T = Range("TheMaturity").Value
sigma = Range("TheVol").Value
nbsim = Range("NbSimul").Value
ReDim Ct(NbrSteps, nbsim)
ReDim CallFinal(NbCInf, 1)
ReDim callpayoffvec(1 To nbsim, 1 To 1)
ReDim putpayoffvec(1 To nbsim, 1 To 1)
ReDim Trajec(NbrSteps, nbsim)
ReDim ones(NbrSteps, 1)
ReDim zeros(NbrSteps, 1)
Dim d1 As Double
Dim d2 As Double
Dim BS As Double
Dim Plage As Range
Dim shp As Shape
Worksheets("St").Range("A1:BZ60000").ClearContents
Worksheets("Feuil7").Range("A1:BZ60000").ClearContents
Worksheets("Ct").Range("A1:BZ60000").ClearContents
Dim counter As Single
counter = 1
dt = T / NbrSteps
Application.ScreenUpdating = False
Set f1 = Worksheets("St")
Set f2 = Worksheets("Pricer")
On Error Resume Next
f2.ChartObjects.Delete
On Error GoTo 0
randvec = NRandVars(NbrSteps * nbsim * NbCInf)
Spresent = S0 * ones(NbrSteps, 1)
Ssuivant = zeros(NbrSteps, 1)
With f1
.Rows(1).Clear
For i = 1 To nbsim
'Spresent = S0 * ones(NbrSteps, 1)
Spresent = S0
.Cells(1, 1) = S0
curtime = 0
tmpsum = 0
For j = 1 To NbrSteps
curtime = curtime + dt
randvar = randvec(counter)
dW = (dt ^ 0.5) * randvar
Ssuivant = Spresent + (R) * Spresent * dt + sigma * (Spresent ^ 1.5) * dW
.Cells(j, i) = Ssuivant
Spresent = Ssuivant
tmpsum = tmpsum + Ssuivant
counter = counter + 1
Next j
stavg = tmpsum / NbrSteps
callpayoffvec(i, 1) = Exp(-R * T) * Application.Max(stavg - K, 0)
putpayoffvec(i, 1) = Exp(-R * T) * Application.Max(K - stavg, 0)
Next i
With f1
Set Plage = f1.[A1].CurrentRegion
Set shp = f2.Shapes.AddChart
With .Range("F35:M50")
shp.Top = .Top
shp.Left = .Left
shp.Height = .Height
shp.Width = .Width
End With
With shp
.Name = "Graph_1"
With .Chart
.SetSourceData Source:=Plage, PlotBy:=xlColumns
.ChartType = xlLine
.Location where:=xlLocationAsObject, Name:=f2.Name
End With
End With
End With
Set f1 = Nothing: Set Plage = Nothing: Set shp = Nothing
'MC_CallPrice = Exp(-R * T) * GetMean(callpayoffvec)
' MC_CallPrice = Exp(-R * T) * GetMean(callpayoffvec)
Range("CallBrut").Value = MC_CallPrice
'Range("Put").Value = MC_putprice
End With
ThisWorkbook.Sheets("Feuil3").Cells(l, 1).Value = MC_CallPrice
End Sub
Bonjour
Moi je ne sais pas
Mais si tu veux avoir plus de chance d'avoir des réponses penses à joindre un fichier dans lequel tu expliques ce qu'il faut faire et ce que tu veux obtenir
Fais des exemples de résultats à obtenir
J'ai trouvé !
Il me fallait ajouter une variable pour stocker le résultat de chaque k et surtout réactualiser l'ensemble de mes paramètres entre deux k pour ne pas biaiser mes résultats suivants.
C'était plus un problème de conception que de code, je crois.
Merci