Utilisation obligatoire du Calendar

Le
DAVID
Bonsoir

Comment obliger l'utilisateur à utiliser le Calendar dans un TextBox

En fait, j'aimerais que la seul solution pour entrer une date dans un
TextBox c'est l'ouverture du Calendar. Ceci évite une mauvaise entrée d'un
format de date.

J'utilise actuellement cette fonction mais j'arrive à modifier quand même la
valeur du TextBox.

Private Sub TxtDate_Enter()
Set MaForm = Me
Calendrier_Form.Show
End Sub

Merci de votre aide

Cordialement

David
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #20988341
bonjour David,

voici un exemple,
http://cjoint.com/?bqtsWg1ZPk

isabelle

Le 2010-01-16 12:40, DAVID a écrit :
Bonsoir

Comment obliger l'utilisateur à utiliser le Calendar dans un TextBox

En fait, j'aimerais que la seul solution pour entrer une date dans un
TextBox c'est l'ouverture du Calendar. Ceci évite une mauvaise entrée d'un
format de date.

J'utilise actuellement cette fonction mais j'arrive à modifier quand même la
valeur du TextBox.

Private Sub TxtDate_Enter()
Set MaForm = Me
Calendrier_Form.Show
End Sub

Merci de votre aide

Cordialement

David





michdenis
Le #20988321
Bonjour Isabelle,

Est-ce que ton exemple démontre comment OBLIGER
à saisir une date dans un textbox ?
;-)


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

bonjour David,

voici un exemple,
http://cjoint.com/?bqtsWg1ZPk

isabelle

Le 2010-01-16 12:40, DAVID a écrit :
Bonsoir

Comment obliger l'utilisateur à utiliser le Calendar dans un TextBox

En fait, j'aimerais que la seul solution pour entrer une date dans un
TextBox c'est l'ouverture du Calendar. Ceci évite une mauvaise entrée d'un
format de date.

J'utilise actuellement cette fonction mais j'arrive à modifier quand même la
valeur du TextBox.

Private Sub TxtDate_Enter()
Set MaForm = Me
Calendrier_Form.Show
End Sub

Merci de votre aide

Cordialement

David





michdenis
Le #20988311
Bonjour,

Lorsque l'événement "Textbox1_Enter" s'exécute,
entre dans le code de l'événement un espace dans le textbox

Me.textbox1 = " " plus les autres lignes de code liées à cet événement
Ceci est suffisant pour déclencher l'événement suivant si l'usager décide
d'annuler la saisie d'une date et passe au textbox suivant ou essaie de
sortir du textbox

L'événement à ajouter au textbox devant recevoir une date :
'-----------------------------------
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
'le chiffre 10 représente le nombre de caractères que
'devrait avoir la date incluant les symboles du format
If Len(Me.TextBox1) <> 10 Then
MsgBox "Vous devez saisir une date"
Me.TextBox1.SetFocus
Cancel = True
UserForm1.Show
Else
'Si la date est bonne, on passe au textbox suivant
Me.Textbox1.setfocus
End If
End Sub
'-----------------------------------
DAVID
Le #20988301
Bonsoir et merci Isabelle mais si je comprend bien cela ne fonctionne pas
car après avoir valider une date dans le Calendar, le TextBox change donc
problème car le Calendar est déjà ouvert

J'ai fais :

Private encours As String

Private Sub TxtDate_Change()
Application.EnableEvents = False
encours = ActiveControl.Name
Calendrier_Form.Show
Application.EnableEvents = True
End Sub

Private Sub TxtDate_Enter()
Set MaForm = Me
'nom du formulaire du calendrier
Calendrier_Form.Show
End Sub
isabelle
Le #20988581
as tu réussi à entrer autre chose ?
isabelle

Le 2010-01-16 13:27, michdenis a écrit :
Bonjour Isabelle,

Est-ce que ton exemple démontre comment OBLIGER
à saisir une date dans un textbox ?
;-)


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

bonjour David,

voici un exemple,
http://cjoint.com/?bqtsWg1ZPk

isabelle

Le 2010-01-16 12:40, DAVID a écrit :

Bonsoir

Comment obliger l'utilisateur à utiliser le Calendar dans un TextBox

En fait, j'aimerais que la seul solution pour entrer une date dans un
TextBox c'est l'ouverture du Calendar. Ceci évite une mauvaise entrée d'un
format de date.

J'utilise actuellement cette fonction mais j'arrive à modifier quand même la
valeur du TextBox.

Private Sub TxtDate_Enter()
Set MaForm = Me
Calendrier_Form.Show
End Sub

Merci de votre aide

Cordialement

David








michdenis
Le #20989081
| as tu réussi à entrer autre chose ?

Ce que je n'aime pas, si l'usager décide de
fermer le contrôle contenant les dates sans
retenir une date particulière en cliquant sur le
x dans le coin supérieur droite, tout se ferme.

Ça risque d'en surprendre quelques-uns !
;-)
isabelle
Le #20989071
oui, mais à prpos de cette croix de fermeture on sais tout les deux
qu'il est possible de l'enlever
sans oublier d'ajouter un bouton qui servira à la validation et à la
fermeture.
isabelle

Le 2010-01-16 15:21, michdenis a écrit :
| as tu réussi à entrer autre chose ?

Ce que je n'aime pas, si l'usager décide de
fermer le contrôle contenant les dates sans
retenir une date particulière en cliquant sur le
x dans le coin supérieur droite, tout se ferme.

Ça risque d'en surprendre quelques-uns !
;-)





michdenis
Le #20989411
On peut toujours empêcher la fermeture par l'événement
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
if mode = 0 then cancel = true

Mais,
if faudrait aussi penser à intercepter les touches "tab" et "enter"
qui permet à l'usager de passer à un autre contrôle sans avoir
saisi une date.



"isabelle" a écrit dans le message de groupe de discussion :
uAuZ#
oui, mais à prpos de cette croix de fermeture on sais tout les deux
qu'il est possible de l'enlever
sans oublier d'ajouter un bouton qui servira à la validation et à la
fermeture.
isabelle

Le 2010-01-16 15:21, michdenis a écrit :
| as tu réussi à entrer autre chose ?

Ce que je n'aime pas, si l'usager décide de
fermer le contrôle contenant les dates sans
retenir une date particulière en cliquant sur le
x dans le coin supérieur droite, tout se ferme.

Ça risque d'en surprendre quelques-uns !
;-)





isabelle
Le #20989671
ou bien le masquer,

Private encours As String
Private Const SC_CLOSE = &HF060&
Private Const MF_BYCOMMAND = &H0&
Private Declare Function GetSystemMenu Lib "user32" _
(ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function RemoveMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As
Long) As Long
Private Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Sub UserForm_Initialize()
Dim hSysMenu As Long
Dim MeHwnd As Long
MeHwnd = FindWindowA(vbNullString, Me.Caption)
If MeHwnd > 0 Then
hSysMenu = GetSystemMenu(MeHwnd, False)
RemoveMenu hSysMenu, SC_CLOSE, MF_BYCOMMAND
Else
MsgBox "Handle de " & Me.Caption & " Introuvable", vbCritical
End If
MonthView1.Visible = False
End Sub

Private Sub CommandButton1_Click()
Dim a As Integer
For Each ctrl In Me.Controls
If Left(ctrl.Name, 7) = "TextBox" Then
If ctrl = "" Then a = 1
End If
Next
If a = 0 Then
Me.Hide
Else
MsgBox "Vous devez renseigner tous les cases avec une date"
End If
End Sub


isabelle

Le 2010-01-16 16:12, michdenis a écrit :
On peut toujours empêcher la fermeture par l'événement
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
if mode = 0 then cancel = true

Mais,
if faudrait aussi penser à intercepter les touches "tab" et "enter"
qui permet à l'usager de passer à un autre contrôle sans avoir
saisi une date.



"isabelle" a écrit dans le message de groupe de discussion :
uAuZ#
oui, mais à prpos de cette croix de fermeture on sais tout les deux
qu'il est possible de l'enlever
sans oublier d'ajouter un bouton qui servira à la validation et à la
fermeture.
isabelle

Le 2010-01-16 15:21, michdenis a écrit :

| as tu réussi à entrer autre chose ?

Ce que je n'aime pas, si l'usager décide de
fermer le contrôle contenant les dates sans
retenir une date particulière en cliquant sur le
x dans le coin supérieur droite, tout se ferme.

Ça risque d'en surprendre quelques-uns !
;-)








michdenis
Le #20990121
Avec tous ces efforts, c'est David qui va avoir l'embarras du choix
ou le choix de l'embarras !

;-)



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

ou bien le masquer,

Private encours As String
Private Const SC_CLOSE = &HF060&
Private Const MF_BYCOMMAND = &H0&
Private Declare Function GetSystemMenu Lib "user32" _
(ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function RemoveMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As
Long) As Long
Private Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Sub UserForm_Initialize()
Dim hSysMenu As Long
Dim MeHwnd As Long
MeHwnd = FindWindowA(vbNullString, Me.Caption)
If MeHwnd > 0 Then
hSysMenu = GetSystemMenu(MeHwnd, False)
RemoveMenu hSysMenu, SC_CLOSE, MF_BYCOMMAND
Else
MsgBox "Handle de " & Me.Caption & " Introuvable", vbCritical
End If
MonthView1.Visible = False
End Sub

Private Sub CommandButton1_Click()
Dim a As Integer
For Each ctrl In Me.Controls
If Left(ctrl.Name, 7) = "TextBox" Then
If ctrl = "" Then a = 1
End If
Next
If a = 0 Then
Me.Hide
Else
MsgBox "Vous devez renseigner tous les cases avec une date"
End If
End Sub


isabelle

Le 2010-01-16 16:12, michdenis a écrit :
On peut toujours empêcher la fermeture par l'événement
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
if mode = 0 then cancel = true

Mais,
if faudrait aussi penser à intercepter les touches "tab" et "enter"
qui permet à l'usager de passer à un autre contrôle sans avoir
saisi une date.



"isabelle" a écrit dans le message de groupe de discussion :
uAuZ#
oui, mais à prpos de cette croix de fermeture on sais tout les deux
qu'il est possible de l'enlever
sans oublier d'ajouter un bouton qui servira à la validation et à la
fermeture.
isabelle

Le 2010-01-16 15:21, michdenis a écrit :

| as tu réussi à entrer autre chose ?

Ce que je n'aime pas, si l'usager décide de
fermer le contrôle contenant les dates sans
retenir une date particulière en cliquant sur le
x dans le coin supérieur droite, tout se ferme.

Ça risque d'en surprendre quelques-uns !
;-)








Publicité
Poster une réponse
Anonyme