Protection d'une plage de cellule en fonction de l'utilisateur

tofdeparis

XLDnaute Nouveau
Bonjour à tous

j'ai un planning annuel excel avec plusieurs personnes dessus.

Chaque personne a sa propre ligne sur 12 onglets (mois)

Ils s’authentifient grâce via le domaine (username)
Je voudrais que chaque utilisateur ne puisse modifier que sa propre ligne, sauf pour le chef de service. Mais tout le monde peut voir les valeurs de tous les utilisateurs (couleur de la cellule du jour)

j'arrive à protéger les lignes en fonctions des username mais que de façon manuel. (J'ai défini un nom de plage pour chaque ligne d'utilisateur. Puis je dois pour chaque utilisateurs et chaque mois définir les droits)
C'est très lourd à faire manuellement ( 25 utilisateurs).

Y a t'il une méthode via VBA pour le faire automatiquement.

Merci de votre aide
 

Softmama

XLDnaute Accro
Re : Protection d'une plage de cellule en fonction de l'utilisateur

Bonjour,

Ici, un exemple à adapter à ton cas concret :
VB:
Private Sub Workbook_Open()
On Error Resume Next
Dim sh As Worksheet
'Pour chaque feuille du classeur
For Each sh In ThisWorkbook.Worksheets

  'La feuille est déprotégée (ici le mot de passe est MDP)
  sh.Unprotect "MdP"
  
  'Elles sont verrouillées
  sh.Cells.Locked = True
  
  'En fonction de ce que renvoie Username...
  Select Case Application.UserName
  
    'Dans le cas où c'est Nom1...(remplacer par le bon nom), on déverrouille la ligne 2 par exemple
    Case "Nom1"
      sh.Rows(2).Locked = False
    
    'Dans le cas où c'est Nom2...(remplacer par le bon nom), on déverrouille la Zone ("A2:C6") par exemple
    Case "Nom2"
      sh.Range("A2:C6").Locked = False

    'Dans le cas où c'est le boss, tout est déverrouillé
    Case "Boss"
      sh.Cells.Locked = False
      
    'Dans le cas où c'est qq1 d'autre, tout reste verrouillé
    Case Else

  End Select
  
  'La feuille est reprotégée
  sh.Protect "MDP"
    
Next sh
      
End Sub

en pensant à verrouiller toutes les cellules avant toute sauvegarde :

VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

For Each sh In ThisWorkbook.Worksheets
  sh.Unprotect "MdP"
  sh.Cells.Locked = True
  sh.Protect "MdP"
Next sh

End Sub
 

tofdeparis

XLDnaute Nouveau
Re : Protection d'une plage de cellule en fonction de l'utilisateur

Bonjour,

Merci pour votre réponse extrêmement rapide et pertinente.

J'ai pu adapter votre proposition de code et tout semble marcher comme je le souhaite.

Bravo pour votre efficacité.

Encore merci
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 085
Membres
103 461
dernier inscrit
dams94