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 Sub

Lorsque 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 Then

Je 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" Then
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

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 ?

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é.

Rechercher des sujets similaires à "erreur execution indice appartient pas selection"