Problème avec "For Each Cell in Plage"
Bonjour,
Je suis débutant en vba, et je suis actuellement en train de concevoir un logiciel de stock.
En ce moment, je suis sur la phase finale de mon projet, c'est-à-dire à la partie " s'identifier ' de mon projet.
En effet, l'ensemble des personnes qui auront accès à ma gestion de stock, devront s'identifier afin d'emprunter ou rendre un article par un identifiant (nom prénom) et par un mot de passe.
Chaque membre est enregistré dans un tableau "membres" avec un colonne B: identifiant et une colonne C: mot de passe
Mon code recherche le mot de passe en fonction de l'identifiant marqué: si l'identifiant ne correspond pas avec le mot de passe un Msgbox "'Mot de passe incorrect".
Cependant je souhaiterai que lorsque la personne valide son identifiant et son mot de passe, si l'identifiant n'est pas enregistré dans le tableau "membres", ça affiche un Msgbox d'erreur "Identifiant inconnu".
Ca fait plusieurs jours que j'y suis dessus, ci-joint mon code:
Private Sub CommandButton1_Click()
Dim cell As Range
Dim plage As Range
Dim cellule_recherchée As String
Dim user As Boolean
Dim mot_de_passe As String
Set plage = Sheets("TECHNICIENS").Range("B6:B" & [B9999].End(xlUp).Row)
cellule_recherchée = Me.Txt_User.Value
For Each cell In plage
If cell.Value = cellule_recherchée Then
user = True
End If
Next cell
If user = False Then
MsgBox "Identifiant inconnu"
End If
If user = True Then
mot_de_passe = WorksheetFunction.VLookup(Txt_User, Sheets("TECHNICIENS").Range("b:c"), 2, 0)
If Txt_pass = mot_de_passe Then
W_Bon_de_commande.TextBox_User_Bon_de_commande.Value = Me.Txt_User.Value
Unload Me
Else
MsgBox "Mot De Passe incorrect"
End If
End If
End Sub
Ce code marche qu'à moitié:
J'ai l'impression qu'il s'arrête qu'à la première ligne de mon tableau "membre".
Quand je rentre un membre (user dans mon code) avec le bon identifiant mais qui se situe à la 2e / 3e lignes de mon tableau "membres" ça m'affiche mon Msgbox "identifiant inconnu".
J'espère avoir été assez clair.
Merci pour vos retours.
Cordialement,
Bonjour Clems5820 et bienvenue sur XLP
Une bonne pratique (voir le point n°4 de la charte du site) est de joindre à la demande un petit fichier anonymisé et représentatif avec les codes et quelques données pour faciliter la réponse des répondeurs.
A+
Re,
Comme c'est votre première intervention, voici ce qu'on pourrait faire (cliquez sur le bouton Hop!) :
Private Sub CommandButton1_Click()
Dim LigneUser As Long
With Sheets("TECHNICIENS")
' recherche du N° de la ligne égale au User en colonne B [ équivalent à =SiErreur(equiv(...) ; 0) ]
LigneUser = Application.IfError(Application.Match(Txt_User, .Columns("b:b"), 0), 0)
If LigneUser = 0 Then
MsgBox Txt_User & " est un identifiant inconnu.", vbCritical ' user inexistant
Else
If .Cells(LigneUser, "c") <> Txt_pass Then ' mot de passe incorrect
MsgBox "Mot De Passe incorrect", vbCritical
Txt_pass = ""
Else ' mot de passe correct
' instructions
End If
End If
End With
End SubRe bonsoir,
Merci beaucoup pour votre retour rapide, le code marche parfaitement.
Pouvez-vous m'expliquer pourquoi mon code initial ne marchait pas complètement, je souhaiterai comprendre mon erreur pour approfondir mes connaissances.
"For Each Cell in plage" n'était-il pas approprié ?
Cordialement,