Question formulaire
Bonjour,
Ci-joint 2 fichiers (trouvés dans un livre de formation à VBA) à mettre dans le même répertoire.
Ouvrir le fichier de base : Chap17.
Cliquer sur le bouton "Editer un contrat".
Dans le premier formulaire "Contrat auteur", choisir un Nom puis cliquer sur suite.
Dans le deuxième formulaire "Contrat d'auteur", entrer un titre de l'ouvrage puis un ISBN par exemple 1256-5 puis cliquer sur suite.
Le troisième formulaire apparaît et là vient ma question :
ce formulaire était prévu pour fonctionner avec le contrôle calendrier d'Excel (mais que je n'ai pas réussi à installer).
Donc pour simplifier, j'ai mis en commentaire tout ce qui avait un rapport avec "calendrier", vous le verrez dans le code de ce formulaire : fmContratDates, et je pensait simplement pouvoir saisir les dates dans les champs "Date de remise" et "Date de parution". Mais comme vous le voyez, je n'ai pas accès aux cases pour saisir mes dates...
Bloqué depuis plusieurs heures sur ce problème qui, pour des experts comme vous, doit trouver une solution !
En attente de vos retours !
Dadams
Bonjour Dadams51
Le troisième formulaire apparaît et là vient ma question :
ce formulaire était prévu pour fonctionner avec le contrôle calendrier d'Excel (mais que je n'ai pas réussi à installer).
Tu peux pour cela, utiliser un USF et un module de classe, voir l'exemple dans ton fichier enregistré au format Excel 2010
Donc pour simplifier, j'ai mis en commentaire tout ce qui avait un rapport avec "calendrier", vous le verrez dans le code de ce formulaire : fmContratDates, et je pensait simplement pouvoir saisir les dates dans les champs "Date de remise" et "Date de parution". Mais comme vous le voyez, je n'ai pas accès aux cases pour saisir mes dates...
Bloqué depuis plusieurs heures sur ce problème qui, pour des experts comme vous, doit trouver une solution !
C'est dommage, car c'était une bricole
Ton Textebox avait Enabled à FALSE, il faut le mettre à TRUE
A+
Bonjour BrunoM45,
Merci pour cette riche solution !
1) J'ai bien vu qu'en masquant tes procédures TxtParution_Enter() et txtRemise_Enter(), j'arrive à saisir les dates directement dans les champs.
2) Sinon ton Userform pour la saisie des dates est très pratique, mais je n'en comprends pas bien le fonctionnement
Merci pour ton retour.
Dadams51
Salut
J'ai modifié le code de ton fichier initial (un copier/coller trop rapide)
Un module de classe est un module qui permet d'instancier (de lier) des contrôles identiques à un/des évènement(s)
Dans ton USF : fmContratDate
On définit en entête de ton USF un tableau de 2 instances correpondant à tes 2 TextBox
Option Explicit
Dim TbxDate(2) As New Classe1A l'initialisation de ton USF on définit les 2 objets utilisant cette Classe
Private Sub UserForm_Initialize()
....
Set TbxDate(1).Tbx = Me.txtRemise
Set TbxDate(2).Tbx = Me.TxtParution
End SubPour la bonne marche de l'USF Calendrier, on définit dans un module classique, des variables public qui vont nous servir
' Variable Public
Public ObjDate As Object, vDate As Date
Public ObjTop As Integer, ObjLeft As IntegerDans le module de Classe, on définit 2 objets avec évènement (Lbl et Tbx)
Et on détermine les évènement que l'on souhaite gérer
Public WithEvents Lbl As MSForms.Label
Public WithEvents Tbx As MSForms.TextBox
Private Sub Tbx_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim ObjParent As Object
' Si c'est bien un clic gauche dans le champ
If Button = 1 Then
' Définir l'objet contenant la date
Set ObjDate = Tbx
' Récupérer l'objet parent : USF
Set ObjParent = Tbx.Parent
Do While Not TypeOf ObjParent Is MSForms.UserForm
Set ObjParent = ObjParent.Parent
Loop
' Mesures pour position de l'USF
ObjTop = ObjParent.Top + Tbx.Top + Tbx.Height
ObjLeft = ObjParent.Left + Tbx.Left + Tbx.Width
' Afficher l'USF
UsF_Calendrier.Show (1)
If vDate <> "00:00:00" Then Tbx.Value = vDate
' Effacer la variable objet
Set ObjDate = Nothing
End If
End Sub
Private Sub Lbl_Click()
UsF_Calendrier.ChJour Val(Lbl.Tag)
End Sub
Private Sub Tbx_Change()
If InStr(1, "0123456789/", Right(Tbx, 1)) = 0 Then Tbx = Left(Tbx, Len(Tbx) - 1)
End SubVoilà, j'espère que ce sera un peu plus clair
A+
Bonjour BrunoM45,
Ben, non rien n'est clair...Car je ne retrouve pas ces morceaux de codes dans le fichier (que j'ai joint).
Option Explicit
Dim TbxDate(2) As New Classe1
Private Sub UserForm_Initialize()
....
Set TbxDate(1).Tbx = Me.txtRemise
Set TbxDate(2).Tbx = Me.TxtParution
End Sub
Ou peut-être voulais-tu expliquer le module de classe d'une autre façon (différente de celle du fichier).
En tout cas ma question initiale est résolue, le fichier fonctionne et j'ai du travail en compréhension des codes VBA !
A+
Dadams51