Problème mot de passe utilisateur via VBA
Résolu
Jb6161
Messages postés
49
Date d'inscription
Statut
Membre
Dernière intervention
-
skk201 Messages postés 942 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Problème mot de passe utilisateur via VBA
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
- Mot de passe bios perdu - Guide
- Voir mot de passe wifi android - Guide
9 réponses
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
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
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 ?
Exemple si ton mon d'utilisateur est JB6161, alors ça affiche la feuille JB6161 ?
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
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
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")
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Rectification il faut que tu écrive :
J'avais pas vu le With
Enfin moi j'écrirai :
.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
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
Merci pour ta réponse en tout cas
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
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
Je vous transmet mon fichier, si ça peut vous aider !
https://www.cjoint.com/?DFeqQxYGWXl
https://www.cjoint.com/?DFeqQxYGWXl
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 !
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 !
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
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