Bonjour,

Je n'arrive pas bien à gérer la fonction Intersect et j'aurais bien besoin de votre aide.
Actuellement j'ai cette fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Const PremiereLigneTableau As Integer = 11
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
'Récupération nom de session Windows
'extrait d'un code trouvé sur : http://forum.rue-montgallet.com/ruemontgallet/Programmation/vb-vba/resolu-recuperation-windows-sujet_22341_1.htm
Function OSUserName() As String
 
Dim Buffer As String * 256
Dim BuffLen As Long
BuffLen = 256
    If GetUserName(Buffer, BuffLen) Then _
        OSUserName = Left(Buffer, BuffLen - 1)
End Function
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target 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
        'Si l'utilisateur veut accéder au groupe de cellules labo on décale la sélection en dehors du groupe de cellules
        Selection.Offset(0, 1).Select
    End If
'Sinon si autre utilisateur il n'a accès qu'aux cellules de Prod
Else
    If Not Intersect(Target, Range("Prod")) Is Nothing Then
        'Si l'utilisateur veut accéder au groupe de cellule prod on décale la sélection en dehors du groupe de cellules
        Selection.Offset(0, 1).Select
    End If
End If
End Sub
Elle me permet en fonction de l'utilisateur (login windows) qui ouvre le fichier excel de lui autoriser ou non l'accès à un groupe de cellules.

Cependant j'aimerai rajouter un groupe de cellules en plus mais je ne sais pas comment le gérer avec intersect ... j'ai essayé de cette manière
Code : Sélectionner tout - Visualiser dans une fenêtre à part
If Not Intersect(Target, Range("Prod"), range(Prod_2) Is Nothing Then
et autres diverses formes mais sans résultats et voici mon dernier test :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Const PremiereLigneTableau As Integer = 11
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
 
'Récupération nom de session Windows
'extrait d'un code trouvé sur : http://forum.rue-montgallet.com/ruemontgallet/Programmation/vb-vba/resolu-recuperation-windows-sujet_22341_1.htm
Function OSUserName() As String
 
Dim Buffer As String * 256
Dim BuffLen As Long
 
 
 
BuffLen = 256
    If GetUserName(Buffer, BuffLen) Then _
        OSUserName = Left(Buffer, BuffLen - 1)
End Function
 
Private Sub Workbook_Open()
Dim wbkSuiviRege As Workbook
Dim shRege As Worksheet
Dim shSechage As Worksheet
 
shRege = wbkSuiviRege.Sheets(" régé")
shSechage = wbkSuiviRege.Sheets("séchage")
End Sub
 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim zonedegroupeLabo As String
Dim zonedegroupeProd As String
zonedegroupeLabo = ""
zonedegroupeProd = ""
 
If ActiveSheet.Name = " régé" Then
    zonedegroupeLabo = Range("Labo_Rege")
    zonedegroupeProd = Range("Prod_Rege")
Else
    zonedegroupeLabo = Range("Labo_Sechage")
    zonedegroupeProd = Range("Prod_Sechage")
End If
 
 
'Si utilisateur est de la prod (ici STAG3) il ne doit pas accéder au groupe de cellules Labo ...
If OSUserName = "STAG3" Then
    If Not Intersect(Target, zonedegroupeLabo) Is Nothing Then
        'Si l'utilisateur veut accéder au groupe de cellules labo on décale la sélection en dehors du groupe de cellules
        Selection.Offset(0, 1).Select
    End If
'Sinon si autre utilisateur il n'a accès qu'aux cellules de Prod
Else
    If Not Intersect(Target, zonedegroupeProd) Is Nothing Then
        'Si l'utilisateur veut accéder au groupe de cellule prod on décale la sélection en dehors du groupe de cellules
        Selection.Offset(0, 1).Select
    End If
End If
End Sub
Mais là cela me fait une erreur de bloc with (??) au niveau des Set et je ne pense pas que ça fonctionne au niveau des Intersect...

Voilà j'espère que j'ai été assez claire j'ai besoin de votre aide pour y voir plus clair justement... merci d'avance