Problème mot de passe utilisateur via VBA

Résolu/Fermé
Jb6161 Messages postés 49 Date d'inscription mardi 27 mai 2014 Statut Membre Dernière intervention 13 juin 2014 - 4 juin 2014 à 13:42
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 - 5 juin 2014 à 11:18
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
A voir également:

9 réponses

eriiic Messages postés 24601 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 novembre 2024 7 243
Modifié par eriiic le 4/06/2014 à 15:37
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
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
4 juin 2014 à 13:56
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
Jb6161 Messages postés 49 Date d'inscription mardi 27 mai 2014 Statut Membre Dernière intervention 13 juin 2014
4 juin 2014 à 14:12
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
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
Modifié par skk201 le 4/06/2014 à 15:24
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
Modifié par skk201 le 4/06/2014 à 15:27
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
Jb6161 Messages postés 49 Date d'inscription mardi 27 mai 2014 Statut Membre Dernière intervention 13 juin 2014
4 juin 2014 à 16:00
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
Jb6161 Messages postés 49 Date d'inscription mardi 27 mai 2014 Statut Membre Dernière intervention 13 juin 2014
4 juin 2014 à 16:05
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
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
4 juin 2014 à 16:20
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
Jb6161 Messages postés 49 Date d'inscription mardi 27 mai 2014 Statut Membre Dernière intervention 13 juin 2014
4 juin 2014 à 16:32
Ah yes, merci !
Et donc "1 " correspond à la ligne ou la colonne ?
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
4 juin 2014 à 16:46
Cells(Ligne, Colonne)
0
Jb6161 Messages postés 49 Date d'inscription mardi 27 mai 2014 Statut Membre Dernière intervention 13 juin 2014
4 juin 2014 à 16:50
D'accord, alors du coup ça correspond à une feuille qui se nomme " Base de données "
0
Jb6161 Messages postés 49 Date d'inscription mardi 27 mai 2014 Statut Membre Dernière intervention 13 juin 2014
4 juin 2014 à 16:43
Je vous transmet mon fichier, si ça peut vous aider !

https://www.cjoint.com/?DFeqQxYGWXl
0
eriiic Messages postés 24601 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 novembre 2024 7 243
4 juin 2014 à 17:56
"Base de donées" avec un seul n dans parametrage!D1 c'est normal ?
eric
0
Jb6161 Messages postés 49 Date d'inscription mardi 27 mai 2014 Statut Membre Dernière intervention 13 juin 2014
4 juin 2014 à 17:59
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
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
5 juin 2014 à 08:39
Qu'est-ce que tu entend par un décompte ?
0
Jb6161 Messages postés 49 Date d'inscription mardi 27 mai 2014 Statut Membre Dernière intervention 13 juin 2014 > skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016
5 juin 2014 à 09:20
Un compte à rebours si tu préfère.
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
5 juin 2014 à 11:18
Tu peux nous en dire plus ?
0
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
Jb6161 Messages postés 49 Date d'inscription mardi 27 mai 2014 Statut Membre Dernière intervention 13 juin 2014
4 juin 2014 à 18:04
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