Bonjour à tous,
J'ai un souci sur l'APPLI que j'aie créée en VBA avec des UserForm.
Pour expliquer le mode de fonctionnement de mon appli, vous trouverez ci-après les étapes des traitements qui sont peut-être un peu longues mais à mon avis essentielles à la bonne compréhension du déroulement :
- Saisie des données dans UserForm1
- Certains champs sont contrôlés à la saisie par des procédures (ex : Private Sub VTxtHeure_Change())
- Sur bouton "Valider" des contrôles se font sur les champs à saisie obligatoire
- Quand tout est OK les données sont enregistrées sur une feuille "Données"
Jusque-là tout va bien !
- Ensuite, le chef de service doit valider ces fiches. Pour cela, il rappelle les données dans l'Userform2 par le biais d'un double-clic dans un UserForm dédié à la sélection
- J'ai donc créé un Module dans lequel j'ai une variable pour chaque champ (ex pour le même champ : Public ValidHeure As String) et à l''Initialize()" de l'UserForm2, le champ = la variable (ex: VTxtHeure.Value = ValidHeure)
- La variable à ce moment prend les données de la feuille "Données" (ex : ValidHeure = Format(Sh.Range("D" & .List(.ListIndex, 4)), "hh:mm"))
- Tout s'affiche correctement et au bon endroit.
- Si tout est OK, il valide la fiche et un document s'affiche pour imprimer cette dernière.
- Les données sont retransférées dans la feuille 'Données"
En revanche, si certains champs doivent être corrigés, et c'est là qu'apparaît Mon souci, dans l'Userform2 les contrôles à la saisie ne s'appliquent pas.
J'ai recopié le même code que dans l'UserForm1 en changeant les noms de champ mais rien n'y fait !
A titre d'exemple, je vous mets ci-dessous le code sur le champ Heure des 2 UserForm.
Userform1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Private Sub TxtHeure_Change() On Error Resume Next Dim Texte As String Texte = TxtHeure.Text Select Case Len(Texte) Case 2 If CInt(Texte) > 23 Then Texte = "" Else Texte = Texte & ":" End If Case 5 If CInt(Right(Texte, 2)) > 59 Then MsgBox ("Vous avez saisi des minutes supérieures à 59") Texte = "" End If End Select TxtHeure.Text = Texte On Error GoTo 0 End SubUserForm2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub TxtHeure_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If InStr("1234567890,:", Chr(KeyAscii)) = 0 Then KeyAscii = 0: Beep: MsgBox ("Ne saisir que des chiffes (4 obligatoires) et pas les ':' ! Si pas d'heure, tapez '00:00'.") End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Private Sub VTxtHeure_Change() On Error Resume Next Dim vTexte As String vTexte = VTxtHeure.Text Select Case Len(vTexte) Case 2 If CInt(vTexte) > 23 Then vTexte = "" Else vTexte = vTexte & ":" End If Case 5 If CInt(Right(vTexte, 2)) > 59 Then MsgBox ("Vous avez saisi des minutes supérieures à 59") vTexte = "" 'Left(Texte, 3) End If End Select VTxtHeure.Text = vTexte On Error GoTo 0 End SubSur mon UserForm2, lorsque je veux changer l'heure, je n'ai pas de contrôle sur les chiffres saisis et les ":" ne s'affichent pas dès que les 2 premiers chiffres ont été saisis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub VTxtHeure_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If InStr("1234567890,:", Chr(KeyAscii)) = 0 Then KeyAscii = 0: Beep: MsgBox ("Ne saisir que des chiffes (4 obligatoires) et pas les ':' ! Si pas d'heure, tapez '00:00'.") End Sub
Sur les autres champs, les contrôles en saisie ne se font pas également, en revanche, ceux sur le bonton 'Valider" fonctionnent bien… ????
Je vous remercie d'avoir pris le temps de tout lire et de votre aide à venir.
Je suis prêt à répondre à vos questions pertinentes.
Cordialement
Partager