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
| 'Evite les accents dans les nom de variable ou de nom de procédure/fonction
'Précise de quel type est ta fonction (As Double ici je suppose)
Function Maturite() As Double
'Il est préférable de déclarer tes variables
'Place toujours au moins une majuscule dans chaque variable pour les repérer plus facilement
'Dim DateTexte As String
Dim DateMature As Date
'DateTexte = CStr(jour.Value) & "/" & mois.Value & "/" & CStr(contenu_année.Value)
DateMature = DateSerial(contenu_année.Value, mois.Value, jour.Value)
'Maturite = (CDate(DateTexte) - Date) / 365
'Si ton besoin est de connaitre le nombre d'année dans une periode
Maturite = DateDiff("d", DateMature, Date)
End Function
'Attention lors de la dclaration de plusieur variable, il faut préciser le type pour chaque variable
'Sinon VBA déclare les variables non typés comme étant de type variant
Function Pricers(s As Double, k As Double, r As Double, Sigma As Double, t As Double) As Double
Dim d1 As Double
Dim d2 As Double
d1 = (Log(s / k) + (r + 0.5 * Sigma ^ 2) * t) / (Sigma * Sqr(t))
d2 = d1 - Sigma * Sqr(t)
Pricers = (s * WorksheetFunction.NormDist(d1) - k * Exp(-r * t) * WorksheetFunction.NormDist(d2))
End Function
Private Sub Pricer1_Click()
'Soit tu déclares tes variables, soit tu utilises directement les valeurs dans l'appelle de la fonction
'Sans variables ça donne ça
'Comme dit dans un message précédent regarde du coté de Cdbl dans l'aide, il existe plusieurs autres fonction
'qui permettent de faire du transtypage
's = Val(cours.Value)
'k = Val(Strike.Value)
'r = Val(rf.Value)
'Sigma = Val(volat.Value)
prix1.Value = Round(Pricers(CDbl(cours.Value), CDbl(Strike.Value), CDbl(rf.Value), CDbl(volat.Value), Maturite()), 4)
End Sub |
Partager