VBA EXCEL : problème de procédure

Résolu
dreamerforever -  
Bidouilleu_R Messages postés 1209 Statut Membre -
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.

3 réponses

  1. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  2. blasted
     
    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
    1. Bidouilleu_R Messages postés 1209 Statut Membre 296
       
      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