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

Un calendrier, plusieurs champs a' renseigner?

7 réponses
Avatar
yakakose
Salut,

Tout d'abord merci a' Curt sans qui je n'aurais pas su que l'ActivX Calendar
existait.
Question: comment faire pour n'utiliser qu'un seul calendrier pour plusieurs
champs text?
J'ai bien reussi a' tout faire fonctionner pour un champ text mais
franchement ca m'ennuie de creer un calendrier pour chaque champs "date" que
je pourrais avoir sur un meme formulaire (le probleme c'est le retour de la
date dans le bon champ et de remettre le focus sur le champ de depart). A
savoir, mon calendrier est visible=false avant le clic sur un des champs et
je le remet dans cette etat apres le click sur le calendrier.
Je vous demande pardon d'avance si cette question a deja ete posee.

Merci,

7 réponses

Avatar
Eric
Bonsoir,


Voir de ce côté : http://officesystemaccess.seneque.net/ex_calendrier1.htm

Salut,

Tout d'abord merci a' Curt sans qui je n'aurais pas su que l'ActivX Calendar
existait.
Question: comment faire pour n'utiliser qu'un seul calendrier pour plusieurs
champs text?
J'ai bien reussi a' tout faire fonctionner pour un champ text mais
franchement ca m'ennuie de creer un calendrier pour chaque champs "date" que
je pourrais avoir sur un meme formulaire (le probleme c'est le retour de la
date dans le bon champ et de remettre le focus sur le champ de depart). A
savoir, mon calendrier est visibleúlse avant le clic sur un des champs et
je le remet dans cette etat apres le click sur le calendrier.
Je vous demande pardon d'avance si cette question a deja ete posee.

Merci,


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
yakakose
SUPER!!!

C'est dommage que j'ai pas trouve' ca tout seul.

Merci et a+,


Bonsoir,


Voir de ce côté : http://officesystemaccess.seneque.net/ex_calendrier1.htm

Salut,

Tout d'abord merci a' Curt sans qui je n'aurais pas su que l'ActivX Calendar
existait.
Question: comment faire pour n'utiliser qu'un seul calendrier pour plusieurs
champs text?
J'ai bien reussi a' tout faire fonctionner pour un champ text mais
franchement ca m'ennuie de creer un calendrier pour chaque champs "date" que
je pourrais avoir sur un meme formulaire (le probleme c'est le retour de la
date dans le bon champ et de remettre le focus sur le champ de depart). A
savoir, mon calendrier est visibleúlse avant le clic sur un des champs et
je le remet dans cette etat apres le click sur le calendrier.
Je vous demande pardon d'avance si cette question a deja ete posee.

Merci,


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Gloops
Eric a écrit, le 21/11/2007 19:41 :
Bonsoir,


Voir de ce côté : http://officesystemaccess.seneque.net/ex_ca lendrier1.htm


Bonjour,

Ah ouaip, pas mal.

Si on ne veut pas que les noms du formulaire et du contrôle soient
visibles, on peut aussi les stocker dans des étiquettes créé es
spécialement à cet effet, avec l'attribut Visible = False.


A noter : le site de Raymond présente le cas où le contrôl e avec une
date se trouve dans un formulaire principal.

Si le contrôle est dans un sous formulaire, il va falloir passer tou t le
chemin, et penser à le traiter au retour.



'=====================

'Dans un module :

Public Sub SelectDate(Control As Control, _
Optional DateDefaut As Variant)
Dim Obj As Object
If IsMissing(DateDefaut) Then
If IsDate(Control) Then
DateDefaut = Control
End If
End If
If IsMissing(DateDefaut) Or IsNull(DateDefaut) _
Or Not (IsDate(DateDefaut)) Then
DateDefaut = Now()
End If
DoCmd.OpenForm "frmDate", OpenArgs:ÚteDefaut
Set Obj = Control
While Not ExisteFormulaire(Obj.Name)
Set Obj = Obj.Parent
While Not TypeOf Obj Is Form
Set Obj = Obj.Parent
Wend
Forms("frmDate").lblNomForm.Caption = _
Obj.Name + "." + Forms("frmDate").lblNomForm.Caption
Wend
If Len(Forms("frmDate").lblNomForm.Caption) > 4 Then
' pour éviter que l'étiquette soit vide
'elle contient un point de suspension au départ

Forms("frmDate").lblNomForm.Caption = _
Left$(Forms("frmDate").lblNomForm.Caption, _
Len(Forms("frmDate").lblNomForm.Caption) - 4)

'Je retire le point de suspension

End If
Forms("frmDate").lblNomControle.Caption = Control.Name
End Sub
'======================== =====

On a passé, ou pas, une date en argument au formulaire date : il fau t la
récupérer au chargement.


'======================== =====
'Dans frmDate

Private Sub Form_Load()
If OpenArgs = "" Then
Me.Calendar0 = Now()
Else
If IsDate(OpenArgs) Then
Me.Calendar0 = OpenArgs
End If
End If
Me.txtdate = Me.Calendar0
End Sub
'======================== ======


Lors de la validation de la sélection, c'est là que la syntaxe de
concaténation va être traitée pour retrouver le formulaire ou
sous-formulaire concerné :
'======================== ======

Private Sub cmdOK_Click()
'MsgBox Me.Calendar0.Value
Dim Obj As Object
Dim N As Integer
TabForm = Split(Forms("frmDate").lblNomForm.Caption, ".")
' la chaîne contenant le chemin est séparée dans un table au
' selon les points
Set Obj = Forms(TabForm(0))
If UBound(TabForm) > 0 Then
' Si UBound(TabForm) = 0 ça signifie qu'il n'y a pas de point,
' le contrôle est dans un formulaire principal
For N = 1 To UBound(TabForm)
Set Obj = Obj.Controls(TabForm(N)).Form
'Tant qu'on trouve un élément on descend d'un niveau
'vers les sous-formulaires
Next
End If
'ça y est, Obj est le formulaire (ou sous-formulaire)
'dans lequel se trouve le contrôle
Obj.Controls(lblNomControle.Caption) = Calendar0.Value
' Le contrôle reçoit la date sélectionnée
DoCmd.Close acForm, Me.Name
End Sub
'======================== ======


Et ... Je crois bien que ça y est.


Plus qu'à appeler le tout :



Private Sub txtDateLivraisonClient_DblClick(Cancel As Integer)
SelectDate txtDateLivraisonClient
End Sub


Si on veut on encadre d'une certaine couleur les contrôles concernà ©s,
que l'utilisateur sache qu'il peut ouvrir le calendrier en
double-cliquant dessus.


Pour voir ceux qui suivent : j'ai traité deux fois la valeur par dà ©faut.
Comme j'ai mis la même valeur, il n'y a pas de casse.

Avatar
yakakose
Salut a' tous,

Et bien c'est exactement le probleme que j'avais: un sous-formulaire, mais
bon comme j'ai pas les connaissances je n'ai pas trouve' et donc pour passer
le chemin complet j'ai fait un truc batard ou je le met dans la fonction mais
ceci veut dire que si j'ai 50 fois la meme manip a' faire sur 50 controls
differents il faut que je fasse 50 fois la meme fonction (pas tres pro),
j'avais pas trouve' pour traiter le chemin en variable.
Maintenant que tu donnes la reponse, y m'reste plus qu'a' adapter ca a' mon
projet (ca promet plein de fun!!!!).

Merci encore, et franchement bravo, la' ca m'en bouche un coin.
L'idee du control d'une autre couleur est pas mal non plus, je vais m'en
servir.

Toujours sur le meme sujet, je n'arrive pas a' ouvrir le calendrier ou' je
veux dans la fenetre, existe t'il une methode pour positionner un formulaire
sur la fenetre?


Eric a écrit, le 21/11/2007 19:41 :
Bonsoir,


Voir de ce côté : http://officesystemaccess.seneque.net/ex_calendrier1.htm


Bonjour,

Ah ouaip, pas mal.

Si on ne veut pas que les noms du formulaire et du contrôle soient
visibles, on peut aussi les stocker dans des étiquettes créées
spécialement à cet effet, avec l'attribut Visible = False.


A noter : le site de Raymond présente le cas où le contrôle avec une
date se trouve dans un formulaire principal.

Si le contrôle est dans un sous formulaire, il va falloir passer tout le
chemin, et penser à le traiter au retour.



'==================== >
'Dans un module :

Public Sub SelectDate(Control As Control, _
Optional DateDefaut As Variant)
Dim Obj As Object
If IsMissing(DateDefaut) Then
If IsDate(Control) Then
DateDefaut = Control
End If
End If
If IsMissing(DateDefaut) Or IsNull(DateDefaut) _
Or Not (IsDate(DateDefaut)) Then
DateDefaut = Now()
End If
DoCmd.OpenForm "frmDate", OpenArgs:ÚteDefaut
Set Obj = Control
While Not ExisteFormulaire(Obj.Name)
Set Obj = Obj.Parent
While Not TypeOf Obj Is Form
Set Obj = Obj.Parent
Wend
Forms("frmDate").lblNomForm.Caption = _
Obj.Name + "." + Forms("frmDate").lblNomForm.Caption
Wend
If Len(Forms("frmDate").lblNomForm.Caption) > 4 Then
' pour éviter que l'étiquette soit vide
'elle contient un point de suspension au départ

Forms("frmDate").lblNomForm.Caption = _
Left$(Forms("frmDate").lblNomForm.Caption, _
Len(Forms("frmDate").lblNomForm.Caption) - 4)

'Je retire le point de suspension

End If
Forms("frmDate").lblNomControle.Caption = Control.Name
End Sub
'============================ >
On a passé, ou pas, une date en argument au formulaire date : il faut la
récupérer au chargement.


'============================ > 'Dans frmDate

Private Sub Form_Load()
If OpenArgs = "" Then
Me.Calendar0 = Now()
Else
If IsDate(OpenArgs) Then
Me.Calendar0 = OpenArgs
End If
End If
Me.txtdate = Me.Calendar0
End Sub
'============================= >

Lors de la validation de la sélection, c'est là que la syntaxe de
concaténation va être traitée pour retrouver le formulaire ou
sous-formulaire concerné :
'============================= >
Private Sub cmdOK_Click()
'MsgBox Me.Calendar0.Value
Dim Obj As Object
Dim N As Integer
TabForm = Split(Forms("frmDate").lblNomForm.Caption, ".")
' la chaîne contenant le chemin est séparée dans un tableau
' selon les points
Set Obj = Forms(TabForm(0))
If UBound(TabForm) > 0 Then
' Si UBound(TabForm) = 0 ça signifie qu'il n'y a pas de point,
' le contrôle est dans un formulaire principal
For N = 1 To UBound(TabForm)
Set Obj = Obj.Controls(TabForm(N)).Form
'Tant qu'on trouve un élément on descend d'un niveau
'vers les sous-formulaires
Next
End If
'ça y est, Obj est le formulaire (ou sous-formulaire)
'dans lequel se trouve le contrôle
Obj.Controls(lblNomControle.Caption) = Calendar0.Value
' Le contrôle reçoit la date sélectionnée
DoCmd.Close acForm, Me.Name
End Sub
'============================= >

Et ... Je crois bien que ça y est.


Plus qu'à appeler le tout :



Private Sub txtDateLivraisonClient_DblClick(Cancel As Integer)
SelectDate txtDateLivraisonClient
End Sub


Si on veut on encadre d'une certaine couleur les contrôles concernés,
que l'utilisateur sache qu'il peut ouvrir le calendrier en
double-cliquant dessus.


Pour voir ceux qui suivent : j'ai traité deux fois la valeur par défaut.
Comme j'ai mis la même valeur, il n'y a pas de casse.




Avatar
Gloops
yakakose a écrit, le 24/11/2007 13:37 :
Toujours sur le meme sujet, je n'arrive pas a' ouvrir le calendrier ou' je
veux dans la fenetre, existe t'il une methode pour positionner un formu laire
sur la fenetre?



Tu veux dire, le formulaire de calendrier où tu veux sur l'écra n ?


Ah ouaip, ça fastoche.

Vite fait avant d'aller manger, je te suggère un coup d'Å“il à   l'aide de
DoCmd.MoveSize

Avatar
yakakose
Oui et c'est exactement ce que je cherchais.
Bon appetit,


yakakose a écrit, le 24/11/2007 13:37 :
Toujours sur le meme sujet, je n'arrive pas a' ouvrir le calendrier ou' je
veux dans la fenetre, existe t'il une methode pour positionner un formulaire
sur la fenetre?



Tu veux dire, le formulaire de calendrier où tu veux sur l'écran ?


Ah ouaip, ça fastoche.

Vite fait avant d'aller manger, je te suggère un coup d'œil à l'aide de
DoCmd.MoveSize





Avatar
Gloops
yakakose a écrit, le 24/11/2007 23:06 :
Oui et c'est exactement ce que je cherchais.


Tant mieux :)

Bon appetit,



Merci.