Fonctions Cdate et Cstr

Findelz Messages postés 1 Date d'inscription dimanche 19 décembre 2010 Statut Membre Dernière intervention 19 décembre 2010 - 19 déc. 2010 à 20:14
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 20 déc. 2010 à 12:21
Bonsoir,
Dans le cadre de mon pricer d'options j'ai codé la formule suivante :
Function Maturité()
DateTexte = CStr(Jour.Value) & "/" & Mois.Value & "/" & CStr(Contenu_Année.Value)
Maturité = (CDate(DateTexte) - Date) / 365
End Function

Seulement elle ne fonctionne pas sous excel 2010 et winseven 64 bits , ça à un rapport avec ces versions ou j'ai merdé quelque part?
Merci

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 déc. 2010 à 09:40
Salut

Quand on manipule des dates, le choix du type de chaque variable est primordial.
Impossible de te répondre en ne connaissant pas le format de "Jour", "Mois", "Contenu_Année", "DateTexte" ou "Maturité"

Pour ajouter ou soustraire des dates, mieux vaut passer par des fonctions sures comme DateAdd ou DateDiff pour faire des calculs sur une base de date.

Je soupçonne ton code d'appartenir au code d'une feuille Excel.
Dans ce cas, ce serait du VBA et pas du VB6.
Si tel est le cas, regarde bien la différence entre Cellule.Value, Cellule.Value2 et Cellule.Text : Pour les dates, c'est très important de savoir laquelle choisir.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 déc. 2010 à 12:16
Exemple de fonction "propre"

Function Maturité() As Single  ' Important de définir ce que doit renvoyer la fonction
Dim DateTexte As String
Dim NbJours   As Long
DateTexte = CStr(Jour.Value) & "/" & Mois.Value & "/" & CStr(Contenu_Année.Value)
NbJours = DateDiff("d", CDate(DateTexte), Date)  ' Nombre de jours entre 2 dates
Maturité = CSng(NbJours) / 365!  ' Calcul mélangeant les entiers (Long) et obtenir
                                 ' un Single, tel que défini dans la déclaration de la fonction
' Tu noteras le ! après le 365 signalant au système que ce chiffre doit être interprété
' comme un Single (# pour Double, & pour Long, $ pour String ...)
End Function 
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 déc. 2010 à 12:21
ou même encore mieux : Demander au système de fabriquer la date
Function Maturité() As Single
    Dim NbJours   As Long
    NbJours = DateDiff("d", DateSerial(Contenu_Année.Value, Mois.Value, Jour.Value), Date)
    Maturité = CSng(NbJours) / 365!
End Function 
0
Rejoignez-nous