Creation pricer Option : Probleme Cdate

jay18

XLDnaute Nouveau
Hello Tout le monde,

J'ai acheté un livre qui traite des applications financieres sous VBA. Tout allait bien jusqu'à la creation d'un pricer via une userform.

Après avoir crée une liste modifiable pour le N° de jour et de mois, l'année étant une toupie. Je cherchais a coder le clacul de la distance en fractions d'années séparant la date d'aujourd'hui de la date d'échéance saisie par l'utilisateur dans la userform.
J'utilise alors la formule (fausse) donnée par le bouqin :

Public Function Maturité()

DateTexte = CStr(Jour.Value) & "/" & Mois.Value & "/" & CStr(Contenu_Année.Value)

Maturité = (CDate(DateTexte) - Date) / 365

End Function

Après un premier check, j'ai rajouté :

Public Function Maturité()

DateTexte = CStr(UserForm.Jour.Value) & "/" & UserForm.Mois.Value & "/" & CStr(UserForm.Contenu_Année.Value)

Maturité = (CDate(DateTexte) - Date) / 365
End Function

Lorsque j'appuie sur le bouton de mon pricer en utilisant le code suivant :

Private Sub Pricer1_Click()
If TypeCall.Value = True Then
TypeOption = "Call"
Else
TypeOption = "Put"
End If
S = Val(Cours.Value)
K = Val(Strike.Value)
r = Val(Rf.Value)
sigma = Val(Volat.Value)
Prix1.Value = Round(Pricers.BS_STD(TypeOption, S, K, r, sigma, Maturité()), 4)
End Sub

Un message du Débogage me marque que la ligne Maturité = (CDate(DateTexte) - Date) / 365 a un probleme,plus précisément qu'il y a une "incompatibilité de type" au niveau de CDate.

Etant un debutant, je ne vois pas du tout comment je peux arranger ca.Aureiez vous quelques idées?

Merci beaucoup
Jeremy
 

ledzepfred

XLDnaute Impliqué
Re : Creation pricer Option : Probleme Cdate

Bonjour,
as-tu essayé de déclarer la variable Datetext comme étant une Date :
Dim Datetext as Date (à mettre dans le module où il y a la fonction Maturié mais en dehors du code (bref en 1ère ligne).

D'après le code et le bug que tu transmets, Cdate n'arrive pas à convertir en Date une variable qui n'en est pas une, or comme cette variable n'est pas déclarée pour être utilisée dans d'autres procédures quand tu la calcules à travers l'userform sa valeur doit être égale à "". Mets-toi à la place d'excel, impossible pour lui de convertir "" en Date

maintenant je suis peut-être à côté de la plaque mais pour en avoir le coeur net il suffit d'executer le code en mode pas à pas (mets un point d'arret sur la ligne : Maturité = (CDate(DateTexte) - Date) / 365) et utilises ton userform normalement, le code va s'arrêter sur la ligne précitée et tu n'as plus qu'à positionné ton curseur sur Datetext pour voir sa valeur. (mieux encore ajoutes en affichage la fenêtre des variables locales pour vérifier mon hypothèse.
Si ce n'est pas ça un bout de fichier serait le bienvenu pour t'aider

A+
 

jp14

XLDnaute Barbatruc
Re : Creation pricer Option : Probleme Cdate

Bonjour

Avant d'utiliser Cdate on peut vérifier si la donnée est de type Date

If isdate(toto) then
Call MsgBox("la valeur" & toto _
& vbCrLf & "n'est pas une date" _
& vbCrLf & "Vous devez écrire jj/mm/aaaa" _
& vbCrLf & "" _
, vbInformation, Application.Name)
exit sub
end if

A tester

JP
 

ledzepfred

XLDnaute Impliqué
Re : Creation pricer Option : Probleme Cdate

Re...

A bien y réfléchir Datetext= cstr... or Les valeurs renvoyées par la fonction Cstr sont de type string donc Datetext est une chaine de caractère puisque pas déclarée en Date....
en tout cas ce serait logique

a+

edit: pardon pour la collision jp14
 
Dernière édition:

Statistiques des forums

Discussions
312 215
Messages
2 086 316
Membres
103 176
dernier inscrit
jean.yvesjean.yves