Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

1 réponse
Avatar
bpascal123
Bonjour,

Ci-dessous, je dois utiliser deux versions diff=E9rentes de cette fonction =
=E0 diff=E9rents endroits du code sinon le r=E9sultat retourn=E9 (la date d=
d/mm/aaaa) en format fran=E7ais n'est pas le m=EAme quand la fonction est a=
ppel=E9 dans un module et quand elle est appel=E9e 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=E8tre et renvoie une date au format JJ/MM/AAAA
'
Dim str As String
str =3D DateSerial(Year(vdt), Month(vdt), Day(vdt)) 'date"
str =3D CDate(str)
'PDB =3D Format(str, "mm/dd/yyyy")
PDB =3D 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=E8tre et renvoie une date au format JJ/MM/AAAA
'
Dim str As String
str =3D DateSerial(Year(vdt), Month(vdt), Day(vdt)) 'date"
str =3D CDate(str)
PDB4Rep =3D Format(str, "mm/dd/yyyy")
'PDB =3D str
End Function

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

Quand je vois la fonction FormatAPI de Open/LibreOffice basic qui est tr=E8=
s puissante en comparaison =E0 celle de Vba parce que je crois qu'il y a le=
s param=E8tres r=E9gionnaux du syst=E8me d'exploitation derri=E8re. Je suis=
en format r=E9gional France et en s=E9paration d=E9cimale avec la virgule =
classique (incurv=E9e). Dans l'aide Vba, format peut bugger sur le symbole =
de s=E9paration des milliers ou d=E9cimal. Mais je ne crois pas que c'est c=
e =E0 quoi je suis confront=E9. J'ai fait quelques recherches mais il n'y a=
pas beaucoup de r=E9sultats =E0 part http://didier-gonard.developpez.com/t=
utoriels/office/excel/comprendre-et-gerer-dates-sous-excel-et-vba/ mais il =
ne semble pas s=FBre du traitement sous vba.



Cordialement,
Pascal

1 réponse

Avatar
MichD
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.