Problème mot de passe utilisateur via VBA

Résolu
Jb6161 Messages postés 53 Statut Membre -  
skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour tout le monde,

J'ai réussi à configurer Excel afin que chaque utilisateur accède uniquement aux feuilles qui lui sont autorisées via un mot de passe grâce à la fiche pratique suivante :

https://www.commentcamarche.net/faq/37104-vba-excel-mot-de-passe-et-utilisateurs

Hier tout fonctionnait à merveille mais là, impossible de comprendre on m'indique l'erreur suivante en gras dans le module 2:

Sub AfficheFeuilles(Utilisateur As String)

Dim Col As Byte, i As Byte, Lig As Integer
With Sheets("parametrage")
'dans la feuille paramétrage
'comme on va boucler de la colonne 4 à la dernière colonne, on stocke le n° de la dern colonne :
Col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
'on cherche colonne A le nom d'utilisateur saisi et on stocke son num de ligne
Lig = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole).Row
For i = 3 To Col
If UCase(.Cells(Lig, i)) = "X" Then 'si on trouve un "X" dans la cellule
Sheets(.Cells(1, i).Value).Visible = True 'on affiche la feuille
Else
Sheets(.Cells(1, i).Value).Visible = xlSheetVeryHidden 'sinon on la masque
End If
Next i
End With
End Sub

J'ai enlevé le code suivant dans ThisWoorkbook pour que vous n'ayez pas besoin de vous loguer:

Private Sub Workbook_Open()
HorlogeEnG5

Dim Ws As Worksheet
'Masque toutes les feuilles sauf la feuille "Feuil1"
'!!!! ADAPTEZ le nom de la feuille qui doit rester affichée
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name <> "vierge" Then Ws.Visible = xlSheetVeryHidden
Next Ws
'Charge l'Userform en mémoire
Load UserForm1
'Affiche l'Userform
UserForm1.Show
End Sub

Merci d'avance pour votre aide !

Désolé je ne pourrai envoyer le fichier seulement par mail

9 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Sheets(.Cells(1, i).Value).Visible = True
    Erreur d'exécution '9' L'indice n'appartient pas à la sélection

    Cette feuille n'existe sans doute plus sous ce nom. Tout compte : espace, majuscules etc
    En débogage regarde la valeur de i, ensuite le contenu de .Cells(1, i) (dans la feuille paramétrage donc) qui contient le nom de la feuille.

    @skk201 : s'il y avait de grossières erreurs dans la fiche pratique je pense qu'elles seraient ressorties plus tôt. Je pense plutôt à une mauvaise manip utilisateur.

    eric

    En essayant continuellement, on finit par réussir.
    Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
    En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
    1
  2. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
     
    Actuellement ça serait pas plus simple de faire un système que les feuille s'affiche selon le nom d'utilisateur ?

    Exemple si ton mon d'utilisateur est JB6161, alors ça affiche la feuille JB6161 ?
    0
  3. Jb6161 Messages postés 53 Statut Membre
     
    Oui je te cache pas que ce serait plus simple mais c'est pour une entreprise donc j'aimerai garder cette idée si possible, surtout que cette méthode fonctionnait très bien hier !
    Le débogage m'indique l'erreur en gras ci dessous avec comme message d'erreur une fois que je me suis logué: " Erreur d'exécution '9' L'indice n'appartient pas à la sélection " et " Impossible d'éxecuter le code en mode arrêt "

    Sub AfficheFeuilles(Utilisateur As String)

    Dim Col As Byte, i As Byte, Lig As Integer
    With Sheets("parametrage")
    'dans la feuille paramétrage
    'comme on va boucler de la colonne 4 à la dernière colonne, on stocke le n° de la dern colonne :
    Col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
    'on cherche colonne A le nom d'utilisateur saisi et on stocke son num de ligne
    Lig = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole).Row
    For i = 3 To Col
    If UCase(.Cells(Lig, i)) = "X" Then 'si on trouve un "X" dans la cellule
    Sheets(.Cells(1, i).Value).Visible = True 'on affiche la feuille
    Else
    Sheets(.Cells(1, i).Value).Visible = xlSheetVeryHidden 'sinon on la masque
    End If
    Next i
    End With
    End Sub
    0
  4. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
     
    Sheets(Cells(1, i).Value)

    Enlève le . avant Cel. Et tû va avoir le m'eme problème juste en dessous.

    Et pour récupéré le nom de l'utilisateur il faut écrire

    Enivron("username")

    Exemple :

    Msgbox Environ("username")
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
     
    Rectification il faut que tu écrive :

    .Sheets(Cells(1, i).Value).Visible = True 'on affiche la feuille 
    Else
    .Sheets(Cells(1, i).Value).Visible = xlSheetVeryHidden 'sinon on la masque

    J'avais pas vu le With

    Enfin moi j'écrirai :

    Sub AfficheFeuilles(Utilisateur As String) 

    Dim Col As Byte, i As Byte, Lig As Integer
    With Sheets("parametrage")
    'dans la feuille paramétrage
    'comme on va boucler de la colonne 4 à la dernière colonne, on stocke le n° de la dern colonne :
    Col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
    'on cherche colonne A le nom d'utilisateur saisi et on stocke son num de ligne
    Lig = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole).Row
    End With
    For i = 3 To Col
    If UCase(Cells(Lig, i)) = "X" Then 'si on trouve un "X" dans la cellule
    Sheets(Cells(1, i).Value).Visible = True 'on affiche la feuille
    Else
    Sheets(Cells(1, i).Value).Visible = xlSheetVeryHidden 'sinon on la masque
    End If
    Next i

    End Sub
    0
  7. Jb6161 Messages postés 53 Statut Membre
     
    J'ai tapé exactement le même code hier et cela fonctionnait très bien, comme le dit eriiic, ça doit venir d'une erreur au niveau du nom de la feuille je pense.

    Merci pour ta réponse en tout cas
    0
  8. Jb6161 Messages postés 53 Statut Membre
     
    Bonjour eriiic,

    Alors la valeur de i=4 et pour la valeur de .Cells(1,i) je n'arrive pas à la voir dans la feuille parametrage vu que justement cette feuille ne s'affiche plus

    Cdlt
    0
    1. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
       
      Si elle existe toujours tu peux toujours la rendre visible dans l'éditeur VBA.

      Dans ton projet tu séléectionne la feuille et dans le propriété en bas tu change la porpiété "Visible" tu choisi : "-1 - xlSheetVisible" et la feuille sera a nouveau visible
      0
    2. Jb6161 Messages postés 53 Statut Membre
       
      Ah yes, merci !
      Et donc "1 " correspond à la ligne ou la colonne ?
      0
    3. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
       
      Cells(Ligne, Colonne)
      0
    4. Jb6161 Messages postés 53 Statut Membre
       
      D'accord, alors du coup ça correspond à une feuille qui se nomme " Base de données "
      0
  9. Jb6161 Messages postés 53 Statut Membre
     
    Je vous transmet mon fichier, si ça peut vous aider !

    https://www.cjoint.com/?DFeqQxYGWXl
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      "Base de donées" avec un seul n dans parametrage!D1 c'est normal ?
      eric
      0
    2. Jb6161 Messages postés 53 Statut Membre
       
      Non non, c'était mon erreur, je m'en suis rendu compte il y a 10min...
      Tout ça à cause d'une erreur de frappe !


      J'ai une autre question pendant que j'y suis, je sais qu'il est possible de changer les couleurs d'une cellule en fonction de certaines valeurs mais est il possible de le faire par rapport à un décompte ?

      Merci beaucoup pour vos réponses en tout cas !
      0
    3. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
       
      Qu'est-ce que tu entend par un décompte ?
      0
      1. Jb6161 Messages postés 53 Statut Membre > skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention  
         
        Un compte à rebours si tu préfère.
        0
    4. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
       
      Tu peux nous en dire plus ?
      0
  10. Maurice
     
    Bonjour

    modification de la macro

    Option Base 1
    Option Explicit

    Sub AfficheFeuilles(Utilisateur As String)
    Dim Col As Byte, i As Byte, Lig As Integer, F As Integer
    Dim Onglet()
    Onglet = Array(Feuil2.Name, Feuil3.Name, Feuil4.Name, Feuil5.Name, Feuil6.Name, Feuil7.Name)
    With Feuil6
    Col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
    Lig = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole).Row
    F = 1
    For i = 3 To Col
    If UCase(.Cells(Lig, i)) = "X" Then
    Sheets(Onglet(F)).Visible = -1
    Else
    Sheets(Onglet(F)).Visible = 2
    End If
    F = F + 1
    Next i
    End With
    End Sub

    a toi de voir pense a changer la feuille parametre

    A+
    Maurice
    0
    1. Jb6161 Messages postés 53 Statut Membre
       
      Problème résolu, il s'agissait d'une faute de frappe dans une de mes feuilles excel, merci quand même en tout cas !
      0