Proteger des segments ou (Slicer) sur une feuille protégée
Bonjour,
J'ai une feuille protégée avec des segments (fenêtre liées à un TCD) permettant de filtrer les données.
J'utilise Excel 2010
Le souci, c'est que lorsque l'on protège la feuille, on peut toujours par mégarde supprimer ou couper le segment, qui disparait donc de la feuille.
J'ai regarder sur le net, j'ai trouvé sur un site anglais un genre de code qui correspond aux segments et au problème de protection, mais je n'ai pas réussi à le mettre en application.
Microsoft parle de fonction Slicer.Locked, propriété (Excel), et je crois savoir que sur Excel 2013, l'option Locked est disponible dans les options de segment.
L'objectif est de réussir à protéger ses segments de la feuille, qui reste vulnérable malgré la feuille protégée.
Un sacré défi, je peux le dire.
Voici, déjà ce que j'ai trouvé comme code sur un site anglais ou américain.
Private Sub Workbook_SheetPivotTableChangeSync(ByVal Sh As Object, ByVal Target As PivotTable)
Dim vSlicerNames() As Variant
Dim i As Long
vSlicerNames = Array("Slicer_Country", "Slicer_State", "Slicer_City")
For i = LBound(vSlicerNames) To UBound(vSlicerNames)
On Error Resume Next
If IsError(ActiveWorkbook.SlicerCaches(vSlicerNames(i)).Name) Then
With Application
.EnableEvents = False
.Undo
If IsError(ActiveWorkbook.SlicerCaches(vSlicerNames(i)).Name) Then
.Repeat
.EnableEvents = True
MsgBox "Slicer: " & vSlicerNames(i) & " not found. " & vbCr _
& "An attempt to undo the last action did not recover the slicer."
Exit For
Else
MsgBox "The last action was undone to recover a deleted slicer"
End If
.EnableEvents = True
End With
End If
Next i
End Sub
Voici par rapport à mon exemple, à quoi ressemble le code avec l'enregistreur macro pur les ségments, lorsque j'efface les filtres, cela peut donner une idée
Sub Macro1()
'
' Macro1 Macro
ActiveWorkbook.SlicerCaches("Segment_Mois").ClearManualFilter
ActiveWorkbook.SlicerCaches("Segment_Commercial").ClearManualFilter
End Sub
Voici un fichier joint pour relever le défi, qui me semble pas évident du tout
Bonne chance
Bonjour,
Je suis toujours avec ce souci pour protéger les segment (fenêtre permettant de filtrer les TCD) sur les feuilles protégées.
(j'utilise Excel 2010)
J'ai utiliser l'enregistreur macro pour vérifier comment cela se passait lorsque l'on sélectionné la fenêtre segment (slicer en anglais)
L'objectif étant de pouvoir éviter la suppression de ces fenêtres lorsque la feuille est protégée.
en effet, pour que ces fenêtres puissent fonctionner, cad sélectionner les champs de la fenêtre, celle-ci doit être déverrouillée pour qu'elle puisse fonctionner en feuille protégée.
Cependant, il est possible de la supprimer, ce que je cherche à éviter.
Lorsque l'on sélectionne la fenêtre, voici ce que cela donne avec l'enregistreur macro
ActiveSheet.Shapes.Range(Array("Mois 1")).Select
ActiveSheet.Shapes.Range(Array("les commerciaux")).Select
N'y a t-il pas moyen d'éviter la sélection avec un code ou serait inscrit
DesactiveSheet.Shapes.Range(Array("Mois 1")).Select
DesactiveSheet.Shapes.Range(Array("les commerciaux")).Select
Ce qui empêcherait la sélection de la fenêtre, écartant ainsi la possibilité de la supprimer. En espérant que cela laisse son uilisation possible en feuille protégée.
Il semble que dans Excel 2013, il y ait une option qu'il n'y avait pas dans Excel 2010
l'option Locked dans les propriété de ces fenêtre segment afin de les protéger de la suppression.
Il existe d'après ce que j'ai compris une nouvelle option pour les développeurs qui est : Slicer.Locked avec True et False
https://msdn.microsoft.com/fr-fr/library/office/ff198116.aspx
Mais comme j'utilise Excel 2010, sans doute qu'il existe une possibilité avec un code mis sur la feuille qui intègre cela
DesactiveSheet.Shapes.Range(Array("Mois 1")).Select
DesactiveSheet.Shapes.Range(Array("les commerciaux")).Select
Ou bien une manière de désactiver le clic droit de la souris, ou le couper du clic droit de la souris.
Si vous avez une idée, ou la solution
Je remet le fichier pour test.
bonne fin d'année à tous et bon réveillon
Bonjour,
Alors que je m’apprêtais à te dire 'pas possible' après avoir exploré les propriétés (.Locked existe sur 2010 mais n'empêche pas la suppression) et événements j'ai trouvé l'idée toute bête : affecter une macro à ta forme qui sélectionne une cellule sur clic.
Par clic-droit ou par macro :
Sub balayerSlicers()
Dim slC As SlicerCache, sl As Slicer
For Each slC In ActiveWorkbook.SlicerCaches
For Each sl In slC.Slicers
Debug.Print sl.Parent.Name, ' feuille
Debug.Print sl.Name, ' nom slicer
Debug.Print sl.Caption ' libellé slicer
Debug.Print sl.Shape.Name ' nom forme
sl.Shape.OnAction = "slicerClick" ' action sur clic
Next sl
Next slC
End Sub
Sub slicerClick()
Debug.Print ActiveSheet.Shapes(Application.Caller).Name ' nom Shape
[L1].Select
End Sub
Il ne te reste plus qu'à griser le Supprimer du menu contextuel si tu as affaire à des vicieux. Ca se trouve facilement sur google.
Bonne année à tous
eric
Bonjour Eric
Bonne année à toi et meilleurs vœux.
Je suis débutant en VBA, mais j'ai mis en application ta macro.
En fait, je l'ai collé dans un module, et affecté à un segment.
J'ai regardé ce que cela donné, et si j'ai bien compris, cela empêche la fenêtre segment de bouger, mais on peut toujours la supprimer avec le clic droit de la souris (couper).
C'est surtout cela que je cherche à éviter, que l'on puisse pas supprimer le segment par une mauvaise manipulation.
Car pour revenir à ta macro, si j'ai bien compris, je peux obtenir le même résultat sans macro.
Pour cela,
Taille et propriété segment / Disposition/ cocher la case désactiver le redimensionnement.
Propriété / ne pas déplacer avec les cellules, puis décocher cellule verrouillée.
Ensuite, lorsque la feuille est protégé, tu peux toujours faire les sélection du segment (choisi le ou les mois),
Tu ne peux plus déplacer la fenêtre segment, mais tu peux toujours la supprimer.
Et c'est vraiment ce que je cherche à éviter.
Tu préconise de désactiver le clic droit de la souris si j'ai bien compris, ou de mettre en grisé le couper.
Dans ce cas, je vais devoir m'orienter vers cette solution, il faut que je trouve comment désactiver cela sur le net.
(dans le cas ou j'aurai bien compris le fonctionnement de ta macro)
Merci pour ta solution, qui hélas ne résout pas mon problème.
empêcher à tout prix la suppression de la fenêtre lorsque la feuille est protégée.
Ma proposition empêche la sélection de la forme et donc par conséquence sa suppression avec Suppr. Tu veux que ça reste possible ?
Je t'ai dit "manuellement ou par macro".
Manuellement c'est plutôt 'Affecter à une macro...' (slicerClick(), la 2nde macro)
La 1ère macro te le fait d'un coup sur l'ensemble des slicers, c'est toi qui voit si tu préfères les faire un par un.
Dans le menu contextuel il désactiver 'Couper', mais aussi 'Supprimer xxxxx'
eric
Bonsoir Eric,
J'ai bien affectée les segments en essayant les deux macros, mais même en feuille protégée, tu peux toujours faire un clic droit sur le segment puis faire couper ou supprimer le segment.
Qu'entend tu pas supprimer le suprim dans le menu contextuel ?
Tu parle du clic droit de la souris avec une macro ?
Merci
j'ai mis le fichier joint avec les deux macros et les segments.
Si tu sélectionnes un segment et que tu appuies sur la touche Suppr ça le supprime.
C'est ça qu'évite ma proposition. Entiendio ?
Pour le clic-droit je te disais de rechercher sur google pour désactiver les 2 menus contextuels.
Le truc habituel pour le désactiver :
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
End Sub
ne réagit pas sur les Forms.
eric
Bonsoir Eric,
Pas de bol, le clic droit ne fonctionne pas,
mais pas si tu le fait sur les fenêtre des segments, même en feuille portégée
dommage, c'est encore raté
Pas évident de protéger ces segments.
Un sacré défi
Heuuuu, c'est ce que je t'écrivais : Le truc habituel pour le désactiver ... ne réagit pas sur les Forms.
Je crois qu'il y a trop d'incompréhensions entre nous, je passe la main.
eric
oui, désolé,
je n'avais pas vu la dernière ligne de ton dernier message
Bon, merci d'avoir essayé, ce n'est pas évident à faire
Passe une bonne fin de journée