Verrouiller Colonnes en fonction d'un user et d'un mot de passe

Bonjour,

Je voudrais savoir s'il est possible de verrouiller toute une feuille excel sauf 1 colonne en fonction de l'utilisateur qui s'y connecte

Merci !

Bonjour oui c'est possible mais fastidieux si vous avez de nombreux utilisateurs ?

Un code vba dans le workbook à l'ouverture :

Dans l'exemple la Feuille 1 est protégée et enregistrée avec le mot de passe : "motdepasse"

La macro enlève le mot de passe à l'ouverture puis le remet en fin de macro. l'exemple est sur 2 utilisateurs il faudra répéter autant de If ... end if que vous avez

d'utilisateurs.

Private Sub Workbook_Open()

'Première partie on enlève la protection et on remet la sécurité sur toutes les cellules
With Sheets("Feuil1").Activate
ActiveSheet.Unprotect "motdepasse"
Cells.Select
Selection.Locked = True

'Deuxième partie on recherche l'utilisateur et la Lettre de la colonne qui sera à déprotéger.
Dim Nom As String
Dim lettrecolonne As String
Nom = Environ("USERNAME")

If Nom = "J.martin" Then
lettrecolonne = "A"
End If

If Nom = "J.legrand" Then
lettrecolonne = "B"
End If

'Troisème partie on enléve la protection sur la colonne souhaitée et on reprotège la feuille.
    Columns(lettrecolonne & ":" & lettrecolonne).Select
    Selection.Locked = False

ActiveSheet.Protect "motdepasse"
End with
End Sub

Bonjour, merci pour votre réponse.

En effet, j'ai pas mal d'utilisateur et donc pas mal de boucle if.

Mais est-ce-que cela est possible de faire ceci à la suite d'un appuie sur un bouton car j'ai 1 bouton "login" qui vérifie si le user='txt_user' et mdp="password" alors ça déverrouille des sheets cachées. Et donc en fonction du txt_user déverrouiller une colonne, en comptant que les users sont notés sur une autre sheet.

Merci !

Re, je pense que la méthode change un peut mais c'est le même principe. Par contre puisque tu possèdes une sheet avec le noms des users.

tu peux sans doute y indiquer en face de chaque noms la lettre de la colonne à laquelle ils auront accès.

Ainsi dans ton code du bouton login ,non seulement tu pourrais récupérer le 'Txtuser" le mot de passe correspondant qui se trouve surement dans la colonne à coté des noms de ta sheet "users" et par le même principe La lettre de la colonne que tu auras renseignée dans la colonne suivante.

La suite du code reste simple

-déprotection feuille

- reblocage de toutes les cellules

-Déblocage cellules Lettre de la colonne trouvée à la connection login

Reprotection feuille.

Vous évitez ainsi les nombreux IF si votre onglet sheet contient les USERS / password / Lettre colonne accessible.

Comme ceci ?

image image

ActiveSheet.Protect "mdp"
End With 'bien sur à la fin

Je voyais pas tout à fait comme çà

Pourquoi une recherche de C1, C2 C3 ? je pensais que chaque utilisateur devait pouvoir accéder à une seule colonne ?

(Nota utilisez des noms de variable au lieu d'utiliser un format qui ressemble à un nom de cellule. )

C1 C2 C3 comme nom c'est peu révélateur. Au pire recherche1 recherche2 recherche3

Votre plage de recherche dans l'onglet "Users" est bien ("E:G") ?

-En colonne E le nom du user je suppose ?

-En colonne F le mot de pase ?

-En colonne G la lette de la colonne à déprotéger ?

Donc pour moi le résultat de la recherche C1ou recherche1="Txt_user"

le résultat de la recherche C2 ou recherche2="Txtpass"

le résultat de la recherche C3 ou recherche3="lettre de la colonne à déprotéger"

Ensuite plus besoin de if à ce moment là vous connaissez toutes vos variables.....

' à partir de cette ligne 

cells.select
Selection.locked=true
Columns(recherche3).select
Selection.locked=false
....

Enfaîte chaque utilisateur doit avoir 3 colonnes de déverrouiller, j'avais dis qu'une seule pour avoir un exemple et ensuite faire la même chose pour les 2 autres colonnes

Ensuite voici ma plage de donnée:

image image

Ok je vois donc trois colonnes au lieu d'une.

Mais dans la colonne E de la feuille user vous pouvez indiquer les trois colonnes autorisées au lieu de compliquer la recherche non ?

Texte à indiquer en colonne E

admin =ok vide

jean = E:E,R:R,AE:AE

rene=E:E,S:S,AG:AG

vous aurez en variable

MESCOLONNES=WorksheetsFunction..... résultat recherche colonne E de feuille users.

Ensuite même début déprotection feuille ..... et locked sur toutes les cellules.

Puis un Seul if dans votre code 1 pour le cas spécial admin

if Txt_user="admin" then

cells.select Selection.locked=False

Else

Columns(MESCOLONNES).select

cells.select Selection.locked=False

end if

Mais dans la colonne E de la feuille user vous pouvez indiquer les trois colonnes autorisées au lieu de compliquer la recherche non ?

Comment peut-on faire cela ,

Dans une seule colonne je mets par exemple :

Users ; Colonne

Jean ; E:E,R:R,AE:AE

??

J'ai fait ceci:

image image

çà ressemble tout à fait à ce que je pensais.

Bonjour,

D'accord, la seule chose est que, quand j'utilise mon user et mon mdp ça ouvre une nouvelle feuille -> Toutes les cellules sont bloquées mais quand j'utilises le mot de passe pour déverrouiller la protection de la feuille tous se débloque.

Ou quand je me connecte avec un compte autre que l'admin tous est bloquée

Cette macro vient à la suite de votre code pour la connection ? login + mot de passe use : A ce moment là votre macro ne doit pas enlever le mot de passe de la feuille.

la suite c'est votre nouvelle macro.

c'est géré ensuite le retrait ou la remise en place de la protection en fonction des colonnes.

Pour la nouvelle feuille ? sans fichier sans votre code complet je vois pas ce que je peux deviner

Cette macro vient à la suite de votre code pour la connexion ?

Oui, tout à fait

image

Voilà ma fonction login() qui fonctionne après appuie sur le bouton Login

Cette macro vient à la suite de votre code pour la connexion ?

Oui, tout à fait

L' ouverture d'une nouvelle feuille est voulue ?

çà ne peux venir que dans le début du code que je ne peux voir.

la fin est avec : with sheet("chauffage_MR").activate donc la deuxième partie du code ne touche qu'à cette feuille.

je vous met le fichier complet !

Ca va être du de comprendre ta fonction si avec des lignes cachées ?

Pour commencer :

Première remarque : A la fin de ta macro login mot de passe tu finis avec un : Txtuser="" donc la suite de la macro pour MESCOLONNES ne risque pas de

fonctionner. Les déclarations de variables sont d'habitude en début de macro

Donc dim Mescolonnes et Mescolonnes=

Le fichier viens d'être rajouté ci-dessus

Les déclarations de variables sont d'habitude en début de macro

Modifié !

accès admin :

admin -> User

admin -> Password

Sur Votre exemple la feuille Users n'est pas modifiée en Colonne E.

Pour le code Je penses qu'un simple déplacement de la variable Mes colonnes Suffira. ( remonter la variable en début de code.)

Private Sub CommandButton1_Click() 'Début Login
On Error Resume Next

'déclaration de variable
Dim mot_de_passe As String
Dim role As String
Dim utilisateur As String
Dim MesColonnes As String

'on va chercher dans le sheet "users" les colonnes corespondantes au users et au mot de passe d'où le décalage de 2 et de 3 pour le rôle
mot_de_passe = WorksheetFunction.VLookup(Txt_user, Sheets("users").Range("b:e"), 2, 0)
role = WorksheetFunction.VLookup(Txt_user, Sheets("users").Range("b:e"), 3, 0)
MesColonnes = WorksheetFunction.VLookup(Txt_user, Sheets("users").Range("b:e"), 4, 0)
'on va chercher les lettres correspondant à la colonne à déverrouiller

le reste change pas
65chauffage.xlsm (168.64 Ko)

J'ai testé avec Jean. Les trois colonnes sont débloqués.

Rechercher des sujets similaires à "verrouiller colonnes fonction user mot passe"