VBA macro bug lors de la protection de la feuille

Bonjour le forum,

Veuillez trouver ci-joint le fichier sur lequel je n'arrive pas savoir ou cela bloque lors de ma protection de la feuille.

Alors je vais sur l'onglet A, Révision, Protéger la feuille, je mets un code et je décoche Sélectionner les cellules verrouillées, je confirme le mot de passe.

Une fois passé à l'onglet B, je reviens sur l'onglet A et j'ai un bug sur la ligne du code de la feuil4(A) :

objChart.Chart.SeriesCollection(1).Points(i).Interior.Color = r

Le but de la protection de la feuille est d'vaiter de toucher au tcd et graphique associé (la c'est un exemple sur mon fichier j'ai 4 TCD et deux GCD),

Merci d'avance pour votre aide,

Cordialement,

Bonsoir à tous ,

Je n'ai pas de retour personne pour le conseiller ?

Merci d'avance à celui qui me trouvera la solution !

Bonjour,

Le code de la macro "Worksheet_Activate" ne peut écrire dans la feuille ... elle est protégée.

Au début du code, ajoute ce qu'il faut pour déprotéger,

À la fin du code, ajoute ce qu'il faut pour protéger à nouveau.

Des tonnes d'exemples sont faciles à trouver.

Désolé, je n'ai pas le temps de faire mieux.

ric

Bonsoir ric merci pour ton retour ,

Ok je comprends mieux la macro en voulant appliqué les codes couleurs de l'onglet B sur l'onglet À ne peut intervenir du fait du verrouillage mis en place

Je suis allez voir sur le forum un sujet similaire et la solution serait de placer unprotect au début et protect a la fin ...

Le seul hic c'est de l'écrire et ça je ne serais pas le faire ...

Cordialement

Bonjour,

Le mot de passe est : AA

Private Sub Worksheet_Activate()
Dim pt As PivotTable
Dim objChart As ChartObject
Dim lo As ListObject
Dim r As Variant, v As Variant
Dim i As Long

    Application.ScreenUpdating = False

   ActiveSheet.Unprotect Password:="AA"

   Set lo = Feuil18.ListObjects("tbl_Couleurs")
    For Each pt In Me.PivotTables
    Next pt
    For Each objChart In Me.ChartObjects
        Select Case objChart.Name
            Case "Graphique_01"
                v = objChart.Chart.SeriesCollection(1).XValues
                For i = LBound(v) To UBound(v)
                    If v(i) <> "" Then
                        'Debug.Print v(i)
                        r = Application.VLookup(v(i), lo.DataBodyRange, 3, False)
                        objChart.Chart.SeriesCollection(1).Points(i).Interior.Color = r
                    End If
                Next i
            Case Else
                '
        End Select
    Next objChart
    Set lo = Nothing
    Call Proteger_Feuille
End Sub

Sub Proteger_Feuille()

         ' Déprotection de la feuille
On Error Resume Next
      ' Protection de la feuille
   With Worksheets("A")
      .Protect DrawingObjects:=True, Contents:=True, _
               Scenarios:=False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
               AllowFormattingRows:=True, AllowInsertingColumns:=True, _
               AllowInsertingRows:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
               AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
               AllowUsingPivotTables:=True, UserInterfaceOnly:=True, Password:="AA"
   End With
End Sub

ric

Bonjour,

Tu peux faire comme ça : (Avec le mot de passe "123")

Private Sub Worksheet_Activate()
Dim pt As PivotTable
Dim objChart As ChartObject
Dim lo As ListObject
Dim r As Variant, v As Variant
Dim i As Long
'Ligne à rajouter :
ActiveSheet.Protect Password:="123", UserInterfaceOnly:=True, Contents:=False
    Application.ScreenUpdating = False
    'la suite sans changement

Bonjour ric et galopin01,

Merci à tous les deux pour vos retour, il me semble que le code ajouté par galopin est plus court mais qu'elles sont les différences entre les deux ? ,

Je testerai vos codes lundi et je mettrrai à jour le statut du post si tout fonctionne!

Merci encore pour votre aide je n'aurai pas su le faire 😉

Cordialement

La différence est que Ric déprotège la feuille pendant l'exécution, la ligne que je rajoute indique seulement que la protection doit malgré tout permettre à VBA de s'exécuter.

Bonsoir,

Merci pour vos retours, après avoir testé le souci pour ton code macro galopin01 c'est que ça beug toujours sur la ligne

objChart.Chart.SeriesCollection(1).Points(i).Interior.Color = r et j'ai limpression que la fuille n'est plus protégée.

donc j'ai mis le code proposé par ric, celui-ci fonctionne nickel, seulement le TCD est modifiable (mais je ne le souhaite pas) mais pas actualisable.

Je renvois le fichier (mot de passe : 123) avec une contrainte supplémentaire, j'aimerai que le TCD_01 et TCD_02 puissent être actualisable, et que ma feuille soit uniquement protégée sur la plage de cellule "A8:J28" de l'onglet A.

Le TCD_01 doit pouvoir être actualisable Uniquement, et le TCD_02 doit pouvoir être actualisable et afficher les détails uniquement

Pouvez vous m'aider également à protéger les celulles H9,h13 et H16 de l'onglet critères, et modifier le code VBA liée à la macro avec comme condition que : si les celulles H9,H13 et H16 sont vides alors on peut accéder au bouton Actualisé sinon on ne peut pas appuyé sur ce bouton !

Est ce possible?

Je rejoins le fichier, et vous remercie d'avance pour le temps consacré, je ne serais le faire moi même!

Bonjour à tous,

Je crois que c'est la feuille A que tu veux protéger.

Mais, dans la macro "Proteger_Feuille", tu protèges la feuille B.

Mais aussi, dans mon code, je t'avais donné un mauvais nom de Feuille, désolé.

Si dans "Protéger_Feuille", tu modifies pour With Worksheets("A")

Ça devrait mieux fonctionner en protégeant la feuille A.

Je vais regarder tes autres demandes à propos de ce fichier.

ric

Bonjour,

La feuille CRITERE a le même mot de passe 123 > mis manuellement.

Dans la feuille A, j'ai sélectionné A8:J28, dans le "Format des cellules", onglet "Protection", décocher "Verrouillée".

Voir si j'ai bien tout bien compris

ric

Bonjour

mettre ta macro dans un module

comme sa on peux la lancer sur plusieurs feuilles

A+

Maurice

Sub Proteger_Feuille()
On Error Resume Next
' Protection de la feuille
'   With Worksheets("A")
      ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
               Scenarios:=False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
               AllowFormattingRows:=True, AllowInsertingColumns:=True, _
               AllowInsertingRows:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
               AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
               AllowUsingPivotTables:=True, UserInterfaceOnly:=True, Password:="123"
'   End With
End Sub

Bonjour Merci pour vos retours,

J'ai regardé et nous y sommes presque, en effet je demandais :

j'aimerai que le TCD_01 et TCD_02 puissent être actualisable, et que ma feuille soit uniquement protégée sur la plage de cellule "A8:J28" de l'onglet A : en fait quand je dis protégé c'est que de la plage A8:J28 on ne puisse pas accéder mais les autres celulles doivent resteés accessible, ce qui n'est pas le cas.

De plus le soucis c'est que les TCD ne sont pas actualisables et donc lorsque les données de la source des 2 TCD changent, le TCD ne changent pas, or j'aimerai que ce soit le cas malgré la protection apportée.

Je souhaiterais donc que le TCD_01 et TCD_02 puissent être actualisable, et que ma feuille soit uniquement protégée sur la plage de cellule "A8:J28" de l'onglet A,

En ce qui concerne le code macro pour le bouton actualisé de l'onglet critères, c'est ok

Archer, concernant votre remarque, vous préconisez de mettre la macro protéger feuilles dans un module afin de pouvoir l'appeler sur plusieurs feuilles, ce serai intéressant effectivement, mais le souci d'est de la façon dont elle est écrite elle se lancera toujours sur la feuille A, comment faire pour l'appeler sur 2 feuilles?, suffit il de supprimer les lignes vertes du code que vous avez mis?

Merci d'avance pour vos retours

Cordialement,

Bonjour

pour faire une protection d'une plage

voila un modele de macro

Sub Macro2()
    ActiveSheet.Unprotect
    Cells.Locked = False 'deprotection de toute la feuille
    Range("A8:J28").Locked = True ' 'protection de la plage
    Application.Goto [A1], True
    ActiveSheet.Protect
End Sub

A+

Maurice

Rechercher des sujets similaires à "vba macro bug lors protection feuille"