XL 2010 Une curiosité avec une fonction personnalisée qui renvoie une date

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Je fais un essai avec cette fonction personnalisée :
VB:
Function MaDate(Nbjours#, Optional Date_Depart As Date) As String

    Dim fecha As Date
    
    fecha = IIf(IsMissing(Date_Depart), Date, Date_Depart)
    MaDate = DateAdd("d", Nbjours, fecha)
End Function
qui renvoie une date qui correspond à une date définie en paramétrage + un nombre de jours lui aussi défini en paramétrage.
Si l'on omet dans le paramétrage la date, alors ce sera la date du jour qui s'imposera. Quand on fait un essai en mettant une date dans le paramétrage, ça marche. En revanche, si l'on omet de mettre la date, alors le résultat est inattendu ; j'ai l'impression que la date de départ est le 31/12/1899. C'est bizarre.
Où me suis-je encore planté ?
 

eriiic

XLDnaute Barbatruc
Bonjour,

pour l'explication, si tu veux utiliser IsMissing() la variable optionnelle doit être Variant.
VB:
Function MaDate(Nbjours#, Optional Date_Depart) As String
    Dim fecha As Date
    fecha = IIf(IsMissing(Date_Depart), Date, Date_Depart)
    MaDate = DateAdd("d", Nbjours, fecha)
End Function
fonctionne correctement, IsMissing retourne bien True.

C'est voulu As String au lieu de As Date pour la fonction ?
eric
 

Magic_Doctor

XLDnaute Barbatruc
Bonjour eriiic,

Merci pour cet éclaircissement. Il fallait tout simplement déclarer la variable optionnelle comme Variant. Pfff... je me disais aussi !
Quant au String en fin de fonction plutôt que Date. En fait, la fonction définitive renvoie une date sous forme de années:mois:heures:minutes:secondes. Mais hors ce contexte, Date ferait en effet mieux l'affaire.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette