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

Formatage des dates j mmmm aaa // d mmmm yyyy

3 réponses
Avatar
Jac
Bonjour à tous,

je suis embêté car sur une machine avec Windows XP en anglais, Office
2003 en français, je n'arrive pas à calculer par vba que le formatage
des dates est de type "d mmmm yyyy" sur cette machine.
J'ai créé une fonction
----------------------
Function PAYS()
PAYS = Application.International(xlCountryCode)
End Function
----------------------
qui me revoie 33 sur ma machine Win FR / Office FR ainsi que sur la
machine Win UK / Office FR.
Avec Application.International(xlCountrySetting) j'obtiens le code du
pays mais pas d'information concernant la langue.

Y a-t'il moyen de trouver par vba le format par défaut des dates (dmy
ou jma ou ...) ?

Merci d'avance.

Jac

3 réponses

Avatar
michdenis
Bonjour,

Le sujet de ta question est vaste et pas si simple - les dates - ;-))

A ) Chaque fois que tu définis une variable avec le type "Date"
le contenu de la variable sera pour un format "date court"
tel que tu as défini dans le panneau de configuration de Windows.
Même si tu essaies de donner un format personnalisé à une date,
si la variable a reçu le type "As Date", tu perds ton temps, le format
retenu est le format court des dates dans le panneau de configuration
Dim MaDate As Date
MaDate = Format("25/10/2010", "Long Date")
MaDate = Format("25/10/2010", "Short Date")
MaDate = Cdate("25/10/2010", "Long Date")
Comme MaDate a été défini comme "As date" peu importe la ligne de
commande, tu auras le même format date.

B ) La fonction de conversion Cdate() et Format() utilise aussi le format
"Date" du panneau de configuration de Windows.
Dim aDate As String, bDate As String
aDate = Format("25/10/2010", "Long Date")
bDate = Format("25/10/2010", "Short Date")

C ) Le problème avec les dates en VBA, c'est que les fonctions se réfèrent
au format "date" du panneau de configuration de Windows. Si ton
classeur voyage d'un ordinateur à l'autre, il y a de fortes chances que
les valeurs par défaut du panneau de configuration soient différentes.
La conséquence : Comment faire pour qu'Excel interprète le format
date indépendamment du panneau de configuration ?

Réponse : utilise la fonction DateSerial() pour saisir tes dates en dur.
an , mois ,jour
MaDate = DateSerial(2010, 12, 25) pour 25 décembre 2010

Une autre alternative est l'utilisation de la fonction DateValue()
Tu dois effectuer la saisie Année/mois/jour
aDate = DateValue("2010/12/25")

Dans les 2 derniers cas, Excel interprétera toujours la date correctement.
N.B. Certains pays utilisent un séparateur date "/" différent. Si requis,
tu peux faire ceci :
Dim S As String
S = Application.International(xlDateSeparator)
aDate = DateValue(2010 & S & 12 & S & 25)

D ) Pour terminer, tu dois te souvenir qu'en VBA, sauf avis contraire
(utilisation d'une fonction déjà mentionnée), VBA utilise le format
américain des dates "m/y/aa".
si tu utilises les dièses pour la saisie d'une date :
Exemple : D = #5/6/10#
D = 6 mai 2010 et non 5 juin 2010

Voilà ! Maintenant, si tu as une question précise...



"Jac" a écrit dans le message de groupe de discussion :

Bonjour à tous,

je suis embêté car sur une machine avec Windows XP en anglais, Office
2003 en français, je n'arrive pas à calculer par vba que le formatage
des dates est de type "d mmmm yyyy" sur cette machine.
J'ai créé une fonction
----------------------
Function PAYS()
PAYS = Application.International(xlCountryCode)
End Function
----------------------
qui me revoie 33 sur ma machine Win FR / Office FR ainsi que sur la
machine Win UK / Office FR.
Avec Application.International(xlCountrySetting) j'obtiens le code du
pays mais pas d'information concernant la langue.

Y a-t'il moyen de trouver par vba le format par défaut des dates (dmy
ou jma ou ...) ?

Merci d'avance.

Jac
Avatar
michdenis
Correction :

Au point "D",
au lieu de ceci : américain des dates "m/y/aa".
On devrait lire :
américain des dates "m/d/yy". (mois, jour, année)





"michdenis" a écrit dans le message de groupe de discussion :

Bonjour,

Le sujet de ta question est vaste et pas si simple - les dates - ;-))

A ) Chaque fois que tu définis une variable avec le type "Date"
le contenu de la variable sera pour un format "date court"
tel que tu as défini dans le panneau de configuration de Windows.
Même si tu essaies de donner un format personnalisé à une date,
si la variable a reçu le type "As Date", tu perds ton temps, le format
retenu est le format court des dates dans le panneau de configuration
Dim MaDate As Date
MaDate = Format("25/10/2010", "Long Date")
MaDate = Format("25/10/2010", "Short Date")
MaDate = Cdate("25/10/2010", "Long Date")
Comme MaDate a été défini comme "As date" peu importe la ligne de
commande, tu auras le même format date.

B ) La fonction de conversion Cdate() et Format() utilise aussi le format
"Date" du panneau de configuration de Windows.
Dim aDate As String, bDate As String
aDate = Format("25/10/2010", "Long Date")
bDate = Format("25/10/2010", "Short Date")

C ) Le problème avec les dates en VBA, c'est que les fonctions se réfèrent
au format "date" du panneau de configuration de Windows. Si ton
classeur voyage d'un ordinateur à l'autre, il y a de fortes chances que
les valeurs par défaut du panneau de configuration soient différentes.
La conséquence : Comment faire pour qu'Excel interprète le format
date indépendamment du panneau de configuration ?

Réponse : utilise la fonction DateSerial() pour saisir tes dates en dur.
an , mois ,jour
MaDate = DateSerial(2010, 12, 25) pour 25 décembre 2010

Une autre alternative est l'utilisation de la fonction DateValue()
Tu dois effectuer la saisie Année/mois/jour
aDate = DateValue("2010/12/25")

Dans les 2 derniers cas, Excel interprétera toujours la date correctement.
N.B. Certains pays utilisent un séparateur date "/" différent. Si requis,
tu peux faire ceci :
Dim S As String
S = Application.International(xlDateSeparator)
aDate = DateValue(2010 & S & 12 & S & 25)

D ) Pour terminer, tu dois te souvenir qu'en VBA, sauf avis contraire
(utilisation d'une fonction déjà mentionnée), VBA utilise le format
américain des dates "m/y/aa".
si tu utilises les dièses pour la saisie d'une date :
Exemple : D = #5/6/10#
D = 6 mai 2010 et non 5 juin 2010

Voilà ! Maintenant, si tu as une question précise...



"Jac" a écrit dans le message de groupe de discussion :

Bonjour à tous,

je suis embêté car sur une machine avec Windows XP en anglais, Office
2003 en français, je n'arrive pas à calculer par vba que le formatage
des dates est de type "d mmmm yyyy" sur cette machine.
J'ai créé une fonction
----------------------
Function PAYS()
PAYS = Application.International(xlCountryCode)
End Function
----------------------
qui me revoie 33 sur ma machine Win FR / Office FR ainsi que sur la
machine Win UK / Office FR.
Avec Application.International(xlCountrySetting) j'obtiens le code du
pays mais pas d'information concernant la langue.

Y a-t'il moyen de trouver par vba le format par défaut des dates (dmy
ou jma ou ...) ?

Merci d'avance.

Jac
Avatar
Jac
... merci pour toutes ces précisions. Ça permet d'avoir une bonne vue
d'ensemble et des "choses" à tester.

Jac