Option Explicit
Sub Essai()
Dim FX As Worksheet, FA$, User$, MDP$, DerLigne&, flag As Byte, n%, i%, x&
n = Worksheets.Count: Application.ScreenUpdating = 0
'on affiche la feuille vierge, et on va dessus
Worksheets("L").Visible = True: Worksheets("L").Select
'on masque toutes les autres feuilles
For i = 1 To n
If Worksheets(i).Name <> "L" Then Worksheets(i).Visible = xlSheetVeryHidden
Next i
'on saisit le user, puis le mot de passe
User = InputBox("Veuillez saisir votre nom d'utilisateur", "Utilisateur")
MDP = InputBox("Veuillez saisir votre mot de passe", "Mot de passe")
If User = "" Or MDP = "" Then Exit Sub
If User = "JD" And MDP = "Jpc42*" Then
For i = 1 To n
If Worksheets(i).Name <> "Intro" Then Worksheets(i).Visible = True
Next i
Exit Sub
End If
With Worksheets("DroitsUsers") 'avec la feuille "DroitsUsers"
DerLigne = .Cells(Rows.Count, 1).End(xlUp).Row 'Dernière ligne, selon la colonne A
For x = 2 To DerLigne 'boucle à partir de 2, car 1ère ligne = en-têtes de colonnes
'si on trouve en colonnes A et B le User ET le Mot de passe qui ont été saisis
If .Cells(x, 1) = User And .Cells(x, 2) = MDP Then
'on affiche la feuille autorisée (nom en colonne C)
FA = .Cells(x, 3): Worksheets(FA).Visible = True
'c'est pour aller, après la sortie de boucle, sur la 1ère feuille autorisée ;
'note qu'il ne faut pas aller sur chaque feuille autorisée dans la boucle !
If flag = 1 Then Set FX = Worksheets(FA)
Worksheets("L").[D10] = .Cells(x, 4) 'info de la colonne D : en feuille L
flag = flag + 1 'si au moins une feuille a été trouvée, on quittera la sub
End If
Next x
End With
'comme au moins une feuille a été trouvée, on va sur la 1ère feuille autorisée,
'puis on quitte la sub pour ne pas faire la suite (qui est : fermer le fichier)
If flag > 0 Then FX.Select: Exit Sub
'on n'a pas trouvé de feuille autorisée => on ferme le fichier
MsgBox "Utilisateur ou mot de passe non valide" & vbCrLf & vbCrLf _
& "Le fichier va se fermer", vbCritical + vbOKOnly, "Sécurité"
ActiveWorkbook.Close SaveChanges:=False
End Sub