Bonjour,

je fais mes premiers pas sur vba.
J'essaie de réaliser un fichier excel avec vba pour un travail de finance.

Quand je le lance, j'ai l'erreur subscript out of range qui apparait. Je ne comprends pas ce que ca veut dire et ce que je dois changer. Quelqu'un pourrait il me sauver ?

merci d'avance !
Deborah

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Public Function PricingArbreBinomial(NbreDePas As Integer) As Double


ReDim PrixCall(NbreDePas) As Double

Dim hausse As Double
Dim baisse As Double
Dim ProbaRN As Double
Dim St As Double

Dim S0 As Double
Dim r As Double
Dim T As Double
Dim K As Double
Dim Barriere As Double
Dim d As Double
Dim vol As Double

    
    S0 = Sheets("Pricing").Range("D5").Value
    r = Sheets("Pricing").Range("D6").Value
    T = Sheets("Pricing").Range("D7").Value
    K = Sheets("Pricing").Range("D8").Value
    Barriere = Sheets("Pricing").Range("D9").Value
    d = Sheets("Pricing").Range("D10").Value
    vol = Sheets("Pricing").Range("D11").Value
    NbreDePas = Sheets("Pricing").Range("E20").Value


hausse = Exp((r - d) * T / NbreDePas + vol * Sqr(T / NbreDePas))
baisse = Exp((r - d) * T / NbreDePas - vol * Sqr(T / NbreDePas))
ProbaRN = (Exp((r - d) * T / NbreDePas) - baisse) / (hausse - baisse)

For i = 0 To NbreDePas      
St = S0 * hausse ^ (NbreDePas - i) * baisse ^ i
    If (St >= Barriere) Then
        If St > K Then
        PrixCall(i) = St - K      ----> l'erreur est sur cette ligne
  
        Else
        PrixCall(i) = 0
        End If
    Else
    PrixCall(i) = 0
    End If
Next i

 
 
For j = 0 To NbreDePas - 1    'calcul des valeurs intermédiaires du spot (remplissage par ligne)
    For i = 1 To NbreDePas - j
        St = S0 * hausse ^ (NbreDePas - j - i) * baisse ^ j
        If St > Barriere Then
            PrixCall(i) = (ProbaRN * PrixCall(i) + (1 - ProbaRN) * PrixCall(i + 1)) / Exp(r * T / NbreDePas)
            Else
            PrixCall(i) = 0
        End If
    Next i
Next j


PricingArbreBinomial = PrixCall(0)

End Function