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

Rechercher des sujets similaires à "proteger segments slicer feuille protegee"