Mise à jour de plusieurs TCD sur un fichier protégé

Bonjour à tous,

J'ai trouver un scripte sur le site qui répondait à mon besoin. Toutefois, après modification et quelques heures de travail je n'arrive toujours pas à trouver ce qui cloche! voici le fichier et le scripte en pièce jointe. Est-ce qu'il y aurait une personne avec une solution? Merci d'avance pour votre temps.

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

End Sub

Dim Feuil

'--------------------#######------------------------

If Sh.Name <> "impression TDL" Then

For Each Feuil In Array(Worksheets("Suivi_Superviseur"), Worksheets("Carte_de_contrôle"))

Feuil.Unprotect "Suivi Superviseurs"

Next Feuil

Feuil.Unprotect "Carte de contrôle"

Next Feuil

' Sh.PivotTables(1).RefreshAll ' Si les tableaux sont Indépendants

' ou

For Each Feuil In Array(Worksheets("Suivi_Superviseur"), Worksheets("Carte_de_contrôle")) 'l ordre des élements de l'array se fait selon qui doit se rafrichir le premier

Feuil.PivotTables(1).RefreshAll

Next Feuil

For Each Feuil In Array(Worksheets("Suivi_Superviseur"), Worksheets("Carte_de_contrôle"))

Feuil.Protect "Suivi Superviseurs"

Next Feuil

Feuil.Protect "Carte de contrôle"

Next Feuil

If Sh.Name <> "impression TDL" Then

End If

' --------------------#######------------------------

End Sub

Bonjour ML83,

A tester: je suppose que tes feuilles ont le même mot de passe

1) On enlève la protection des feuilles sauf impression TDL

2) On actualise les TCD

3) On protège les feuilles

Dans le code ci-dessous, remplace "***" par ton mot de passe (attention, conserve les guillemets).

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    '--------------------#######------------------------

  For Each Feuille In ActiveWorkbook.Worksheets

    If Feuille.Name <> "impression TDL" Then
        If Feuille.PivotTables.Count > 0 Then
            Feuille.Unprotect Password:="***"
        End If
    End If

    Next Feuille

       ActiveWorkbook.RefreshAll

  For Each Feuille In ActiveWorkbook.Worksheets

    If Feuille.Name <> "impression TDL" Then
        If Feuille.PivotTables.Count > 0 Then
            Feuille.Protect _
                    Password:="***", _
                    AllowUsingPivotTables:=True, _
                    UserInterfaceOnly:=True
        End If
    End If

    Next Feuille

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

Cordialement,

Bonjour xorsankukai,

Un gros merci pour ton temps. Le message qui dit qu'il est impossible de modifier la tableaux ... s'affiche encore. Est-ce qu'il y a une certaine activation à faire? Je ne peut pas non plus associer cette macro à un bouton.

Merci encore pour ton temps.

Re,

As-tu remplacer les *** par ton mot de passe ?

Les 2 feuilles ont-elles le même mot de passe ?

Nul besoin de bouton, la macro s'exécute au changement de feuille.

Cordialement,

Re,

Oui les feuilles ont tous le même mot de passe et j'ai remplacé *** par mon mot de passe.

Merci.

Re,

Peux-tu me donner ton mot de passe que je teste mon code sur ton fichier, stp?

Re,

Merci pour ton mot de passe,

Pas de souci sur mon excel 2010, je navigue sur les feuilles sans erreurs....

@+

Hmm,

Étrange, cela ne fonctionne toujours pas avec la version excel 2016! Pourtant, j'ai exactement le même scripte que tu m'as envoyé, tout semble correcte à priori. Toutes les autres macro que j'utilise dans mon fichier fonctionne appart celle-ci.

Merci beaucoup pour ton temps. La solution que tu as apportée peut surement servir à plusieurs autres abonnés.

Re,

Désolé de ne pouvoir t'aider davantage ....sans doute un conflit avec tes autres macros, je ne suis pas assez calé, mais nul doute que tu trouveras une réponse sur le forum

Bon courage,

Cordialement,

Pas de souci. Merci!

Bonjour,

Je ne dispose pas du mot de passe !...

La procédure pourrait ressembler à cela.

Sinon, RefreshAll, Okay quand on a x TCDs de source différentes, sinon l'actualisation du premier TCD , actualise les autres…

A te relire.

Cdlt.

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.Name = "impression TDL" Then Exit Sub
    For Each Sh In ThisWorkbook.Worksheets
        If Sh.PivotTables.Count > 0 Then
            Sh.Unprotect Password:="***"
        End If
    Next Sh
    ThisWorkbook.RefreshAll
    For Each Sh In ThisWorkbook.Worksheets
        If Sh.PivotTables.Count > 0 Then
            Sh.Protect _
                    Password:="***", _
                    AllowUsingPivotTables:=True, _
                    UserInterfaceOnly:=True
        End If
    Next Sh
End Sub

Bonjour Jean-Éric,

Merci pour ton temps. Le mot de passe est "ml4413ca". Je viens de tester avec mon fichier test et ça ne fonctionne toujours pas. Cela est peut-être dû au fait que j'ai une panoplie de macro dans ce fichier. Elles fonctionnent toutes parfaitement sauf celle qui consiste à enlever la protection pour que les utilisateurs puissent mettre à jour les données des TCDs.

Merci.

Merci pour votre temps. J'ai trouver une solution de rechange pour ceux qui sont intéressés. J'ai simplement ajouter une macro pour empêcher la sauvegarde du fichier en plus de protéger seulement les cases qui ne faut absolument modifier plutôt que les feuille. Comme la visualisation des macros est protégé, il y a seulement moi qui peut modifier le fichier. Merci à tous pour votre temps.

Voici la macro pour empêcher la sauvegarde du fichier. Elle se trouve aussi sur le site même d'Excel-Pratique. C'est là que je l'ai trouvée.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Cancel = True 'Annule les demandes d'enregistrement

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.ThisWorkbook.Saved = True 'Informe Excel que le fichier a déjà été enregistré (cela évite d'avoir une demande d'enregistrement à la fermeture)

End Sub

Rechercher des sujets similaires à "mise jour tcd fichier protege"