Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2012, 09h18   #1
Membre habitué
 
Avatar de fowlie
 
Étudiant
Inscription : mai 2011
Messages : 335
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : mai 2011
Messages : 335
Points : 146
Points : 146
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 :
1
2
3
   Sheets("Feuil3").Unprotect "pwd" .....
.....
....    Sheets("Feuil3").Protect "pwd"
ou le code :
Code :
   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 :
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 =)
__________________
---Fowlie---
fowlie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 12h50   #2
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Bonjour,

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

Citation:
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.
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 13h13   #3
Invité de passage
 
Homme
Étudiant
Inscription : 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 : 1
Points : 1
Salut Fowlie

Utilise la fonction

Code :
1
2
3
4
5
.UnProtect
 
'Code '
 
.Protect
Dans tes macros et il n'y aura plus de problème

BytesKey
BytesKey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 14h44   #4
Membre habitué
 
Avatar de fowlie
 
Étudiant
Inscription : mai 2011
Messages : 335
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : mai 2011
Messages : 335
Points : 146
Points : 146
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 :
Sheets("Feuil3").Unprotect "pwd"
ou
Code :
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
__________________
---Fowlie---
fowlie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 15h02   #5
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 313
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 313
Points : 2 679
Points : 2 679
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 :
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
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/01/2012, 15h31   #6
Membre habitué
 
Avatar de fowlie
 
Étudiant
Inscription : mai 2011
Messages : 335
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : mai 2011
Messages : 335
Points : 146
Points : 146
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
__________________
---Fowlie---
fowlie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 15h36   #7
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 313
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 313
Points : 2 679
Points : 2 679
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.
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h10.


 
 
 
 
Partenaires

Hébergement Web