Erreur 6 dépassement de capacité

Bonjour, j'essaie de créer une macro qui calcule le prix d'une option selon un modèle mathématique.

L'Option Explicit me permet de faire apparaitre la ligne ou le bug apparait (ci-dessous en rouge).

Je pense que c'est un problème de types de données cependant j'arrive pas à trouver la solution.

Le TypeOption est en String car ce sera du texte (Soit Call soit Put)

Le PrixSpot currency car ça peut être 123,25 pareil pour le Strike

Le tauxinteretsansrisque sera sous la forme d'un % donc un single

L'écheance en année donc Byte

Volatilite en single

d1 et d2 en double

PrixOption en currency comme le prixspot et le strike.

'Déclaration des variables

Dim TypeOption As String, PrixSpot As Currency, Strike As Currency, Tauxinteretsansrisque As Single, echeance As Byte, volatilite As Single, d1 As Double, d2 As Double, Prixoption As Currency


'Faire apparaitre sur le classeur ces variables
Cells(1, 1).Value = "Type d'Option"
Cells(2, 1).Value = "Prix Spot"
Cells(3, 1).Value = "Strike"
Cells(4, 1).Value = "Taux interet sans risque"
Cells(5, 1).Value = "echeance"
Cells(6, 1).Value = "volatilite"
Cells(7, 1).Value = "d1"
Cells(8, 1).Value = "d2"
Cells(9, 1).Value = "Prix de l'option"

'valeurs des variables
TypeOption = Cells(1, 2).Value
PrixSpot = Cells(2, 2).Value
Strike = Cells(3, 2).Value
Tauxinteretsansrisque = Cells(4, 2).Value
echeance = Cells(5, 2).Value
volatilite = Cells(6, 2).Value
d1 = Cells(7, 2).Value
d2 = Cells(8, 2).Value
Prixoption = Cells(9, 2).Value


'Calcul de l'option à partir des variables
d1 = Log(PrixSpot / Strike) + (Tauxinteretsansrisque + ((volatilite * volatilite) / 2) * echeance)

d2 = d1 - (volatilite * Sqr(echeance))

If TypeOption = "Call" Then
Prixoption = (PrixSpot * WorksheetFunction.NormSDist(d1)) - (WorksheetFunction.NormSDist(d2) * Strike * Exp(-Tauxinteretsansrisque * echeance))
Else
Prixoption = (Strike * Exp(-Tauxinteretsansrisque * echeance) * WorksheetFunction.NormSDist(-d2)) - PrixSpot * WorksheetFunction.NormSDist(-d1)


End If

End Sub

Je vous remercie.

bonjour,

En VBA, si tu divises 0 par 0 tu reçois un dépassement de capacité. vérifie tes valeurs PrixSpot et Strike.

Même en remplissant avec des valeurs le prix spot et strike, ça plante ou ça ne remplis pas les cellules avec les valeurs pour d1 et d2.

Je mets en pj le fichier, mais j'avoue que j'aimerais bien comprendre pourquoi exactement ça plante...

bonjour,

merci, de rien, je me demande pourquoi je réponds ...

Pour avoir un résultat dans une cellule, il faut avoir une instruction qui l'y met. Sinon la cellule reste vide !

Mais dès lors que les valeurs "strike" et "prixspot" sont <>0, le code ne génère plus d'erreur de dépassement, Si l'un des deux vaut 0, ça plantera avec d'autres messages (division par zéro) ou (appel de procédure invalide erreur 5, car log(0) n'est pas défini)

Option Explicit
Sub PricingOption()

    'Déclaration des variables

    Dim TypeOption As String, PrixSpot As Currency, Strike As Currency, Tauxinteretsansrisque As Single, echeance As Byte, volatilite As Single, d1 As Double, d2 As Double, Prixoption As Currency

    'Faire apparaitre sur le classeur ces variables
    Cells(1, 1).Value = "Type d'Option"
    Cells(2, 1).Value = "Prix Spot"
    Cells(3, 1).Value = "Strike"
    Cells(4, 1).Value = "Taux interet sans risque"
    Cells(5, 1).Value = "echeance"
    Cells(6, 1).Value = "volatilite"
    Cells(7, 1).Value = "d1"
    Cells(8, 1).Value = "d2"
    Cells(9, 1).Value = "Prix de l'option"

    'valeurs des variables
    TypeOption = Cells(1, 2).Value
    PrixSpot = Cells(2, 2).Value
    Strike = Cells(3, 2).Value
    Tauxinteretsansrisque = Cells(4, 2).Value
    echeance = Cells(5, 2).Value
    volatilite = Cells(6, 2).Value

    'Calcul de l'option ˆ partir des variables
    d1 = Log(PrixSpot / Strike) + (Tauxinteretsansrisque + ((volatilite * volatilite) / 2) * echeance)

    d2 = d1 - (volatilite * Sqr(echeance))

    If TypeOption = "Call" Then
        Prixoption = (PrixSpot * WorksheetFunction.NormSDist(d1)) - (WorksheetFunction.NormSDist(d2) * Strike * Exp(-Tauxinteretsansrisque * echeance))
    Else
        Prixoption = (Strike * Exp(-Tauxinteretsansrisque * echeance) * WorksheetFunction.NormSDist(-d2)) - PrixSpot * WorksheetFunction.NormSDist(-d1)
    End If
    Cells(7, 2).Value = d1
    Cells(8, 2).Value = d2
    Cells(9, 2).Value = Prixoption
End Sub

Excusez-moi, merci d'avoir pris le temps de répondre.

Je vais essayer en intégrant une valeur <> 0 pour les deux variables. Je reviens vers vous pour vous tenir au courant ! Merci encore :)

J'ai réussi ! Merci beaucoup de votre aide :)

Passez une bonne journée !

Rechercher des sujets similaires à "erreur depassement capacite"