Hello,
Là tu nous donnes les infos par petit bout. Pour te répondre il nous en faut plus.
Comment déclares-tu "txt" ? Une collection ? Dans quel module ? Quel code.
La vérification suivante utilise la macro txt_Change du module de classe (donc indispensables tous les deux) mais ne vérifie que les textbox, pas des combobox.
'vérification du contenu des texbox pour rendre visible le bouton valider
En outre, tu dois modifier le module de classe puisque sur les 56 contrôles tous ne sont pas des Textbox (tu me corriges si je me trompe)
Si le dernier contrôle à remplir est un textbox, tu peux le modifier ainsi mais si les contrôles sont remplis de manière aléatoire (un combo étant le dernier contrôle sélectionné) le bouton n'apparaîtra pas.
1 2 3 4 5 6 7 8 9 10
| Private Sub txt_Change()
For Each ctrl In UserForm2.Controls
If TypeOf ctrl Is MSForms.TextBox or _
TypeOf ctrl Is MSForms.ComboBox Then
If ctrl <> "" Then x = x + 1
End If
Next ctrl
UserForm2.CommandButton1.Visible = x = 56
x = 0
End Sub |
On peut néanmoins le faire fonctionner mais pour cela tu devras imposer le dernier contrôle à renseigner qui devra être un Textbox (auquel cas il faudra modifier la procédure txt_Change ds le module de classe)
Mais pour le moment, teste le code "comme ça", on verra pour imposer le dernier contrôle à renseigner. En attendant je regarde une autre solution.
A+
En utilisant une autre méthode on peut vérifier à la fois les combo et les textbox mais tu as plusieurs modifs à faire
Dans le module standard, en tête de module, ajoute
Public Collect As Collection
Dans userform_initialize d'userform2, ajoute
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Private Sub UserForm_Initialize() 'De l'userform2
'Au code existant tu ajoutes... *************
Dim Cbx As Control
Dim Cl1 As Classe1
Set Collect = New Collection
For Each Cbx In Me.Controls
If TypeOf Cbx Is MSForms.ComboBox Then
Set Cl1 = New Classe1
Set Cl1.Liste = Cbx
Collect.Add Cl1
End If
Next Cbx
'... tout ça ******************************
End Sub |
Dans le module de classe, en plus de la macro de mon message précédent, ajoute en tête de module
Public WithEvents Liste As MSForms.ListBox
et ensuite la macro
1 2 3 4 5 6 7 8 9 10 11
| Private Sub Liste_Click()
Dim ctrl As Control, x As Integer
For Each ctrl In UserForm1.Controls
If TypeOf ctrl Is MSForms.TextBox Or _
TypeOf ctrl Is MSForms.ComboBox Then
If ctrl <> "" Then x = x + 1
End If
Next ctrl
UserForm1.CommandButton1.Visible = x = 56
x = 0
End Sub |
Ainsi, que l'utilisateur termine sa saisie par un combo ou un textbox, la vérification se fera.
Par contre, si tu créais un tableau des cellules renseignées, tu pourrais renvoyer l'utilisateur pile poil sur le prochain contrôle non renseigné. Mais c'est une autre histoire qui, si elle t'intéresse, te sera racontée plus tard 
En attendant, parle-nous de tes avancées 
Bonne journée
Partager