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

10chap17.zip (55.56 Ko)

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

2018 05 05 04h46 35

A+

10chap17.xlsm (85.88 Ko)

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 . Je n'ai encore jamais utilisé de Module de Classe .Comment comprendre le code lorsqu'on clique sur le textbox de la date ?

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 Classe1

A 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 Sub

Pour 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 Integer

Dans 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 Sub

Voilà, 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

Rechercher des sujets similaires à "question formulaire"