Erreur d'exécution 9 - L'indice n'appartient pas à la sélection
Bonjour tout le monde !
J'ai créé un fichier Excel avec une gestion des accès pour les différentes feuilles. Seule la première feuille s'affiche à l'ouverture du fichier, sans avoir à saisir de code. 11 autres feuilles s'affichent selon l'utilisateur qui se connecte et 1 feuille "Administrateur" contient tous les logins, mots de passe et un "X" pour autoriser l'accès à chaque feuille.
Dans cette feuille "Administrateur", j'ai actuellement 15 utilisateurs qui se connectent au moyen d'un UserForm. Les 14 premiers peuvent se connecter comme prévu, en revanche à partir du 15ème utilisateur, j'obtiens le fameux message "Erreur d'exécution 9 - L'indice n'appartient pas à la sélection".
Voici le code VBA de ce UserForm:
Private Sub CommandButton1_Click()
Dim Ws As Worksheet
Dim LR As Long
Dim User As String
Dim Mdp As String
Dim connecté As Boolean
Application.ScreenUpdating = False
Set Ws = Sheets("Administrateur")
LR = Ws.Range("A" & Rows.Count).End(xlUp).Row
connecté = False
If Me.TextBox1 = "" Or Me.TextBox2 = "" Then
MsgBox "Veuillez remplir tous les champs"
Exit Sub
End If
User = Me.TextBox1
Mdp = Me.TextBox2
For Each c In Ws.Range("A2:A" & LR)
If c = User And c.Offset(, 1) = Mdp Then
connecté = True
Exit For
End If
Next c
If connecté = False Then
MsgBox "Vos identifiants sont incorrects"
Me.TextBox1 = ""
Me.TextBox2 = ""
Exit Sub
Else
Worksheets("Consultation").Shapes("bouton_connexion").Visible = False
Worksheets("Consultation").Shapes("bouton_deconnexion_1").Visible = True
For i = 2 To LR
If Ws.Range("A" & i).Value = User Then
For k = 3 To 15
If Ws.Cells(i, k).Value = "X" Then
Sheets(k).Visible = True
Sheets(k).Select
End If
Next k
Exit For
End If
Next i
If Sheets(i).Visible = True Then
Sheets(i).Activate
End If
If MsgBox("Bienvenue, " & User & Chr(10) & Chr(10) & "Cliquez sur OK pour continuer", vbOKOnly + vbInformation, "Connecté") = vbOK Then
Unload Me
End If
End If
Set Ws = Nothing
With Sheets("Logs")
.Cells(2, 1).EntireRow.Insert
.Cells(2, 1).EntireRow.Clear
.Cells(2, 1) = User
.Cells(2, 2) = Now
Set Ws = Feuil14
Ws.Range("AD6").Value = User
Worksheets(3).Select
End With
End SubLorsque le message d'erreur apparaît et que je clique sur le bouton "Débogage", c'est la ligne suivante qui est mise en évidence:
If Sheets(i).Visible = True ThenJe n'arrive vraiment pas à identifier l'origine de mon problème, c'est pourquoi je fais appel à vous pour obtenir de l'aide!
Merci beaucoup par avance pour toute aide!
Bonjour, Sans fichier pour vérifier ce n'est pas évident.
Par ailleurs dans votre boucle c'est k que vous rendez visible et pas i
donc pourquoi une condition sur i après avoir rendu visible k ?
Et pourquoi une boucle K de 3 à 15 ? il y a quoi par exemple en ligne 2 de la colonne 15 de la feuille administrateurs ?
If Ws.Cells(i, k).Value = "X" ThenFor i = 2 To LR
If Ws.Range("A" & i).Value = User Then
For k = 3 To 15
If Ws.Cells(i, k).Value = "X" Then
Sheets(k).Visible = True
Sheets(k).Select
End If
Next k
Exit For
End If
Next i
If Sheets(i).Visible = True Then
Sheets(i).Activate
End IfBonjour, Sans fichier pour vérifier ce n'est pas évident.
Par ailleurs dans votre boucle c'est k que vous rendez visible et pas i
donc pourquoi une condition sur i après avoir rendu visible k ?
Je vous l'accorde, sans fichier c'est pas évident, hélas je ne peux pas l'envoyer tel quel avec toutes les données confidentielles...
Pour le code VBA, j'ai suivi un tutoriel sur Youtube. Je ne m'y connais pas assez hélas par rapport à tout cela, d'où cette "confusion" entre i et k dans ma boucle... est-ce qu'il faudrait que je ne garde que l'un des deux ? Ou que je crée une autre condition ?
Hélas sans fichier difficil de vérifier comment fonctionne vos variables.
( il n'y a pas besoin des infos confidentielles des onglets protégés vous pouvez les effacer pour faire un fichier test. )
Il faut juste les onglets avec leur nom votre userform et votre feuille administrateur avec des users modifié par confidentialité.