IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Protection sur une partie des cellules provoque une erreur à l'éxécution de la macro [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut Protection sur une partie des cellules provoque une erreur à l'éxécution de la macro
    Bonjour à tous,
    Le principal est dans le titre... J'ai une feuille excel, dans laquelle certaine cellule ne doivent pas être modifier par l'utilisateur (mais les autres oui). Cependant j'ai un macro qui utilise ces cellules non modifiables en modifie d'autres. J'ai donc protégé mes cellules avec outils/Protection et ma macro me dit "Erreur d'éxécution 1004 : Impossible de définir la propriété ColorIndex de la classe Interior"

    Erreur que je n'ai pas lorsque mes cellules ne sont pas protégé.

    aprés de nombreuses recherches sur différents forum j'ai testé plusieurs codes consistant à déprotéger les cellules, éxécuter la macro, et reprotéger les cellules, mais sans succés ....
    avec le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Sheets("Feuil3").Unprotect "pwd" .....
    .....
    ....    Sheets("Feuil3").Protect "pwd"
    ou le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Worksheets("Feuil3").Protect userinterfaceonly:=True, Password:="pwd"
    j'ai l'erreur "Erreur d'éxécution 9 : L'indice n'appartient pas à la sélection"

    Pour infos je voudrais bloquer la modification des cellules A4 à L53 uniquement ...

    Voici mon code dans son ensemble :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Private Sub CommandButton1_Click()
      ' Sheets("Feuil3").Unprotect "pwd"
       Worksheets("Feuil3").Protect userinterfaceonly:=True, Password:="pwd"
        For i = 5 To Range("A" & Rows.Count).End(xlUp).Row
            For j = 13 To 24 ' Range("A1").End(xlToRight).Column + 1
                If Cells(i, j).Value = 1 Then
                        Cells(i, j).Interior.ColorIndex = 15
                    ElseIf Cells(i, j).Value = 2 Then
                        Cells(i, j).Interior.ColorIndex = 48
                    ElseIf Cells(i, j).Value = 3 Then
                        Cells(i, j).Interior.ColorIndex = 16
                    Else
                         Cells(i, j).Interior.ColorIndex = xlNone
                End If
                If Cells(i, j) > 0 Then
                    Select Case Cells(3, j)
                        Case "CM"
                            If (Cells(i, 9).Value < Cells(4, j).Value) Then
                                Cells(i, j).Interior.ColorIndex = 3
                            End If
                        Case "CF"
                            If (Cells(i, 10).Value < Cells(4, j).Value) Then
                                Cells(i, j).Interior.ColorIndex = 3
                            End If
                        Case "AM"
                            If (Cells(i, 11).Value < Cells(4, j).Value) Then
                                Cells(i, j).Interior.ColorIndex = 3
                            End If
                        Case "RL"
                            If (Cells(i, 12).Value < Cells(4, j).Value) Then
                                Cells(i, j).Interior.ColorIndex = 3
                            End If
                    End Select
                End If
            Next
        Next
       ' Sheets("Feuil3").Protect "pwd"
    End Sub
    Je vous remercie d'avance pour votre aide. Vu le nombres de personnes qui ont eu le même problème, je vais bien finir par trouver la solution =)

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Bonjour,

    J'ai passer le code sur une feuille avec quelques valeurs en A:A sans reproduire le problème.

    j'ai l'erreur "Erreur d'éxécution 9 : L'indice n'appartient pas à la sélection"
    Avoir le numéro de ligne où l'erreur se produit serait utile à trouver l'origine du problème.
    Peut être qu'avoir un exemple de contenu du fichier sera nécessaire également.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Salut Fowlie

    Utilise la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .UnProtect
     
    'Code '
     
    .Protect
    Dans tes macros et il n'y aura plus de problème

    BytesKey

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci pour vos réponses,

    @BytesKey : J'ai essayé et cette fois l'erreur est "Erreur de compilation : Référence incorrecte ou on qualifiée"

    @BlueMonkey : Lorsque je fais débogage, l'erreur d'éxécution 9 se trouve sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil3").Unprotect "pwd"
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil3").Protect userinterfaceonly:=True, Password:="pwd"
    Et la cellule concernée par l'erreur 1004 est la première testé par la boucle (enfin je suppose) cad la cellule à la ligne 5, colonne 13 soit la cellule M5

    Je ne peux pas fournir l'excel dans son ensemble, j'essai d'un refaire un test (avec l'erreur) et de vous le donner

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 917
    Points : 28 901
    Points
    28 901
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Erreur classique.
    Tu exécutes sans doute ton code avec un autre classeur ouvert et la feuille "Feuille3" n'est pas présente dans ce classeur.
    Ce code fonctionne parfaitement si la feuille nommée F1 existe et renvoie erreur 9 dans le cas contraire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Option Explicit
    Public wkb As Workbook, sht As Worksheet
    Const nSheet As String = "F1"
    Sub MainTest()
     Set wkb = ThisWorkbook: Set sht = wkb.Worksheets(nSheet)
     sht.Protect userinterfaceonly:=True, Password:="Toto"
     pWrite
     sht.Unprotect "Toto"
    End Sub
    Sub pWrite()
     Dim wCol As Single, wRow As Single
     For wRow = 2 To 9
      For wCol = 1 To 4
      sht.Cells(wRow, wCol) = wRow & "./." & wCol
      Next
     Next
    End Sub

  6. #6
    Invité
    Invité(e)
    Par défaut
    je me sens stupide

    C'était bien la Feuil3 mais renomée "calcul", seulement dans visual basic comme c'est marqué Feuil3(Calcul) je pensais que vba comprendrais que je mette Feuil3 ... Visiblement non

    en tout cas merci beaucoup corona

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 917
    Points : 28 901
    Points
    28 901
    Billets dans le blog
    53
    Par défaut
    Ravi que ce soit résolu.
    L'idéal est de bien structurer son programme.
    Cela évite des surprises.
    Déclarer ces variables objets en début de module et ne jamais oublier de déclarer explicitement Classeur et feuille utilisée pour éviter d'écrire par accident sur la feuille active qui ne serait pas celle souhaitée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/04/2012, 14h31
  2. [DisplayTag] Affichage d'une partie des éléments d'une liste sur un critère
    Par jaguars_s dans le forum Taglibs
    Réponses: 4
    Dernier message: 30/07/2010, 18h15
  3. Réponses: 7
    Dernier message: 04/10/2007, 10h10
  4. Réponses: 9
    Dernier message: 08/08/2007, 11h35
  5. Limiter les droits à une partie des lignes d'une table
    Par Nabu dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 20/08/2006, 00h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo