Protection d'une feuille de calcul avec code mis en oeuvre sous vi
Le
François-Marie
Bonjour,
S’il vous plaît, l’une ou l’un d’entre vous pourrait-elle/il m’aider à
résoudre un problème.
Je travaille sur Excel 2000.
En parcourant le forum, j’ai trouvé une solution pour "monter" une date de
mise à jour alimentée automatiquement quand on fait une modification dans une
plage de cellules.
J’ai saisi sous visual basic de ma feuille de calcul le code :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:N178")) Is Nothing _
Then [N1] = Now
End Sub
Ce code fonctionne bien tant que je ne protège pas ma feuille de calcul.
Dès que je protège ma feuille par un mot de passe, le code saisi sous visual
basic ne produit plus ses effets :
En effet, lorsque que je modifie le contenu d’une cellule de la feuille
protégée, il s’affiche
une fenêtre intitulée Microsoft Visual Basic comportant les libellés
d’erreur :
- Erreur d’exécution « 1004 »
- Erreur définie par l’application ou par l’objet.
Je clique alors sur « fin » : la fenêtre disparaît, ma modification est
prise en compte, mais ma date de mise à jour ne « bouge pas » ;
Si j’ôte la protection : je n’ai plus de problème, le code joue bien son rôle.
J’ai constaté qu’au niveau de la fenêtre protection, si je ne coche pas la
rubrique "contenu", je n’ai plus de message d’erreur, mais le contenu de mes
cellules et les formules que j’ai mises en place, ne sont plus verrouillées.
Je vous remercie de me préciser ce que je dois faire pour que mon code
produise ses effets tout en maintenant ma feuille protégée :
c'est-à-dire tout en verrouillant les cellules contenant des formules pour
ne laisser déverrouillées que les cellules dans lesquelles des informations
doivent être saisies (cellules déverrouillées constituant la plage dans
laquelle le code mis dans visual doit produire ses effets).
En vous remerciant d’avance pour votre collaboration, je vous souhaite une
bonne fin de journée.
Cordialement,
François-Marie.
S’il vous plaît, l’une ou l’un d’entre vous pourrait-elle/il m’aider à
résoudre un problème.
Je travaille sur Excel 2000.
En parcourant le forum, j’ai trouvé une solution pour "monter" une date de
mise à jour alimentée automatiquement quand on fait une modification dans une
plage de cellules.
J’ai saisi sous visual basic de ma feuille de calcul le code :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:N178")) Is Nothing _
Then [N1] = Now
End Sub
Ce code fonctionne bien tant que je ne protège pas ma feuille de calcul.
Dès que je protège ma feuille par un mot de passe, le code saisi sous visual
basic ne produit plus ses effets :
En effet, lorsque que je modifie le contenu d’une cellule de la feuille
protégée, il s’affiche
une fenêtre intitulée Microsoft Visual Basic comportant les libellés
d’erreur :
- Erreur d’exécution « 1004 »
- Erreur définie par l’application ou par l’objet.
Je clique alors sur « fin » : la fenêtre disparaît, ma modification est
prise en compte, mais ma date de mise à jour ne « bouge pas » ;
Si j’ôte la protection : je n’ai plus de problème, le code joue bien son rôle.
J’ai constaté qu’au niveau de la fenêtre protection, si je ne coche pas la
rubrique "contenu", je n’ai plus de message d’erreur, mais le contenu de mes
cellules et les formules que j’ai mises en place, ne sont plus verrouillées.
Je vous remercie de me préciser ce que je dois faire pour que mon code
produise ses effets tout en maintenant ma feuille protégée :
c'est-à-dire tout en verrouillant les cellules contenant des formules pour
ne laisser déverrouillées que les cellules dans lesquelles des informations
doivent être saisies (cellules déverrouillées constituant la plage dans
laquelle le code mis dans visual doit produire ses effets).
En vous remerciant d’avance pour votre collaboration, je vous souhaite une
bonne fin de journée.
Cordialement,
François-Marie.

Poser une question


ActiveSheet.Unprotect Password:=""
....
....
ActiveSheet.Protect Password:=""
JB
http://boisgontierjacques.free.fr/
On 30 juin, 18:53, François-Marie
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect Password:="LeMotDePasse"
If Not Intersect(Target, Range("A2:N178")) Is Nothing _
Then [N1] = Now
ActiveSheet.Protect Password:="LeMotDePasse", DrawingObjects:=True,
Contents:=True, Scenarios:=True
End Sub
isabelle
François-Marie a écrit :
Au lieu de protéger manuellement les feuilles
et ensuite de devoir déprotéger reprotéger
à chaque macro.Utilise userinterfaceonly, ainsi
se met obligatoirement à l'ouverture et protègera de l'utilisateur
en laissant agir les macros:
Enlève la protection puis mets ceci exemple mot de passe "toto"
'dans le thisworkbook du classeur
Private Sub Workbook_open()
Dim sh as worksheet
For each sh in thisworkbook
sh.protect password:="toto", userinterfaceonly:=true
next
end sub
'pour tester fermer et rouvrir le classeur
'lSteph
François-Marie a écrit :
Je vous remercie de votre réponse.
J'ai saisi votre règle dans worksheet.
Toutefois, je me heurte à un problème de compilation.
En effet, quand je réouvre mon fichier et que je saisis une nouvelle
information, en maintenant la feuille de calcul protégée :
- j'ai une fenêtre d'erreur avec le message : "Erreur de compilation dans le
module caché : Feuil 1"
Si je vais sur la feuille code (visual basic) et que je reviens sur la
feuille de calcul pour saisir une information :
- je suis renvoyé sur la feuille visual basic, avec affichage d'une fenêtre
d'erreur comportant le message : "Erreur de compilation : erreur de syntaxe"
- la phrase :
"ActiveSheet.Protect Password:="LeMotDePasse", DrawingObjects:=True," est
alors surlignée en bleu.
J'ai essayé de saisir le texte de différentes façons, mais je me heurte
toujours au même problème.
Pouvez-vous, s'il vous plaît, m'aider de nouveau pour résoudre ce problème
de compilation.
Je vous remercie d'avance et vous souhaite une excellente journée.
Bien amicalement,
François-Marie.
"isabelle" a écrit :
Je te remercie pour ta réponse.
J'ai de grandes difficultés pour saisir ta règle.
En effet, je ne sais pas comment on fait pour aller dans :
le "thisworkbook du classeur".
Je ne sais aller que sur le worksheet d'une feuille.
Pourrais-tu, s'il te plaît, me dire ce qu'il faut faire pour obtenir le
"thisworkbook".
Je te remercie d'avance pour ton aide.
Bien cordialement,
François-Marie.
"LSteph" a écrit :