VBA EXCEL : problème de procédure

Résolu/Fermé
dreamerforever - Modifié par dreamerforever le 3/06/2010 à 10:38
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 - 6 juin 2010 à 13:34
Bonjour,

Je cherche à faire une procédure en mettant en paramètres un label et une textbox.

Voici mon code d'origine :

Private Sub 1erarticle_Change()

If montant1.Caption < 0 Then
remise1.Value = ""
If remise1.Text = "" Then Exit Sub
MsgBox "Le prix T.T.C doit être positif !"
Exit Sub
End If
End Sub

Private Sub 2emearticle_Change()
If montant2.Caption < 0 Then
remise2.Value = ""
If remise2.Text = "" Then Exit Sub
MsgBox "Le prix T.T.C doit être positif !"
Exit Sub
End If
End Sub

.....

Je dispose d'une vingtaine d'articles. Donc je suppose qu'il y a une autre façon de faire plutôt que de faire des copier/coller 20 fois.

Du coup, j'ai eu l'idée de faire appel à une procédure mais cela ne fonctionne pas (incompatibilité de type)


'Procédure permettant d'afficher l'erreur
Private Sub article(ByVal remise As TextBox, ByVal montant As Label)

montant As Label
remise As TextBox

If montant.Caption < 0 Then
remise.Value = ""
If remise.Text = "" Then Exit Sub
MsgBox "Le prix T.T.C doit être positif !"
Exit Sub
End If

End Sub

Private Sub 1erarticle_Change()
Call article(remise1, montant1)
End Sub

Private Sub 2emearticle_Change()
Call article(remise2, montant2)
End Sub

--------

Comment résoudre ce problème ?

En vous remerciant par avance pour vos éventuelles réponses.





A voir également:

3 réponses

Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
3 juin 2010 à 11:38
je ferai comme ça...
1) je controlerai tous les textboxes avec un code placé dans un bouton
( par exemple le bouton valider ici c'est commandButton1)
2) en cas de probleme ( ici je teste le vide ) tu reviens sur le textbox qui pose problème et il faudra de nouveau revalider.

En espérant t'aider

Private Sub CommandButton1_Click()

Dim Ctrl As Control
Dim i As Integer
i = 1
For Each Ctrl In UserForm1.Controls
If TypeOf Ctrl Is MSForms.TextBox Then
If Ctrl.Value = "" Then
Ctrl.SetFocus
s = MsgBox(" Erreur ce controle est vide : " & Ctrl.Name, vbCritical, " erreur Alerte")
Exit Sub
End If

i = i + 1
End If
Next

End Sub
1
dreamerforever
3 juin 2010 à 12:53
Merci infiniment ;)
0
Je ne crois pas que cette réponse répond pas à la question de Dreamerforever. Avec cette solution il devra quand même faire ses 20 copier - coller ...
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
6 juin 2010 à 13:34
non!
S'il place son controle dans un bouton extérieur une seule boucle vérifiera les textboxes
mais si il veut les contrôler un par un il n'y a pas de solution car soit on écrit un code de contrôle soit il n'y en a pas maintenant on peut toujours améliorer ou simplifier la boucle.
0