J'aimerais au démarrage de mon application développée sous
Access changer en visual basic les paramètres régionaux de
date :
- test des paramètres régionaux : si format date de type
jj/MM/aaaa alors passsage à jj/MM/aa + message de
changement de configuration.
Où positionner le code ?
Est-il possible de réaliser sans redémarrer l'application ?
Quelqu'un connait-il une solution ?
Merci
BM
Je pense qu'il n'y a pas de raison valable pour faire cela...
les paramètres régionaux appartiennent au PC et
non à l'appli Access.
Dans Access, on peut gerer parfaitement les
dates quelques soit leur format.
la mise en forme voulue se fait très simplement
avec un : Format(LaDate,"jj/mm/aa")
--
A+
Pierre (3stone)
--------------------------------
BM <b.mo...@wanadoo.fr> a écrit dans le message :
db7201c21600$287bac80$2ae2...@hosting.microsoft.com...
Declare Function GetLocaleInfo Lib "kernel32"
Alias "GetLocaleInfoA" _
(ByVal Locale As Long, ByVal LCType As Long, ByVal
lpLCData As String, _
ByVal cchData As Long) As Long
Private Declare Function GetUserDefaultLCID%
Lib "kernel32" ()
Const LOCALE_SSHORTDATE = &H1F ' format date court
Public Function FormatDateCourt() As String
Dim Symbol As String
Dim iRet1 As Long
Dim iRet2 As Long
Dim lpLCDataVar As String
Dim Pos As Integer
Dim Locale As Long
Locale = GetUserDefaultLCID()
iRet1 = GetLocaleInfo(Locale, LOCALE_SSHORTDATE,
lpLCDataVar, 0)
Symbol = String$(iRet1, 0)
iRet2 = GetLocaleInfo(Locale, LOCALE_SSHORTDATE,
Symbol, iRet1)
Pos = InStr(Symbol, Chr$(0))
If Pos > 0 Then
Symbol = Left$(Symbol, Pos - 1)
FormatDateCourt = Symbol
End If
End Function
Pour la changer ca doit etre SetlocaleINfoA il faut que je
fasse l'essai
@+
andre
>-----Message d'origine-----
>.
>
Private Declare Function SetLocaleInfo
Lib "kernel32" Alias _
"SetLocaleInfoA" (ByVal Locale As Long, ByVal
LCType As _
Long, ByVal lpLCData As String) As Boolean
Private Declare Function PostMessage Lib "user32"
Alias _
"PostMessageA" (ByVal hwnd As Long, ByVal wMsg
As Long, _
ByVal wParam As Long, ByVal lParam As Long) As
Long
Private Declare Function GetSystemDefaultLCID
Lib "kernel32" _
() As Long
Const LOCALE_SSHORTDATE = &H1F ' date format
Private Const WM_SETTINGCHANGE = &H1A
'same as the old WM_WININICHANGE
Private Const HWND_BROADCAST = &HFFFF&
Function ChangerFormatDateCourt(formatDate As String)
Dim dwLCID As Long
dwLCID = GetSystemDefaultLCID()
If SetLocaleInfo(dwLCID, LOCALE_SSHORTDATE,
formatDate) _
= False Then
MsgBox "Failed"
Exit Function
End If
PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0
End Function
Pour changer tu tapes en VB
Call ChangerFormatDateCourt("dd-MM-yy") 'ou "dd-MM-yyyy"
@+
andre
Ps: Fais attention au retour de ligne a cause de la copie
>-----Message d'origine-----
>.
>
On ne fait pas cela! On doit respecter les choix de l'utilisateur, sinon, il va te la faire bouffer
ton application qui lui crée des erreurs, par la suite, puisqu'il se pense encore dans SON choix de
format, en dehors de ton application. La platteforme s'appelle Windows, pas Unix, et la culture y
veut qu'on respecte les choix de l'utilisateur. Imagine même que ton application tourne encore et
l'utilisateur change d'application, avec le Task manager, ou simplement sur Ctrl_Tab... il se passe
quoi si entre temps il a rechangé pour SON paramétrage lorsqu'il revient à ton application?
Force un format, comme 3stone le suggère, ou utilise quelque chose comme ce qui suit:
=======
Declare Function VariantChangeTypeEx _
Lib "oleaut32.dll" _
(ByRef pvargDest As Variant, _
ByRef pvarSrc As Variant, _
ByVal lcid As Long, _
ByVal wFlags As Integer, _
ByVal vt As VbVarType) As Long
Public Function InUSplease(Whatever As Variant) As String
Dim tmp As Variant
VariantChangeTypeEx tmp, Whatever, 1033, 0, vbString
InUSplease = tmp
End Function
=======
qui formate dans un paramètre "local", ici 1033 pour US, sans modifier le paramétrage du PC de
quelque façon que ce soit. Ainsi, 7/2 se formattera en "3.5" au lieu de "3,5" et ce, quelque
soit le paramétrage du PC.
S'il faut absolument modifier le paramétrage du PC, demander à l'utlisateur de le faire, ne pas le
lui faire sans CLAIREMENT l'avertir et, si possible, le remettre dans son état initial lors de la
fermeture (mais si l'application se termine "anormalement", ... ça foire, il va s'en dire).
Espérant être utile,
Vanderghast, Access MVP
"BM" <b.mo...@wanadoo.fr> wrote in message
news:db7201c21600$287bac80$2ae2...@hosting.microsoft.com...