[Excel/VBA]Changement de protection/All sheet

Résolu/Fermé
Liodene - 26 janv. 2011 à 18:43
 Liodene - 27 janv. 2011 à 17:05
Bonjour bonjour!

Alors je vous présente mon problème: il y a quelque temps, j'ai fait une classeur Excel pour ma boite traitant les remises de fin d'année etc... Et après avoir complètement remplie le classeur, ils se sont rendus compte que je n'avais pas sécurisé les cellules contenant les formules et que donc, i lfallait que je le fasse...

J'ai réussi à résoudre le problème en mettant à la création automatique de nouvelle feuille le code:

ActiveSheet.Cells.Select
Selection.Locked = True
ActiveSheet.Range("D18").Locked = False
ActiveSheet.Protect Password:="fikou", DrawingObjects:=True, Contents:=True, Scenarios:=True


Ceci fonctionne parfaitement. Mais lorsque j'ai voulu faire une macro pour ajouter la protection au page déjà créé, là ça a bloqué... Voici les 2 méthodes que j'ai essayé:

Sub Change()

Dim Sheet As Worksheet
For Each Sheet In Worksheets
ActiveSheet.Cells.Select
Selection.Locked = True
ActiveSheet.Range("D18").Locked = False
ActiveSheet.Protect Password:="fikou", DrawingObjects:=True, Contents:=True, Scenarios:=True
Next Sheet

End Sub


Et:

Sub Change()
Dim I As Integer
Dim ModeCalcul As Integer
ModeCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
With ActiveWorkbook.Worksheets
For I = 2 To .Count - 1
Sheets(I).Select

 ActiveSheet.Cells.Select
 Selection.Locked = True
 ActiveSheet.Range("D18").Locked = False
 ActiveSheet.Protect Password:="fikou", DrawingObjects:=True, Contents:=True, Scenarios:=True
Next I
End Sub


Le résultat est le même... Erreur 1004. Impossibilité de définir la porpriété Locked de la classe Range.

Merci d'avance pour vos solutions =)

A voir également:

4 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 26/01/2011 à 23:22
Bonjour,
bonjour Le Pingou

Moi je pense que tu dois inverser les lignes, en effet tu veux déverrouiller une cellule alors que la feuille est déjà verrouillée.
A faire...
 ActiveSheet.Range("D18").Locked = False      
 ActiveSheet.Cells.Select      
 Selection.Locked = True
A+
EDIT et..essaye plutôt comme ça..

Dim Sheet As Worksheet   
    For Each Sheet In Worksheets   
        Sheet.Cells.Locked = True   
        Sheet.Range("D18").Locked = False  
        Sheet.Protect Password:="fikou", DrawingObjects:=True, Contents:=True, Scenarios:=True   
    Next Sheet


Note: Dans un boucle Each tu n'active pas une feuille tu la sélectionne.

L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
1
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
26 janv. 2011 à 23:20
Bonjour lermite222,
J'ai modifier mon message entre deux. Il s'agit bien de feuille déjà protégé et dans se cas il n'est pas possible de verouiller les cellules, il faut d'abord ôter la protection de la feuille.
J'ai fait le test et j''ai bien reçu : Erreur 1004. Impossibilité de définir la porpriété Locked de la classe Range.

Amicales salutations
Le Pingou.
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 26/01/2011 à 23:44
Je n'avais pas vu cela comme ça, mais de toute façon y avait une erreur dans sa boucle avec ActiveSheet ça ne peu pas fonctionner.
Et dans l'optique que les feuilles soient protégées..
Dim Sheet As Worksheet  
    For Each Sheet In Worksheets  
        Sheets.Unprotect Password:="fikou"  
         
        Sheet.Cells.Locked = True  
        Sheet.Range("D18").Locked = False  
        Sheet.Protect Password:="fikou", DrawingObjects:=True, Contents:=True, Scenarios:=True  
    Next Sheet

A+
Edit : Y avait encore une inversion de ligne dans ma Re.. copie. :-(
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
26 janv. 2011 à 23:38
Merci lermite22, c'est parfait comme cela.
Amicales salutations
Le Pingou
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
Modifié par Le Pingou le 26/01/2011 à 23:11
Bonjour,
Juste au passage, votre procédure fait une boucle sur toutes les feuilles et je pense que l'erreur se produit dès qu'il s'agit d'une feuille déjà protégée.
Avant de vérouiller les cellules [Selection.Locked = True
] vous devez ôter la protection de la feuille.


Remède, dans votre code vous déprotégez la feuille et ensuite la protéger.


Salutations.
Le Pingou
0
Bonjour et merci à vous deux de vous être "entre corrigés" :)

Il y a encore une petite erreur cependant: quand je lance la macro, il me selectionne le ".Unprotect" et me met le message:

Erreur de compilation:

Membre de méthode ou de données introuvables


Merci d'avance pour vos réponses =)
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
27 janv. 2011 à 06:48
Bonjour tout le monde,

Enlève le s à la fin de Sheets

eric
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
27 janv. 2011 à 08:02
Bonjour Eric,
Oui, effectivement, d'où les risques d'erreurs en employant des mots clés comme variables, bien qu'ici il ai enlevé le S
A+
0
Ca marche parfaitement!

Merci beaucoup!
0