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 SubExcusez-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 !