gérer les droits d'accès sur les colonnes d'une feuille excel

USER2112

XLDnaute Nouveau
bonjour à tous,
comment puise gérer les accès utilisateurs sur un fichier excel, enfaite j'ai un tableau sur excel partager entre 4 personnes, chaque utilisateur manipule sur 1 seule colonne du fichier.
j'aimerais bien que chaque utilisateur ne peut modifier que la colonne qui lui dédié.
par exemple user 1 peut modifier/supprimer que les cellules de la colonne A,et user 2 peut modifier/supprimer que les cellules de la colonne c.
merci d'avance
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour User, Maître Jacques, bonjour le forum,

Une autre approche avec le verrouillage des cellules et deux événementielles du composant ThisWorkbook :

VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'à la fermeture du classeur
ThisWorkbook.Worksheets("Feuil1").Unprotect "toto" 'déprotège l'onglet "Feuil1" avec un mot de passe générique (à modifier à ta convenance)
ThisWorkbook.Worksheets("Feuil1").Cells.Locked = True 'verrouille toutes les cellules de l'onglet
ThisWorkbook.Worksheets("Feuil1").Protect "toto" 'protège l'onglet "Feuil1"
ThisWorkbook.Save 'sauve le classeur
End Sub

VB:
Private Sub Workbook_Open() 'à l'ouverture du classeur
Dim MDP(1 To 4) As String 'déclare la tableau de 4 variables MDP (Mot de Passe)
Dim BE As Variant 'déclare la variable BE (Boîte d'Entrée)
Dim I As Byte 'déclare la variable I (Incrément)

MDP(1) = "Utilisateur1" 'définit le mot de passe de l'utilisateur 1 (à modifier à ta convenance)
MDP(2) = "Utilisateur2" 'définit le mot de passe de l'utilisateur 2 (à modifier à ta convenance)
MDP(3) = "Utilisateur3" 'définit le mot de passe de l'utilisateur 3 (à modifier à ta convenance)
MDP(4) = "Utilisateur4" 'définit le mot de passe de l'utilisateur 4 (à modifier à ta convenance)
BE = Application.InputBox("Tapez votre mot de passe !", "MOT DE PASSE", Type:=2) 'définit la boîte d'entrée BE
If BE = False Or BE = "" Then Exit Sub 'si BE est non renseignée ou si bouton [Annuler], sort de la procédure
For I = 1 To 4 'boucle sur les 4 mots de passe
    If BE = MDP(I) Then 'condition : si BE correspond au mot de passe de la boucle
        ThisWorkbook.Worksheets("Feuil1").Unprotect "toto" 'déprotège l'onglet
        Worksheets("Feuil1").Columns(I).Cells.Locked = False 'déverrouille les cellules de la colonne I (ici il faudra faire correcpondre avec la colonne désirée, j'ai fait simple...)
        ThisWorkbook.Worksheets("Feuil1").Protect "toto" 'verrouille l'onglet
        Worksheets("Feuil1").Activate 'sélectionne l'onglet
        Worksheets("Feuil1").Cells(1, I).Select 'sélectionne la premère cellule de la colonne libérée
        Exit Sub 'sort de la procédure
    End If 'fin de la condition
Next I 'prochain mot de passe de la boucle
End Sub
 

USER2112

XLDnaute Nouveau
bonjour,
désoler pour le dérangement, je suis pas pro.
j'ai essayé avec le code VBA mais pas de résultat.
ci-joint un fichier nommé test, si c'est possible merci de m'expliquer comment puisse donnés a user1 seulement le droit de modifier les données de la colonne A,user2 sur la colonne B, user3 le colonne C...
merci beaucoup
 

Pièces jointes

  • test.xlsm
    13.4 KB · Affichages: 10

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Le code proposé était à placer dans le composant du classeur : ThisWorkbook, comme je l'avais précisé et toi, tu l'as placé dans le composant de l'onglet : Feuil1(Feuil1). En pièce jointe tout est bien mis en place et ça fonctionne...
 

Pièces jointes

  • test.xlsm
    16.3 KB · Affichages: 18

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonjour,

Une autre version avec Scrollarea et formulaire mot de passe

VB:
Private Sub B_ok_Click()
  If Me.motpasse <> "" Then
     For i = 1 To Range("MotPasse").Count
      If UCase(Me.motpasse) = UCase(Range("motpasse")(i)) Then
         temp = Range("champ")(i)
         On Error Resume Next
         Sheets(1).ScrollArea = temp
         If Err <> 0 Then MsgBox "erreur"
      End If
    Next i
  End If
  Unload Me
End Sub

L'administrateur définit les mots de passe dans un onglet Admin.

Code:
Sub AfficheTousOnglets()
 rep = InputBox("mot de passe Admin?")
 If rep = "jacques" Then
   For Each s In ActiveWorkbook.Sheets
     s.Visible = True
   Next s
 End If
 Sheets(1).ScrollArea = ""

Boisgontier
 

Pièces jointes

  • ProtectionOngletMultiChampMP.xls
    52.5 KB · Affichages: 14
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonjour,

Au chargement, un mot de passe est demandé.
Si le mot de passe est jean, jean n'a accès qu'à la colonne C.

1026793


L'administrateur définit les mots de passe dans l'onglet Admin

1026795



Boisgontier
 

Pièces jointes

  • Sans titre2.png
    Sans titre2.png
    16.1 KB · Affichages: 10
  • ProtectionOngletMultiChampMP.xls
    59.5 KB · Affichages: 11
Dernière édition:

riton00

XLDnaute Impliqué
Bonjour boisgontier

Oui Ok.... votre principe fonctionne si vous êtes des personnes clean qui cherche pas plus loin, mais si une personne un peu scrupuleuse clique directement sur la croix rouge pour fermer la demande de mot de passe
1026809
, il n'a aucun problème d'ouvrir par le biais de la commande
1026810
d'accéder à l' InputBox et en le refermant par "OK ou annuler" sans mettre le mot de passe pour accéder aux colonnes interdites.

Slts
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Modifier

VB:
Sub AfficheTousOnglets()
 rep = InputBox("mot de passe Admin?")
 If rep = "jacques" Then
   For Each s In ActiveWorkbook.Sheets
     s.Visible = True
   Next s
 Else
   Exit Sub
 End If
 Sheets(1).ScrollArea = ""
End Sub


Boisgontier
 

Pièces jointes

  • ProtectionOngletMultiChampMP.xls
    60.5 KB · Affichages: 9

Staple1600

XLDnaute Barbatruc
Bonjour

Juste pour infos
La protection sera inefficace si
  1. le classeur est ouvert sans activer les macros
  2. le classeur est ouvert dans Libre Office
Tant que le classeur ne contient pas de données sensibles, on fera confiance à cette "protection" ;).
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T