Bonjour,
Je n'arrive pas bien à gérer la fonction Intersect et j'aurais bien besoin de votre aide.
Actuellement j'ai cette fonction :
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.
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
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
et autres diverses formes mais sans résultats et voici mon dernier test :
Code : Sélectionner tout - Visualiser dans une fenêtre à part If Not Intersect(Target, Range("Prod"), range(Prod_2) Is Nothing Then
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...
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
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
Partager