Un problème avec Do/Loop et If/else/end If
Bonjour,
Je suis entrain de boucler une application Excel. J'ai fait un userform de login/password. Dans une feuille cachée, j'ai une colonne pour les noms d'utilisateur, une autre pour les mots de passe et une dernière colonne pour les groupes (gestion des profils des utilisateurs). Du genre:
Nom.....password..............groupe
toto.......pwd1 ..............0
tata.......pwd2 ..............2
titi.........pwd3 ...............1
Selon le code du groupe, l'utilisateur aura accès à certaines feuilles et pas à d'autres.
J'ai écrit un bout de code qui permet de tester le nom/pwd pour accéder aux feuilles.
Le problème est que je n'arrive pas à gérer le cas où le nom et le mot de passe de correspondent pas. En fait, j'aimerai qu'un message puisse indiquer à l'utilisateur qu'il y a non concordance entre login et mot de passe.
Il y a un détail qui me manque, c'est pour cela que je sollicite votre aide:
C'est une boucle Do... Loop. l'alternative Else ne fonctionne pas pour le premier If.
Voici le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
Private Sub cmdOK_Click()
'******************************************
'******************************************
'Code de connexion dans l'applicatif
'******************************************
'******************************************
Dim sLogin As String
Dim sPwd As String
Dim i As Integer
Dim iVarTest As Integer
Dim iLongueur As Integer
'Gestionnaire des erreurs
On Error Resume Next
'Récupération des paramètres de connexion
sLogin = txtNom
sPwd = txtMot
'Récupération de la longueur du mot de passe
iLongueur = Len(sPwd)
'Vérification que le mot de passe est de longueur supérieur à 5 et inférieur à 8
If iLongueur < 5 Or iLongueur > 8 Then
MsgBox "Le mot de passe doit avoir 5 caractères au minimum et 8 caractères au maximum", vbInformation, "Longueur mot de passe"
txtMot.SetFocus
Exit Sub
End If
'Récupération du numéro de la dernière ligne occupée
iVarTest = Sheets("mot").Range("A65000").End(xlUp).Row
'*****************************************************
'*****************************************************
Application.ScreenUpdating = False
'Initialisation de la variable de la boucle
i = 2
'Début de la boucle
Do
'Vérification du nom d'utilisateur et du mot de passe
If (sLogin = Sheets("mot").Cells(i, 1).Value) And (sPwd = Sheets("mot").Cells(i, 2).Value) Then
'Vérification du profil de l'utilisateur
If Sheets("mot").Cells(i, 3).Value = 0 Then
Call ReactivationFeuille0
'sortie de la boucle
Exit Do
'****************************************************
ElseIf Sheets("mot").Cells(i, 3).Value = 1 Then
Call ReactivationFeuille1
'sortie de la boucle
Exit Do
'*****************************************************
ElseIf Sheets("mot").Cells(i, 3).Value = 2 Then
Call ReactivationFeuille2
'sortie de la boucle
Exit Do
'*****************************************************
Else
MsgBox "Groupe inconnu", vbInformation, "Gestion des profils"
Exit Do
End If
'***********************
'Si code actif, une seule entrée dans la boucle
'***********************
'Alternative à problème
'Else
'MsgBox "Nom ou mot de passe incorrects", vbInformation, "Login"
'Exit Do
'***********************
'***********************
End If
'Icrémentation de la boucle
i = i + 1
'Sortie définitive de la boucle si la condition est remplie:
'(la valeur de i est supérieure au numéro de la dernière ligne occupée)
Loop While i <= iVarTest
End Sub |
Si le bout de code suivant est actif, le test se fait seulement sur le premier enrégistrement, les autres sont ignorés. Je suis obligé de le mettre en commentaire. Dans ce cas, le code n'a pas de problème, sauf que si le login et le mot de passe ne sont pas bons, il ne fait rien, c'est-à-dire, l'utilisateur n'accède pas à l'application, mais aucun message ne le lui dit, comme j'aurai voulu que ce soit le cas:
Code:
1 2 3 4 5 6 7 8 9 10
|
'***********************
'Si code actif, une seule entrée dans la boucle
'***********************
'Alternative à problème
'Else
'MsgBox "Nom ou mot de passe incorrects", vbInformation, "Login"
'Exit Do
'***********************
'*********************** |
Qu'est qui ne va pas dans ce code?