fonction UDF sur la conversation d'une date ANSI vers le format français....

Le
bpascal123
Bonjour,

Ci-dessous, je dois utiliser deux versions diffrentes de cette fonction =
diffrents endroits du code sinon le rsultat retourn (la date d=
d/mm/aaaa) en format franais n'est pas le mme quand la fonction est a=
ppel dans un module et quand elle est appele dans un autre module.

Public Function PDB(vdt As String) As Variant 'PreventDateBug
'
'Cette fonction prend une date au format US au format AAAA/MM/JJ
'comme paramtre et renvoie une date au format JJ/MM/AAAA
'
Dim str As String
str = DateSerial(Year(vdt), Month(vdt), Day(vdt)) 'date"
str = CDate(str)
'PDB = Format(str, "mm/dd/yyyy")
PDB = str
End Function


Public Function PDB4Rep(vdt As String) As Variant 'PreventDateBug
'
'Cette fonction prend une date au format US au format AAAA/MM/JJ
'comme paramtre et renvoie une date au format JJ/MM/AAAA
'
Dim str As String
str = DateSerial(Year(vdt), Month(vdt), Day(vdt)) 'date"
str = CDate(str)
PDB4Rep = Format(str, "mm/dd/yyyy")
'PDB = str
End Function

C'est un peu par hasard que j'ai trouv que format a fonctionnait avec=
format dans la seconde et qui fallait s'en tenir CDate dans la premire.

Quand je vois la fonction FormatAPI de Open/LibreOffice basic qui est tr=
s puissante en comparaison celle de Vba parce que je crois qu'il y a le=
s paramtres rgionnaux du systme d'exploitation derrire. Je suis=
en format rgional France et en sparation dcimale avec la virgule =
classique (incurve). Dans l'aide Vba, format peut bugger sur le symbole =
de sparation des milliers ou dcimal. Mais je ne crois pas que c'est c=
e quoi je suis confront. J'ai fait quelques recherches mais il n'y a=
pas beaucoup de rsultats part http://didier-gonard.developpez.com/t=
utoriels/office/excel/comprendre-et-gerer-dates-sous-excel-et-vba/ mais il =
ne semble pas sre du traitement sous vba.



Cordialement,
Pascal
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26312684
Bonjour,

Une variable déclarée de type "String" et représentant une date est l'équivalent de ceci :

Si j'écris : 05/06/08 et je ne te dis pas ce que j'ai en tête comme format de date,

est-ce que cette date représente : 5 juin 2008 ou 6 mai 2008 ou 8 juin 2005 ?

C'est ce à quoi est confronté Excel.

Lorsque tu es en VBA, Excel interprète cette date toujours au format AMÉRICAIN. C'est par design!

Lorsque VBA se rend compte que cette interprétation est impossible (par exemple, il n'y a pas 14
mois)
il recherche un format date qui pourrait convenir. Cela est source de confusion et selon la date que
l'on passe,
le résultat peut-être très différent de celui qu'on attend.

Si tu passes à une procédure ou à une fonction une variable de type "DATE" qui est reconnu par
Excel, tu évites de type de confusion. Pour ce faire, on peut utiliser la fonction "DateSerial()",
DateValue("2014/11/05") en respectant le format DateValue("année/mois/jour")

La fonction "Cdate" utilise le format "DATE" défini dans le panneau de configuration de Windows.
Dans la mesure où la date passée est impossible en utilisant ce format, elle tente de définir un
format qui sied bien à cette date. Encore une fois, c'est problématique! Si tu ouvres le classeur
dans différents environnements, la procédure ou la fonction est sujette à l'interprétation définie
dans le panneau de configuration, ce qui n'est pas souhaitable.

Voilà pour la petite explication.
Publicité
Poster une réponse
Anonyme