Lancer Userform à partir d'une identificationsur un premier Userform
Bonjour, je n'ai pas trouvé la réponse à ma question sur le forum. Etant novice en VBA j'essaye de me former pas une panoplie d'exercices qui me permettent d'apprendre un maximum en un minimum de temps.
Sur celui-ci, j'ai réalisé un exercice récupéré sur Youtube qui simule un distributeur de billets, afin d'aller plus loin je souhaites que la personne s'identifie avec nom / prenom et numéro de compte (présents sur la feuille Clients cellule B2 / C3 / D3 pour le premier et ainsi de suite)afin de pouvoir avoir accès aux retraits. (Application qui peut être très intéressante dans le domaine professionnel en vue de limiter une partie du code ou un userform aux personnes autorisées)
Mon problème c'est que lorsque je tape les informations, j'ai mon erreur qui s'affiche ("Les informations sont inexactes") même lorsque celle-ci sont justes... et bien sur pas d'erreur code donc impossible de savoir pourquoi, c'est surement une erreur bête de débutant mais je ne la trouve pas...
Au passage si vous avez des conseils sur comment optimiser mon code ou encore sur des formations qui sont pertinentes pour des applications professionnelles je suis preneur !
Merci à tous, je ne peux pas vous joindre mon document car le service n'est pas disponible, je vous joins donc mon code et vous joindrais mon document lorsque cela sera possible...
Code identification:
Private Sub valider_Click()
der_l = ActiveWorkbook.Worksheets("Client").Cells(Rows.Count, 2).End(xlUp).Row 'trouver dernière ligne
Dim nom_c As String
Dim ligne As Integer
If nom.Value <> "" And prenom.Value <> "" And compte.Value <> "" Then
If IsNumeric(compte.Value) Then 'Verification numerique ou string
If Not IsNumeric(prenom.Value) And Not IsNumeric(nom.Value) Then
For ligne = 3 To der_l
If ActiveWorkbook.Worksheets("Client").Cells(ligne, 2).Value = Id.nom.Value And ActiveWorkbook.Worksheets("Client").Cells(ligne, 3).Value = Id.prenom.Value And ActiveWorkbook.Worksheets("Client").Cells(ligne, 4).Value = Id.compte.Value Then 'Verification correspondance
Distributeur.Show
Exit Sub
Else
MsgBox ("Les informations entrées sont inexactes.")
nom.Value = ""
prenom.Value = ""
compte.Value = ""
Exit Sub
End If
Next ligne
Else
MsgBox ("Pas de chiffres dans les case nom et prenom, veuillez recommencer.")
nom.Value = ""
prenom.Value = ""
compte.Value = ""
Exit Sub
End If
Else
MsgBox ("Pas de lettres dans la case compte, veuillez recommencer.")
nom.Value = ""
prenom.Value = ""
compte.Value = ""
Exit Sub
End If
Else
MsgBox ("Veuillez remplir tous les champs.")
nom.Value = ""
prenom.Value = ""
compte.Value = ""
End If
End SubCode distributeur:
Private Sub annuler_Click()
txt_montant.Caption = ""
Distributeur.Hide
End Sub
Private Sub valider_Click()
Dim a_max As Integer: Dim b_max As Integer: Dim c_max As Integer
Dim nb_10 As Integer: Dim nb_20 As Integer: Dim nb_50 As Integer
Dim montant As Integer: Dim total_banque As Integer
Dim critere As Boolean
total_banque = Cells(3, 2).Value * 10 + Cells(6, 2).Value * 20 + Cells(9, 2).Value * 50
nb_10 = Cells(3, 2).Value
nb_20 = Cells(6, 2).Value
nb_50 = Cells(6, 2).Value
If IsNumeric(txt_montant.Caption) Then
montant = txt_montant.Caption
If montant > total_banque Then
MsgBox ("Le montant total est supérieur à celui disponible en banque qui est de " & total_banque & " , veuillez recommencer.")
txt_montant.Caption = ""
Exit Sub
End If
Else
MsgBox ("Veuillez saisir un montant à retirer.")
Exit Sub
End If
critere = False
a_max = Int(montant / 50): b_max = Int(montant / 20): c_max = Int(montant / 10)
For a = a_max To 0 Step -1
For b = b_max To 0 Step -1
For c = c_max To 0 Step -1
If (a * 50 + b * 20 + c * 10) = montant Then
If a <= nb_50 And b <= nb_20 And c <= nb_10 Then
MsgBox ("Vous allez recevoir: " & Chr(13) & Chr(10) & "- " & a & " billets de 50" & Chr(13) & Chr(10) & "- " & b & " billets de 20" & Chr(13) & Chr(10) & "- " & c & " billets de 10")
critere = True
Cells(3, 2).Value = Cells(3, 2).Value - c
Cells(6, 2).Value = Cells(6, 2).Value - b
Cells(9, 2).Value = Cells(9, 2).Value - a
txt_montant.Caption = ""
Exit For
End If
End If
Next c
If critere = True Then
Exit For
End If
Next b
If critere = True Then
Exit For
End If
Next a
If critere = False Then
MsgBox ("Aucune combinaison de billets ne permet d'atteindre ce montant." & Chr(13) & Chr(10) & "Veuillez saisir un nouveau montant.")
txt_montant.Caption = ""
End If
End Sub
Private Sub un_Click()
txt_montant.Caption = txt_montant.Caption + "1"
End Sub
Private Sub deux_Click()
txt_montant.Caption = txt_montant.Caption + "2"
End Sub
Private Sub trois_Click()
txt_montant.Caption = txt_montant.Caption + "3"
End Sub
Private Sub quatre_Click()
txt_montant.Caption = txt_montant.Caption + "4"
End Sub
Private Sub cinq_Click()
txt_montant.Caption = txt_montant.Caption + "5"
End Sub
Private Sub six_Click()
txt_montant.Caption = txt_montant.Caption + "6"
End Sub
Private Sub sept_Click()
txt_montant.Caption = txt_montant.Caption + "7"
End Sub
Private Sub huit_Click()
txt_montant.Caption = txt_montant.Caption + "8"
End Sub
Private Sub neuf_Click()
txt_montant.Caption = txt_montant.Caption + "9"
End Sub
Private Sub zero_Click()
txt_montant.Caption = txt_montant.Caption + "0"
End SubBonjour, il faut éviter de mettre des "Exit sub" partout.
Il ne peut pas y avoir de Else si vous avez indiqué un exit si la condition n'est pas remplie.
If ActiveWorkbook.Worksheets("Client").Cells(ligne, 2).Value = Id.nom.Value And ActiveWorkbook.Worksheets("Client").Cells(ligne, 3).Value = Id.prenom.Value And ActiveWorkbook.Worksheets("Client").Cells(ligne, 4).Value = Id.compte.Value Then 'Verification correspondance
Distributeur.Show
Exit Sub
ElsePar ailleurs toutes le conditions de vérification du contenu devrait se trouver en premier et ce n'est qu'à la fin qu'on devrait trouver la commande userform show
Merci Xmenpl pour ta réponse, cependant, même en retirant les Exit Sub et en remplaçant le userform show par un msgbox je me retrouve toujours avec le même problème, cad le message d'erreur "Les informations son inexactes." alors qu'elles sont correctement rentrées...
Je peux vous joindre le document désormais le bug est résolu.