TCD's et feuilleS protégéeS

Bonjour,

Le sujet a déjà été traité maintes fois mais je n'ai pas trouvé la solution à ce problème:

J'ai une base de données dans un onglet non protégé.

De cette base de donnée, je construis plusieurs TCD sur différentes feuilles (1 feuille par TCD)

Toutes ces feuilles à TCD doivent être protégées de l'utilisateur final.

Comment mettre à jour les TCD quand on clique sur chacune d'entre elles.

Ca marche avec une feuille à TCD protégée et le code ci dessous mais pas avec une 2e feuille à TCD protégée.

Qui pourrait me corriger ce code pour que la mise à jour du TCD de la feuille que je sélectionne se mette à jour et ce quelle que soit la feuille. J'en ai 5 avec 5 TCD provenant de ma base de données.

Merci !!!!

Private Sub Worksheet_Activate()

'Refresh_tcdDelegations Macro

ActiveSheet.Unprotect Password:="mdp"

ActiveSheet.PivotTables("tcdDelegations").PivotCache.Refresh

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:= _

False, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:= _

True

With Sheets("DELEGATIONS")

.EnablePivotTable = True

.Protect "mdp", userinterfaceonly:=True

End With

End Sub

Bonjour,

il faut mettre AllowUsingPivotTables à True

With ActiveSheet
'permet filtre et grouper lignes et colonnes
    .EnableAutoFilter = True
    .EnableOutlining = True

    'pour les options de protection que vous ne désirer pas autoriser: changer True pour False
    .Protect Password:="", _
        DrawingObjects:=True, _
        Contents:=True, _
        Scenarios:=True, _
        AllowFormattingCells:=True, _
        AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, _
        AllowInsertingColumns:=True, _
        AllowInsertingRows:=True, _
        AllowInsertingHyperlinks:=True, _
        AllowDeletingColumns:=True, _
        AllowDeletingRows:=True, _
        AllowSorting:=True, _
        AllowFiltering:=True, _
        AllowUsingPivotTables:=True, _
        UserInterfaceOnly:=True
 End With

Merci merci mais là je suis un peu perdu.

Faut il que je remplace mon code par le tien mais dans ce cas il manque la déprotection de la feuille avant l'actualisation du TCD...

Ou faut il que je mette ton code ?

Merci de ton temps

Ce n'est qu'un exemple,

vous l'avez déjà fait pour la feuille active

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:= _
False, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:= True

faite de même pour l'autre feuille,

With Sheets("DELEGATIONS")
  .Protect DrawingObjects:=True, Contents:=True, Scenarios:= _
False, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:= True, userinterfaceonly:=True
End With

Bonjour,

Une proposition à étudier.

A te relire.

Cdlt.

6christian53.xlsm (33.10 Ko)
ublic Const PWD As String = "excel"
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim pt As PivotTable
    If Sh.PivotTables.Count > 0 Then
        Sh.Unprotect Password:=PWD
        Set pt = Sh.PivotTables(1)
        pt.PivotCache.Refresh
        Sh.EnablePivotTable = True
        Sh.Protect Password:=PWD, _
                   Scenarios:=True, _
                   userinterfaceonly:=True
    ' pour exemple
    MsgBox "Le tableau croisé dynamique " & pt.Name & " de la feuille " & Sh.Name & " a été actualisé..."
    End If

End Sub

Merci Jean Eric pour ton aide avec un fichier exemple très clair,

Voici un complément d'information.

1) J'utilise la même liste de données pour tous les TCD

2) J'ai donc un TCD différent provenant de la même source sur chaque feuille

3) La feuille source est libre

4) Toutes les feuilles TCD sont protégées

Je souhaiterai que quand je clique sur une feuille contenant un TCD , le code déprotège, actualise le TCD et reprotège la feuille.

Je ne peux malheureusement pas te renvoyer le fichier pour une raison qui m'échappe. Si tu pouvais me renvoyer ce fichier corrigé, ce serait super car ainsi je pourrais vraiment intégrer comment on fait ça et ne plus revenir sur le sujet.

Re,

La procédure que j'ai écrite fait ce que tu demandes.

Sinon que le TCD est actualisé quand tu actives sa feuille.

Il va falloir un complément d'informations.

Cdlt.

Re,

La procédure que j'ai écrite fait ce que tu demandes.

Sinon que le TCD est actualisé quand tu actives sa feuille.

Il va falloir un complément d'informations.

Cdlt.

Oui tout à fait mais il me semble que les 2 TCD sont identiques sur 2 feuilles différentes, je me trompe ? et tu as 2 sources de données sur la feuille données.

Je ne peux malheureusement pas modifier la structure du TCD BB_ de ton exemple pour qu il soit différent de celui de la feuille AA_ ainsi que son nom. Mon fichier a une seule source, 5 feuilles avec 5 TCD différents avec des noms différents et provenant tous de la même source.

Merci de ta patience

Re,

Ma procédure telle que doit fonctionner dans ton classeur.

(On est d'accord sur le fait qu'une feuille ne comporte qu'un TCD...)

Cdlt.

Re,

Ma procédure telle que doit fonctionner dans ton classeur.

(On est d'accord sur le fait qu'une feuille ne comporte qu'un TCD...)

Cdlt.

Désolé Jean Eric mais si je supprime ta 2e source ça ne fonctionne plus....

La table de données doit être unique (un seul tableau) et les TCD doivent contenir des informations différentes provenant de ce même et unique tableau.

J'ai rajouté une colonne prix dans la source à coté de quantité.

Modifie le 2e TCD avec le prix au lieu de la quantité et refais le test.

Merci encore mais je suis mal pris avec ça...

4christian53.xlsm (32.95 Ko)

Re,

a) Ton TCD pointait vers Tableau2 qui n'existe pas : 0-1

b) Je revoie la procédure (pour cause de feuilles protégées) : 1-0

Match nul.

Cdlt.

Re,

a) Ton TCD pointait vers Tableau2 qui n'existe pas : 0-1

b) Je revoie la procédure (pour cause de feuilles protégées) : 1-0

Match nul.

Cdlt.

haha et pour cause je l ai supprimé car je ne veux qu'un seul tableau !!!!!et tous les TCD pointent vers lui

Re,

Essaie ainsi :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim ws As Worksheet, pt As PivotTable
    If Sh.PivotTables.Count > 0 Then
        For Each ws In ActiveWorkbook.Worksheets
            Sh.Unprotect Password:=PWD
        Next ws
        ActiveWorkbook.RefreshAll
        For Each ws In ActiveWorkbook.Worksheets
            If ws.Name <> "Données" Then
                ws.Protect Password:=PWD, _
                           Scenarios:=True, _
                           userinterfaceonly:=True, _
                           AllowUsingPivotTables:=True
            End If
        Next ws
    End If
End Sub

CA marche super !!!

un gros merci pour ta patience !

Rechercher des sujets similaires à "tcd feuilles protegees"