[Excel-VBA] Erreur 1004 Feuille protégée / ôter la protection, modifier contenu [Résolu]

alex90vba - 16 déc. 2012 à 00:53 - Dernière réponse :  alex90vba
- 16 déc. 2012 à 16:44
Bonsoir,

J'ai un classeur avec la Feuil1 protégée à l'ouverture du classeur.
Sur cette feuille, j'ai ajouté un bouton "enregistrer" associé à une macro.

L'idée est
- d'ôter la protection de la Feuil1
- écrire l'heure de la sauvegarde dans la cellule A1 de la Feuil1
- enregistrer le fichier (le classeur Excel)
- ré-activer la protection de la Feuil1

Je vous joins le fichier avec mon code :
http://cjoint.com/?BLqaYHQz5ga

Je ne sais pas pourquoi l'erreur 1004 survient.

Voici le message obtenu :

[i]Erreur d'exécution '1004' :
La cellule ou le graphique est protégé et en lecture seule.
Pour modifier une cellule ou un graphique protégé, ôtez la protection avec la commande Ôter la protection de la feuille (onglet Révision, groupe Modification). Vous devrez peut-être taper un mot de passe./i

Bien sûr, je sais ôter la protection dans le menu Excel mais ce n'est pas ça que je veux faire. Donc ce message du débogage ne m'éclaire pas beaucoup...

Merci pour votre aide !
Afficher la suite 

5 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 16 déc. 2012 à 10:51
+3
Utile
Bonjour,
Pourquoi faire un bouton "enregistrer" et en même temps utoiliser la procédure évènementielle Workbook_BeforeSave (qui ne comprend pas d'instruction d'annulation dans ton code) ?
Le bouton suffirait (avec le code de l'autre)
Essaye par ailleurs de mettre un
DoEvents
juste après
Workbooks("Classeur1test").Sheets("Feuil1").Range("A1").Value = "heure de la sauvegarde : " & Time
Si ne marche toujours pas, c'est que tu as autre chose qui, dans ton code, "coince". Peut-être une remise de la protection dans un évènement Change (qui se déclenche lorsque tu reremplis la cellule A1) ou ailleurs encore.
Essaye alors (tout ton code étant mis dans le bouton "enregistrer") de commencer par Application.EnableEvents = False

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
Utilisateur anonyme - 16 déc. 2012 à 01:39
0
Utile
Bonjour,

Personne ne va ouvrir ton fichier. De toute évidence, ton programme essaie d'accéder à une feuille qui n'a pas été déprotégée avant. Fais un copier-coller de l'instruction qui cause problème et de quelques lignes autour. Inutile d'envoyer tout ton code. Ce que cela prend c'est une partie suffisante qui inclue la ligne qui cause problème.
Commenter la réponse de Utilisateur anonyme
0
Utile
Bonjour, justement je déprotège la ligne au début du programme. Et le fichier fourni est un fichier test qui ne comprend que la partie du code concernée.
Enfin voici le code :

Dans le module objet This Workbook :

Private Sub Workbook_Open()

Sheets("Feuil1").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="test"

End Sub


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

'Workbooks("Classeur1test").Sheets("Feuil1").Unprotect ("toto")
Worksheets("Feuil1").Unprotect Password:="toto"

Workbooks("Classeur1test").Sheets("Feuil1").Range("A1").Value = "heure de la sauvegarde : " & Time

Workbooks("Classeur1test").Sheets("Feuil1").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="toto"

End Sub


Dans le Module 1 :

Sub enregistrer()
Workbooks("Classeur1test").Save
End Sub


Le bouton "enregistrer" sur la Feuil1 est associée à cette dernière macro.

La ligne qui me pose problème est celle-ci :

Workbooks("Classeur1test").Sheets("Feuil1").Range("A1").Value = "heure de la sauvegarde : " & Time


Merci
Commenter la réponse de alex90vba
0
Utile
justement je déprotège la feuille*
Commenter la réponse de alex90vba
0
Utile
Essaye alors (tout ton code étant mis dans le bouton "enregistrer") de commencer par Application.EnableEvents = False


Merci !
Commenter la réponse de alex90vba

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.