Déprotection de plusieurs feuilles en même temps

Bonjour,

J'ai une source de données formatée en tableau.

J'ai 3 onglets contenant chacun d'entre eux un TCD venant de ma source.

Ces 3 onglets sont protégés avec un mot de passe car destinés à un tiers.

Problème de mise à jour des TCD :

Même si je déprotège le premier onglet en VBA pour faire la mise à jour du TCD avec:

Private Sub Worksheet_Activate()

With Me

.Unprotect "mdp"

.PivotTables(1).RefreshTable

ActiveSheet.Protect Password:="mdp", AllowFiltering:=True, AllowUsingPivotTables:=True

End With

End Sub

La mise à jour ne se fait pas si un autre onglet contenant un TCD venant de la même source est protégé.

Quelqu'un a t il une solution? qui pourrait être de déprotéger toutes les feuilles dans le code et pas seulement la feuille active et bien sur de les reprotéger en fin de code.

merci de votre aide


J'ai trouvé cette solution mais la déprotection et reprotection en fin de code de toutes les feuilles est un peu longue:

Private Sub Worksheet_Activate()

Dim Feuil As Worksheet

For Each Feuil In ThisWorkbook.Worksheets

Feuil.Unprotect "mdp"

Next Feuil

ActiveWorkbook.RefreshAll

For Each Feuil In ThisWorkbook.Worksheets

Feuil.Protect "mdp"

Next Feuil

End Sub

Est il possible de faire la même chose avec quelques feuilles seulement et pas toutes?

Merci d'avance

Bonjour Christian, bonjour le forum,

peut être avec ce code à placer (et à adapter) dans le composant ThisWorkbook :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Sheets("Onglet1").Unprotect "MDP"
Sheets("Onglet2").Unprotect "MDP"
Sheets("Onglet3").Unprotect "MDP"
Sheets("onglet1").PivotTables(1).RefreshTable
Sheets("Onglet1").Protect Password:="mdp", AllowFiltering:=True, AllowUsingPivotTables:=True
Sheets("Onglet2").Protect Password:="mdp", AllowFiltering:=True, AllowUsingPivotTables:=True
Sheets("Onglet3").Protect Password:="mdp", AllowFiltering:=True, AllowUsingPivotTables:=True
End Sub

Merci Thauthème mais j ai un code d erreur 9 (l indice n appartient pas à la sélection.

Si on pouvait deproteger / mettre a jour le TCD / reproteger la feuille à chaque sélection d'une feuille contenant un TCD serait le must.

Feuil1 = source de données (non protégée)

Feuil2 = tcd1 (protégée)

Feuil3 = tcd2 (protégée)

Feuil4 = tcd3 (protégée)

Ces 3 tcd sont issus de la même table source en Feuil1

Si je protège les Feuil1, 2 et 3 les tcd ne se mettent pas à jour quand je sélectionne la Feuil2, 3 ou 4.

Il faut donc :

Si je sélectionne la Feuil2, il faut déprotéger les 3 feuilles / mettre à jour le tcd de la Feuil2 et reprotéger les 3 feuilles.

Il faut déprotéger les 3 feuilles car si je ne déprotège que la Feuil1, le tcd ne se met pas à jour.

Voilà j espère que c'est clair et merci encore pour ton aide

A voir ta localisation et ton pseudo, tu dois habiter Mèze ... ou j'ai dirigé la construction du Centre national de Tennis de Table avec le maire Piétrasenta.....

Bonjour Christian, bonjour le forum,

Le code proposé fait, il me semble, ce que tu demandes. J'avais d'ailleurs écrit à adapter... Il te suffit de remplacer Onglet 1. Onglet 2 et Onglet 3 par le nom réel de tes onglets. Tu n'auras plus de message d'erreur.

Sinon j'habite Sète, non loin de Mèze il est vrai...

Oui, c est ce que j'ai fait mais toujours le code d erreur...

Merci pour ton temps quand même, j'apprécie.

bonjour

Je pense que la solution que te propose est la même solution de ThauThème mais avec petit déférence

Private Sub Worksheet_Activate()
Dim Feuil As Worksheet
'--------------------#######------------------------
'  ThauThème  ... Il te suffit de remplacer Onglet 1. Onglet 2 et Onglet 3 par le nom réel de tes onglets
    Sheets("Onglet1").Unprotect "mdp"
    Sheets("Onglet2").Unprotect "mdp"
    Sheets("Onglet3").Unprotect "mdp"

    For Each Feuil In ThisWorkbook.Worksheets
    Feuil.Unprotect "mdp"
    Next Feuil
'--------------------#######------------------------
'--------------------#######------------------------
   ActiveWorkbook.RefreshAll
   'pourquoi Rafraichir tout =>> ...PivotTables(1).RefreshTable
   Sheets("onglet1").PivotTables(1).RefreshTable
'--------------------#######------------------------
'--------------------#######------------------------
'  ThauThème  ... Il te suffit de remplacer Onglet 1. Onglet 2 et Onglet 3 par le nom réel de tes onglets
    Sheets("Onglet1").Protect Password:="mdp", AllowFiltering:=True, AllowUsingPivotTables:=True
    Sheets("Onglet2").Protect Password:="mdp", AllowFiltering:=True, AllowUsingPivotTables:=True
    Sheets("Onglet3").Protect Password:="mdp", AllowFiltering:=True, AllowUsingPivotTables:=True

    For Each Feuil In ThisWorkbook.Worksheets
    Feuil.Protect "mdp"
    Next Feuil

'--------------------#######------------------------
End Sub

Merci Amir et Thautheme mais ça ne fonctionne toujours pas.

Je pense que le plus rapide serait de vous joindre un fichier test pour saisir le code VBA au bon endroit avec les bonnes informations et je pourrais ensuite comprendre et reproduire.

Merci d'avance à tous les 2

Je vous rappelle qu il faut que le tcd se mette à jour quand je sélectionne l'onglet correspondant.

Les 2 onglets tcd1 et tcd2 sont protégés avec mot de passe "mdp"

10fichiertest.xlsm (72.79 Ko)

bonjour

essayer ca

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Feuil
    '--------------------#######------------------------
If Sh.Name <> "BdD" Then
        For Each Feuil In Array(Worksheets("TCD1"), Worksheets("TCD2"))
        Feuil.Unprotect "mdp"
        Next Feuil

        Sh.PivotTables(1).RefreshTable ' Si les tableaux sont Indépendants
     ' ou
        'For Each Feuil In Array(Worksheets("TCD1"), Worksheets("TCD2"))'l ordre des élements de l'array se fait selon qui doit se rafrichir le premier
       ' Feuil.PivotTables(1).RefreshTable
      '  Next Feuil

       For Each Feuil In Array(Worksheets("TCD1"), Worksheets("TCD2"))
       Feuil.Protect "mdp"
        Next Feuil

End If 'If Sh.Name <> "BdD" Then
    '--------------------#######------------------------
End Sub

a placer dans "worbook" espace

merci mais ça ne fonctionne pas.

Pourrais tu avoir la gentillesse et ce pour gagner du temps de saisir le code dans le fichier joint.

Ainsi tu pourrais vérifier que tout fonctionne et je pourrais ainsi comprendre ce que tu as fait dans le code et l'adapter à mon fichier réel.

Mille fois merci de ton temps


Ca y est ça fonctionne mais avec

Feuil.PivotTables(1).RefreshAll

plutôt que RefreshTable

Merci mille fois pour ta patience

33fichiertest.xlsm (72.79 Ko)
Rechercher des sujets similaires à "deprotection feuilles meme temps"