Solution alternative partage
Bonjour,
Après avoir tenté par tous les moyens d'associer partage et protection je rend les armes. J'essaie maintenant de créer une macro et j'ai besoin d'un petit peu d'aide...
J'ai deux groupes de cellule :
- Labo
- Prod
J'aimerai en fonction de l'utilisateur de session Windows que je récupère via la fonction OSUserName :
Code:
1 2 3 4 5 6 7 8
| Function OSUserName() As String 'extrait d'un code trouvé sur : http://forum.rue-montgallet.com/ruemontgallet/Programmation/vb-vba/resolu-recuperation-windows-sujet_22341_1.htm
Dim Buffer As String * 256
Dim BuffLen As Long
BuffLen = 256
If GetUserName(Buffer, BuffLen) Then _
OSUserName = Left(Buffer, BuffLen - 1)
End Function |
Si le UserName = "STAG3"
Si l'utilisateur sélectionne une cellule dans la zone Labo déplacer la sélection en dehors de la zone ...
Si le UserName = "Autres"
Si l'utilisateur sélectionne une cellule dans la zone Prod déplacer la sélection en dehors de la zone...
Un peu comme ouskel'n'or dans cette discussion.
Code ouskel'n'or :
Code:
1 2 3 4 5 6 7 8 9 10
| Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Plage()
Plage = Array("$C$14", "$D$13", "$E$12", "$F$11", "$G$15", "$F$19") 'cellules interdites
For i = 0 To UBound(Plage)
If Target.Address = Plage(i) Then
Cells(Target.Row + 1, Target.Column).Select
Exit For
End If
Next
End Sub |
Cependant, je débute en vba et j'ai du mal à écrire ce code, j'ai commencé et fais différents tests mais j'ai du mal ...
J'ai testé un truc dans le genre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim Plage As Range
Dim Cel As Range
'Si utilisateur est STAG3 il ne doit pas accéder au groupe de cellules Labo ...
If OSUserName = "STAG3" Then
If Not Intersect(Target, Range("Labo")) Is Nothing Then
For Each Cel In Target
If Not Intersect(Cel, Range("Labo")) Is Nothing Then
Set Plage = Cel.Offset(1, 0)
End If
Next Cel
End If
End If
End Sub |
Merci d'avance
Oh et meilleurs voeux à tous :)