Fonctions Cdate et Cstr

Signaler
Messages postés
1
Date d'inscription
dimanche 19 décembre 2010
Statut
Membre
Dernière intervention
19 décembre 2010
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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 
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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