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

Le
bpascal123
Bonjour,

Ci-dessous, je dois utiliser deux versions différentes de cette fonction =
à différents endroits du code sinon le résultat retourné (la date d=
d/mm/aaaa) en format français n'est pas le même quand la fonction est a=
ppelé dans un module et quand elle est appelée 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 paramètre 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 paramètre 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 première.

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 paramètres régionnaux du système d'exploitation derrière. Je suis=
en format régional France et en séparation décimale avec la virgule =
classique (incurvée). Dans l'aide Vba, format peut bugger sur le symbole =
de séparation des milliers ou décimal. 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 résultats à part http://didier-gonard.developpez.com/t=
utoriels/office/excel/comprendre-et-gerer-dates-sous-excel-et-vba/ mais il =
ne semble pas sûre du traitement sous vba.



Cordialement,
Pascal
Vidéos High-Tech et Jeu Vidéo
Téléchargements
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