Erreur d'éxécution 1004 suite à protection de feuille

riri38

XLDnaute Nouveau
Bonjour le forum,

J'ai un tableau de pronostics que j'envoie chaque semaine aux participants et je souhaite le protéger afin d'éviter des modifications de valeurs et effacement de formules.

Lorsque le tableau n'est pas protégé, les changements de couleurs qui différencient les 5 premiers du classement, fonctionnent.

Lorsqu'il est protégé, cela indique la fenêtre : "erreur d’exécution '1004' Impossible de définir la propriété ColorIndex de la classe Interior"

Je vous ai mis le fichier en PJ pour le test.
Pour info, le code de protection de la feuille est indiqué sur la Feuil2

Merci de votre aide car je ne sais comment faire.

Cdlt

Riri38
 

Pièces jointes

  • Classement Riri38 V4.xls
    93 KB · Affichages: 34

camarchepas

XLDnaute Barbatruc
Re : Erreur d'éxécution 1004 suite à protection de feuille

Bonjour ,

Une solution ,



Code:
Private Sub Worksheet_Calculate()
Const MP As String = "riri"
   For Each c In [ZoneCalcul2,ZoneCalcul3]
     p = Application.Match(c.Value, Sheets("couleurs").Range("CouleursNB"), 1)
     If Not IsError(p) Then
       Me.Unprotect MP
       c.Interior.ColorIndex = Sheets("couleurs").Range("CouleursNB")(p).Interior.ColorIndex
       Me.Protect MP
     End If
   Next
End Sub
 

Victor21

XLDnaute Barbatruc
Re : Erreur d'éxécution 1004 suite à protection de feuille

Bonjour, riri38.

Déprotégez en début de macro, et re-protégez en fin. (ou utilisez Userinterfaceonly).

Edit : Bonjour, camarchepas :)
 
Dernière édition:

riri38

XLDnaute Nouveau
Re : Erreur d'éxécution 1004 suite à protection de feuille

Bjr çamarchepas, j'ai modifié le code comme indiqué mais vu la taille de zone de calcul, la mise à jour prend une bonne dizaine de secondes pour chaque nouvelle case saisie, donc bcp trop long pour mon fichier original.
En effet nous sommes 58 participants et je suppose que le code doit effectuer les différents calculs pour chacun et il est bcp plus long qu'une simple MFC à 3 conditions.

Riri38
 

camarchepas

XLDnaute Barbatruc
Re : Erreur d'éxécution 1004 suite à protection de feuille

Ok ,

@ Bonjour Victor et oui juste protéger l'interface utilisateur c'est aussi une solution .

Comme ceci peut être alors :

Code:
Private Sub Worksheet_Calculate()
 Const MP As String = "riri"
 Me.Unprotect MP
    For Each c In [ZoneCalcul2,ZoneCalcul3]
      p = Application.Match(c.Value, Sheets("couleurs").Range("CouleursNB"), 1)
      If Not IsError(p) Then
        c.Interior.ColorIndex = Sheets("couleurs").Range("CouleursNB")(p).Interior.ColorIndex
      End If
    Next
 Me.Protect MP
 End Sub
 

riri38

XLDnaute Nouveau
Re : Erreur d'éxécution 1004 suite à protection de feuille

Re, j'ai mis à jour le nouveau code ci-dessus.
Voici ce qu'il se passe :
Pour ma saisie des scores avant envoi aux participants (partie violette du fichier Feuil2), je désactive la protection en début de macro.
Mais la protection se remet automatiquement dès la fin de la 1ere saisie de part le code.
Du coup impossible pour moi de poursuivre la saisie sans enlever la protection à chaque saisie soit autant de cases (2 cases par score multipliés par 58 participants... trop lourd et trop long !)
J'espère avoir été assez explicite pour votre compréhension.
Normalement je voudrais faire la saisie et une fois terminée, protéger ma feuille pour pouvoir l'envoyer.

Merci pour votre retour

Riri38
 

camarchepas

XLDnaute Barbatruc
Re : Erreur d'éxécution 1004 suite à protection de feuille

Bon ,

Alors , pourquoi ne pas protéger tous simplement l'interface utilisateur .

la protection vaut pour l'accès utilisateur , mais autorise le code à modifier les feuilles .

Code:
Private Sub Worksheet_Calculate()
Me.Protect "riri", userinterfaceonly:=True
 For Each c In [ZoneCalcul]
     p = Application.Match(c.Value, Sheets("couleurs").Range("couleursNB"), 1)
     If Not IsError(p) Then
       c.Resize(, 3).Interior.ColorIndex = Sheets("couleurs").Range("couleursNB")(p).Interior.ColorIndex
     End If
   Next
End Sub
 

Discussions similaires