Synthaxe boucle While

Bonsoir,

Y-a-t-il un soucis de synthaxe dans l'écriture de ma boucle while, la boucle ne s'arrête pas de tourner, par ailleurs quel est l'équivalent de l'instruction c++ break svp;

Le bouton CDOMC lance la Sub

cf fichier en pièce jointe

Cdt

Ludo

Function partieentiere(x As Double) As Long
partieentiere = Int(x)
End Function

Sub CDOPRICE()
Dim Barrierenonfranchise As Integer
''Get data
St = Worksheets("Feuil1").Cells(3, 1)
t = Worksheets("Feuil1").Cells(3, 6)
K = Worksheets("Feuil1").Cells(3, 2)
K2 = Worksheets("Feuil1").Cells(5, 2)
r = Worksheets("Feuil1").Cells(3, 4)
M = Worksheets("Feuil1").Cells(3, 5)
sigma = Worksheets("Feuil1").Cells(3, 3)
N = Worksheets("Feuil1").Cells(5, 6)
epsilon = Worksheets("Feuil1").Cells(12, 7)
L = Worksheets("Feuil1").Cells(17, 2)
div = Worksheets("Feuil1").Cells(17, 5)
Barrierenonfranchise = 1
Dim Stplusdt As Double
Dim i As Long
Dim j As Long
For i = 1 To N
    While (Barrierenonfranchise = 1 Or j <> M * 260)
        For j = partieentiere((t + 1) * 260) To M * 260
            Randomize
            unif = Rnd
            z = WorksheetFunction.NormInv(unif, 0, 1)
            Stplusdt = St * Exp((r - 0.5 * WorksheetFunction.Power(sigma, 2)) * (M - j / 260) + sigma * WorksheetFunction.Power(M - j / 260, 0.5) * z)
            If Stplusdt < L Then
                Barrierenonfranchise = 0
            End If
        Next
    Wend
    If Barrierenonfranchise = 1 Then
        If (St > L) Then
            moyenneCDO = moyenneCDO + partiepositive(St * Exp((r - 0.5 * WorksheetFunction.Power(sigma, 2)) * (M - t) + sigma * WorksheetFunction.Power(M - t, 0.5) * z) - K)
        ElseIf (St < L) Then
            moyenneCD0 = 0
        End If
    ElseIf Barrierenonfranchise = 0 Then
    moyenneCD0 = 0
    End If
Next

Worksheets("Feuil1").Cells(23, 4) = moyenneCDO / N
End Sub

Bonjour,

si c'était une erreur de syntaxe (sans h, ça fait mal aux yeux) tu aurais un message à la compilation, ça doit plutôt être une erreur de conception.

C'est que ta condition de sortie c'est jamais réalisée ou bien que c'est beaucoup plus que tu ne le penses.

Stop pour un point d'arrêt.

C'est quoi l'intérêt de :

Function partieentiere(x As Double) As Long
partieentiere = Int(x)
End Function

???

eric

Bonjour,

fais un debug.print comme ceci

    While (Barrierenonfranchise = 1 Or j <> M * 260)
Debug.Print j; M
        For j = partieentiere((t + 1) * 260) To M * 260

les valeurs de j et M n'évoluent jamais à ce stade de ton programme ... c'est sans fin

j est toujours égal à 261 et M*260 égal à 260

et je ne vois pas évoluer M dans la boucle

capture d ecran 331

il reste la condition Barrierenonfranchise = 1 Steelson.

Avec comme boucle For j = xxxx To M * 260, j ne peut qu'être égal à M*260+1, et donc toujours différent de M*260

Ce Or ne sert à rien en effet.

eric

Merci j'ai résolu le pb d'incrémentation, et j'ai utilisé un goto à la place du while.

Cdt.

Ludovic

Rechercher des sujets similaires à "synthaxe boucle while"