OVH Cloud OVH Cloud

controle calendrier

11 réponses
Avatar
-=lolol=-
Bonjour à tous,

Toujours dans mes histoires de planning, j'utilise le controle calendrier
pour désigner une date :

Dans 1er userform, j'ai un 1er bouton qui appel un 2nd userform contenant le
calendrier :
Private Sub Btn_Ens_DélaiVendu_Click()
Usf_Calendrier.Show
End Sub

ce userform calendrier apparait :
Private Sub UserForm_Initialize()
Calendar1.FirstDay = 2
Calendar1.Today
Calendar1.GridCellEffect = 1
Calendar1.Refresh
End Sub

puis lors d'un double clic se ferme en renvoyant la date choisie dans un
TextBox du 1er Userform
Private Sub Calendar1_DblClick()
Usf_Général.TextBox_Ens_DélaiVendu = Format(Calendar1.Value, "d mmm yy")
Unload Me
End Sub

jusque la tout va bien :-)
... mais, j'ai plusieurs bouton de choix de date renvoyant ces dates dans
différents TextBox et tel que c'est parti, je suis obligé d'avoir autant de
userform calendrier :-(

Pouvez vous m'aider ?

J'ai tenté plusieurs trucs sans succès :

- passer en argument le nom du textbox à remplir dans l'évènement clic du
bouton dédié au textbox : Private Sub Btn_Ens_DélaiVendu_Click(NomTextBox)

- nommer une variable public contenant le nom du textbox à remplir de façon
à ce que le double clic dans le calendrier remplisse le bon textbox en
lisant cette variable

mais non, rien n'y fait (au secours !!!)

Mille merci pour l'aide que vous m'apporterez
@+lolo

10 réponses

1 2
Avatar
Jacques93
Bonjour -=lolol=-,

Tu peux essayer un truc du genre :

Dans le 1er UserForm :

Private Sub CommandButton1_Click()
UserForm2.TxtCtrl = "TextBox1"
UserForm2.Show
End Sub

Private Sub CommandButton2_Click()
UserForm2.TxtCtrl = "TextBox2"
UserForm2.Show
End Sub

etc ...

Dans le 2eme UserForm :

Private txtName As String

Public Property Let TxtCtrl(newName As String)
txtName = newName
End Property

Public Property Get TxtCtrl() As String
TxtCtrl = txtName
End Property

Private Sub Calendar1_DblClick()
UserForm1.Controls(TxtCtrl) = Format(Calendar1.Value, "d mmm yy")
Unload Me
End Sub



Bonjour à tous,

Toujours dans mes histoires de planning, j'utilise le controle
calendrier pour désigner une date :

Dans 1er userform, j'ai un 1er bouton qui appel un 2nd userform
contenant le calendrier :
Private Sub Btn_Ens_DélaiVendu_Click()
Usf_Calendrier.Show
End Sub

ce userform calendrier apparait :
Private Sub UserForm_Initialize()
Calendar1.FirstDay = 2
Calendar1.Today
Calendar1.GridCellEffect = 1
Calendar1.Refresh
End Sub

puis lors d'un double clic se ferme en renvoyant la date choisie dans un
TextBox du 1er Userform
Private Sub Calendar1_DblClick()
Usf_Général.TextBox_Ens_DélaiVendu = Format(Calendar1.Value, "d mmm yy")
Unload Me
End Sub

jusque la tout va bien :-)
.... mais, j'ai plusieurs bouton de choix de date renvoyant ces dates
dans différents TextBox et tel que c'est parti, je suis obligé d'avoir
autant de userform calendrier :-(

Pouvez vous m'aider ?

J'ai tenté plusieurs trucs sans succès :

- passer en argument le nom du textbox à remplir dans l'évènement clic
du bouton dédié au textbox : Private Sub
Btn_Ens_DélaiVendu_Click(NomTextBox)

- nommer une variable public contenant le nom du textbox à remplir de
façon à ce que le double clic dans le calendrier remplisse le bon
textbox en lisant cette variable

mais non, rien n'y fait (au secours !!!)

Mille merci pour l'aide que vous m'apporterez
@+lolo




Avatar
-=lolol=-
Bonjour Jacques93,

piouffff :-)
encore un truc dont je ne soupconnais même pas l'existence ...

Donc violente poignée de main pour te remercier :-)
(la bise à ta femme)

j'essaye tout ça !
encore merci
@+lolo


Tu peux essayer un truc du genre :

Dans le 1er UserForm :

Private Sub CommandButton1_Click()
UserForm2.TxtCtrl = "TextBox1"
UserForm2.Show
End Sub

Private Sub CommandButton2_Click()
UserForm2.TxtCtrl = "TextBox2"
UserForm2.Show
End Sub

etc ...

Dans le 2eme UserForm :

Private txtName As String

Public Property Let TxtCtrl(newName As String)
txtName = newName
End Property

Public Property Get TxtCtrl() As String
TxtCtrl = txtName
End Property

Private Sub Calendar1_DblClick()
UserForm1.Controls(TxtCtrl) = Format(Calendar1.Value, "d mmm yy")
Unload Me
End Sub



Bonjour à tous,

Toujours dans mes histoires de planning, j'utilise le controle
calendrier pour désigner une date :

Dans 1er userform, j'ai un 1er bouton qui appel un 2nd userform
contenant le calendrier :
Private Sub Btn_Ens_DélaiVendu_Click()
Usf_Calendrier.Show
End Sub

ce userform calendrier apparait :
Private Sub UserForm_Initialize()
Calendar1.FirstDay = 2
Calendar1.Today
Calendar1.GridCellEffect = 1
Calendar1.Refresh
End Sub

puis lors d'un double clic se ferme en renvoyant la date choisie
dans un TextBox du 1er Userform
Private Sub Calendar1_DblClick()
Usf_Général.TextBox_Ens_DélaiVendu = Format(Calendar1.Value, "d mmm
yy") Unload Me
End Sub

jusque la tout va bien :-)
.... mais, j'ai plusieurs bouton de choix de date renvoyant ces dates
dans différents TextBox et tel que c'est parti, je suis obligé
d'avoir autant de userform calendrier :-(

Pouvez vous m'aider ?

J'ai tenté plusieurs trucs sans succès :

- passer en argument le nom du textbox à remplir dans l'évènement
clic du bouton dédié au textbox : Private Sub
Btn_Ens_DélaiVendu_Click(NomTextBox)

- nommer une variable public contenant le nom du textbox à remplir de
façon à ce que le double clic dans le calendrier remplisse le bon
textbox en lisant cette variable

mais non, rien n'y fait (au secours !!!)

Mille merci pour l'aide que vous m'apporterez
@+lolo




Avatar
-=lolol=-
Bonjour Jacques93,

donc après la mise en application ... ca marche super bien ... mais je n'y
comprends rien :-(
toujours plus curieux, si une bonne âme pouvait me dire quelque mot sur le
truc j'eu été trés comtent :-)

mille merci à tous pour la science que vous partager ici
@+lolo
Avatar
Jacques93
Bonjour -=lolol=-,

Dans ta question, tu indiques avoir essayé de nommer une variable
publique contenant le nom du textbox à renseigner. Une fois connu ce
nom, il faut utiliser la collection 'controls' du UserForm pour y accéder :

UserForm1.Controls("NomDuControle") = ...

Cela pourrait fonctionner simplement comme ça, mais pour éviter
d'utiliser une variable publique, j'ai utilisé :

Public Property Get NomDePropriété : renvoie la valeur de la propriété

et

Public Property Let NomDeProPriété : affecte la valeur de la propriété

ce qui revient a ajouter une propriété à l'objet UserForm. Dans
l'exemple, TxtCtrl devient une propriété du UserForm au même titre que
BackColor, ForeColor, Caption, etc... et qui contient le nom du contrôle
à renseigner lors du double-click.

Cette syntaxe est principalement utilisée dans le développement de
contrôles ActiveX (en VB6) où elle est indispensable pour définir les
propriétés du contrôle. Mais elle peut l'être également avec les
UserForm ou les modules de classe.


Bonjour Jacques93,

donc après la mise en application ... ca marche super bien ... mais je
n'y comprends rien :-(
toujours plus curieux, si une bonne âme pouvait me dire quelque mot sur
le truc j'eu été trés comtent :-)

mille merci à tous pour la science que vous partager ici
@+lolo




--
Cordialement,

Jacques.

Avatar
-=lolol=-
Bonjour Jacques93,

Dans ta question, tu indiques avoir essayé de nommer une variable
publique contenant le nom du textbox à renseigner. Une fois connu ce
nom, il faut utiliser la collection 'controls' du UserForm pour y
accéder :
UserForm1.Controls("NomDuControle") = ...

Cela pourrait fonctionner simplement comme ça, mais pour éviter
d'utiliser une variable publique, j'ai utilisé :


arf comme quoi parfois on passe pas loin mais trop quand même ...
petite précision : pourquoi s'économiser un variable public ?
Sécurité ? occupation mémoire ? philosophie ?

Public Property Get NomDePropriété : renvoie la valeur de la
propriété
et

Public Property Let NomDeProPriété : affecte la valeur de la
propriété
ce qui revient a ajouter une propriété à l'objet UserForm. Dans
l'exemple, TxtCtrl devient une propriété du UserForm au même titre que
BackColor, ForeColor, Caption, etc... et qui contient le nom du
contrôle à renseigner lors du double-click.

Cette syntaxe est principalement utilisée dans le développement de
contrôles ActiveX (en VB6) où elle est indispensable pour définir les
propriétés du contrôle. Mais elle peut l'être également avec les
UserForm ou les modules de classe.


super ... très beau en fait :-)

je t'offre un plein seau de mercis
@+lolo

Avatar
Péhemme
Bonjour Jacques93,

Inspiré de ta réponse d'hier à -=lolol=- je souhaite passer également le
nom du UserForm en "variable".

1°) Dans le UserForm de saisie (d'origine) :

a) dans l'évènement "Initialize" du UserForm :
usfaCalendrier.UsfUsed = "usfIns"

b) évènement "Enter" de chaque TextBox concernée :
usfaCalendrier.TxtCtrl = "txtDateNais" 'le nom de chaque TextBox
usfaCalendrier.Show


2°) Dans le UserForm "calendrier" (usfaCalendrier)
Private txtName As String
Private usfName As String

Public Property Let TxtCtrl(newName As String)
txtName = newName
End Property
Public Property Get TxtCtrl() As String
TxtCtrl = txtName
End Property
Public Property Let UsfUsed(newUsf As String)
usfName = newUsf
End Property
Public Property Get UsfUsed() As String
UsfUsed = usfName
End Property
Private Sub Annuler_Click()
Unload Me
End Sub

Private Sub Calendar1_DblClick()
UserForms(UsfUsed).Controls(TxtCtrl) = Format(Calendar1.Value,
"dd/mm/yyyy")
Unload Me
End Sub

Alors que les "variables" UsfUsed et TxtCtrl prennent bien le nom des
contrôles d'origine, un bogue, pour incompatibilité de type, se produit sur
la ligne :
UserForms(UsfUsed).Controls(TxtCtrl) = Format(Calendar1.Value, "dd/mm/yyyy")
Cela provient certainement de la déclaration de ma UserForm mais je ne
trouve pas la façon d'y remédier.
Peux-tu me remettre sur la voie ?
Merci d'avance de ton aide.
Michel
Avatar
Jacques93
Bonjour -=lolol=-,

Sécurité, et méthode ;-)

Cela permet de rendre la variable qui stocke la propriété invisible aux
autres modules, et par exemple, de contrôler sa validité :

Public Property Let TxtCtrl(newName As String)
Dim Bidon As String

On Error Resume Next
Bidon = UserForm1.Controls(newName).Text
If Err.Number <> 0 Then
MsgBox "Contrôle : " & newName & " inexistant"
Exit Property
End If
txtName = newName
End Property

Pour l'occupation mémoire, si on fait une simple affectation, cela ne
doit pas changer grand chose, la variable de stockage est privée au lieu
d'être publique, mais je n'ai pas d'infos précise sur l'espace mémoire
utilisé. Par contre, si on teste la validité de la donnée, cela rajoute
du code, mais c'est pour la bonne cause :-)

Bonjour Jacques93,

Dans ta question, tu indiques avoir essayé de nommer une variable
publique contenant le nom du textbox à renseigner. Une fois connu ce
nom, il faut utiliser la collection 'controls' du UserForm pour y
accéder :
UserForm1.Controls("NomDuControle") = ...

Cela pourrait fonctionner simplement comme ça, mais pour éviter
d'utiliser une variable publique, j'ai utilisé :



arf comme quoi parfois on passe pas loin mais trop quand même ...
petite précision : pourquoi s'économiser un variable public ?
Sécurité ? occupation mémoire ? philosophie ?

Public Property Get NomDePropriété : renvoie la valeur de la
propriété
et

Public Property Let NomDeProPriété : affecte la valeur de la
propriété
ce qui revient a ajouter une propriété à l'objet UserForm. Dans
l'exemple, TxtCtrl devient une propriété du UserForm au même titre que
BackColor, ForeColor, Caption, etc... et qui contient le nom du
contrôle à renseigner lors du double-click.

Cette syntaxe est principalement utilisée dans le développement de
contrôles ActiveX (en VB6) où elle est indispensable pour définir les
propriétés du contrôle. Mais elle peut l'être également avec les
UserForm ou les modules de classe.



super ... très beau en fait :-)

je t'offre un plein seau de mercis
@+lolo




--
Cordialement,

Jacques.


Avatar
Jacques93
Bonjour Péhemme,

Contrairement à la collection 'Controls', il ne semble pas qu'on
puisse référencer les éléments de la collection 'UserForms' par leur
nom. D'ailleurs l'objet 'UserForm' n'a pas de propriété 'Name', si
quelqu'un en connait la raison ???

Mais on peut contourner le problème en balayant la collection
UserForms de 0 UserForms.Count -1 et en testant le nom :

Private Sub Calendar1_DblClick()
Dim i As Integer

For i = 0 To UserForms.Count - 1
If UserForms(i).Name = UsfUsed Then
UserForms(i).Controls(TxtCtrl) = Format(Calendar1.Value,
"dd/mm/yyyy")
Exit For
End If
Next i
Unload Me
End Sub

Bonjour Jacques93,

Inspiré de ta réponse d'hier à -=lolol=- je souhaite passer également le
nom du UserForm en "variable".

1°) Dans le UserForm de saisie (d'origine) :

a) dans l'évènement "Initialize" du UserForm :
usfaCalendrier.UsfUsed = "usfIns"

b) évènement "Enter" de chaque TextBox concernée :
usfaCalendrier.TxtCtrl = "txtDateNais" 'le nom de chaque TextBox
usfaCalendrier.Show


2°) Dans le UserForm "calendrier" (usfaCalendrier)
Private txtName As String
Private usfName As String

Public Property Let TxtCtrl(newName As String)
txtName = newName
End Property
Public Property Get TxtCtrl() As String
TxtCtrl = txtName
End Property
Public Property Let UsfUsed(newUsf As String)
usfName = newUsf
End Property
Public Property Get UsfUsed() As String
UsfUsed = usfName
End Property
Private Sub Annuler_Click()
Unload Me
End Sub

Private Sub Calendar1_DblClick()
UserForms(UsfUsed).Controls(TxtCtrl) = Format(Calendar1.Value,
"dd/mm/yyyy")
Unload Me
End Sub

Alors que les "variables" UsfUsed et TxtCtrl prennent bien le nom des
contrôles d'origine, un bogue, pour incompatibilité de type, se produit sur
la ligne :
UserForms(UsfUsed).Controls(TxtCtrl) = Format(Calendar1.Value, "dd/mm/yyyy")
Cela provient certainement de la déclaration de ma UserForm mais je ne
trouve pas la façon d'y remédier.
Peux-tu me remettre sur la voie ?
Merci d'avance de ton aide.
Michel



--
Cordialement,

Jacques.

Avatar
Péhemme
Merci Jacques93 de ta réponse.
Il faut que je travaille ce sujet car, en l'état, je me fait jeter dès la
deuxième TextBox.
En fait, l'instruction semble perdre le nom de la UserForm (en l'occurrence
"usfIns") dès la deuxième utilisation au sein de la même UserForm.
Bien amicalement
Michel



"Jacques93" a écrit dans le message de news:

Bonjour Péhemme,

Contrairement à la collection 'Controls', il ne semble pas qu'on puisse
référencer les éléments de la collection 'UserForms' par leur nom.
D'ailleurs l'objet 'UserForm' n'a pas de propriété 'Name', si quelqu'un en
connait la raison ???

Mais on peut contourner le problème en balayant la collection UserForms
de 0 UserForms.Count -1 et en testant le nom :

Private Sub Calendar1_DblClick()
Dim i As Integer

For i = 0 To UserForms.Count - 1
If UserForms(i).Name = UsfUsed Then
UserForms(i).Controls(TxtCtrl) = Format(Calendar1.Value,
"dd/mm/yyyy")
Exit For
End If
Next i
Unload Me
End Sub

Bonjour Jacques93,

Inspiré de ta réponse d'hier à -=lolol=- je souhaite passer également le
nom du UserForm en "variable".

1°) Dans le UserForm de saisie (d'origine) :

a) dans l'évènement "Initialize" du UserForm :
usfaCalendrier.UsfUsed = "usfIns"

b) évènement "Enter" de chaque TextBox concernée :
usfaCalendrier.TxtCtrl = "txtDateNais" 'le nom de chaque TextBox
usfaCalendrier.Show


2°) Dans le UserForm "calendrier" (usfaCalendrier)
Private txtName As String
Private usfName As String

Public Property Let TxtCtrl(newName As String)
txtName = newName
End Property
Public Property Get TxtCtrl() As String
TxtCtrl = txtName
End Property
Public Property Let UsfUsed(newUsf As String)
usfName = newUsf
End Property
Public Property Get UsfUsed() As String
UsfUsed = usfName
End Property
Private Sub Annuler_Click()
Unload Me
End Sub

Private Sub Calendar1_DblClick()
UserForms(UsfUsed).Controls(TxtCtrl) = Format(Calendar1.Value,
"dd/mm/yyyy")
Unload Me
End Sub

Alors que les "variables" UsfUsed et TxtCtrl prennent bien le nom des
contrôles d'origine, un bogue, pour incompatibilité de type, se produit
sur la ligne :
UserForms(UsfUsed).Controls(TxtCtrl) = Format(Calendar1.Value,
"dd/mm/yyyy")
Cela provient certainement de la déclaration de ma UserForm mais je ne
trouve pas la façon d'y remédier.
Peux-tu me remettre sur la voie ?
Merci d'avance de ton aide.
Michel



--
Cordialement,

Jacques.



Avatar
-=lolol=-
Bonjour Jacques93,

Sécurité, et méthode ;-)


bon, ok, c'est noté
merci

@+lolo

1 2