Protection feuille/classeur excel 2007

Résolu/Fermé
brink33 - 26 mars 2012 à 12:22
 amire - 29 mars 2014 à 16:13
Bonjour,

J'ai un fichier excel que je dois mettre sur un disque réseau. Je veux alors le protéger avec un code afin que tout le monde puisse le consulter mais que seulement certaines personnes (ceux à qui j'aurais passé le code) puisse le modifier etc.
Seulement, lorsque quelqu'un modifiera le fichier (en ôtant la protection) et l'enregistrera de nouveau. La protection ne sera alors plus effective, à moins que celui-ci pense, avant d'enregistrer ses modification, à paramétrer de nouveau la protection... pas évident!!
Je voulais alors savoir s'il y avait un moyen pour que la protection se remette automatiquement!

merci d'avance!



A voir également:

18 réponses

Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
Modifié par Mike-31 le 18/11/2013 à 11:16
Re,

pour commencer déporotèger toutes tes feuilles

dans la Thisbokbook colle ce code

Option Explicit

Const mot1 As Variant = "titi"
Const mot2 As Variant = "toto"

Private Sub Workbook_Open()
Call protections
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call protections
End Sub

Sub protections()
Sheets("Feuil1").Protect Password:=mot1
Sheets("Feuil2").Protect Password:=mot1
Sheets("Feuil2").Protect Password:=mot1
Sheets("Feuil4").Protect Password:=mot2
Sheets("Feuil5").Protect Password:=mot2
Sheets("Feuil6").Protect Password:=mot2
Sheets("Feuil7").Protect Password:=mot2
End Sub

en début de code tu as deux constantes qui te permette de saisir le mot de passe de ton choix pour chaque groupe de feuille. Chaque mot de passe doit être entre guillemet
Const mot1 As Variant = "titi" Const mot2 As Variant = "toto"

ensuite tu trouveras la macro
Sub protections()
Sheets("Feuil1").Protect Password:=mot1
Sheets("Feuil2").Protect Password:=mot1
Sheets("Feuil2").Protect Password:=mot1
Sheets("Feuil4").Protect Password:=mot2
Sheets("Feuil5").Protect Password:=mot2
Sheets("Feuil6").Protect Password:=mot2
Sheets("Feuil7").Protect Password:=mot2
End Sub
exemple si une feuille est nommée Facture par exemple et tu veux la protéger avec le mot de passe toto tu saisis le nom de l'onglet et le nom de la constante qui est mot2

Sheets("Facture").Protect Password:=mot2

et deux macros de déclenchement des protections, une pour protéger les feuilles à l'ouverture et l'autre lorsque tu enregistres

Private Sub Workbook_Open()
Call protections
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call protections
End Sub

évite de reprotéger les feuilles manuellement trop de risque de mot de passe erroné, enregistre simplement ou ferme le sans enregistrer si tu ne veux pas enregistrer les dernières modifications et ouvre le à nouveau

ATTENTION DE NE PAS OUBLIER LES MOTS DE PASSE

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
6
roms2902 Messages postés 3 Date d'inscription jeudi 14 novembre 2013 Statut Membre Dernière intervention 18 novembre 2013
18 nov. 2013 à 15:01
Re,

Niquel, Tout fonctionne.

J'allais te demander de me rajouter aussi la re-protection automatique des feuilles quand on passe de feuille en feuille ... mais avec la remise des mots de passe après enregistrement (et aussi dès la fermeture du fichier) c'est encore plus simple et même moins fastidieux pour la personne qui va modifier le fichier à longueur de temps (pas obliger de remettre le mot de passe à chaque changement de feuille)

Je ne regrette pas d'être tomber par hasard sur ce post (sachant que c'est un problème que je traîne depuis des mois)

En tout cas un GRAND MERCI !
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
26 mars 2012 à 18:36
Re,

Alors il faut passer par un petit code VBA

clic droit sur l'onglet de ta feuille/Visualiser le code/ à gauche du remarqueras un menu projet-VBAproject tu cherches Thisworkbook sur lequel tu fais un clic droit et Code

colle ce petit code qui protégera chaque feuille dès que tu la quittera. Le mot de passe est titi à changer évidemment

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
ActiveSheet.Protect Password:="titi"
End Sub

ce code peut être activer également à l'ouverture ou à la fermeture du fichier, toutes les x minutes, après un changement, un délai d'inactivité, un bouton de commande etc ...
1
Ok merci!
J'arrive à faire tout ce que tu m'as dit mais après? comment je l'enregistre ce code?

quand je ferme toute les fenetre de visual basic y compris la fenetre où j'ai rentré le code, que je vais sur excel, que j'enregistre mon fichier excel, on me dit:
"La fonctionnalité "projet VB" ne peut pas etre enregistrées dans des classeurs sans macro. Pour enregistrer un fichier avec cette fonctionnalité, cliquez sur Non, puis sélectrionnez un type de fichier prenant en charge les macros dans la liste Type de fichier. Pour continuer en tant que classeur sans macro, cliquez sur oui."

J'ai essayé oui (car j'ai pas de macro dans mon classeur) et j'ai aussi essayé non. mais ca ne fonctionne pas.

C'est à dire: j'ai fait ce que tu m'as dit de faire alors que mes protections étaient activées, ensuite j'ai ôté la protection pr modifier un truc dans le fichier, j'ai enregistrer, j'ai fermé, j'ai reouvert et j'ai constaté que ça n'avait pas fonctionné vu que le fichier n'était plus protégé...
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
26 mars 2012 à 13:23
Salut,

Si tu mets un mot de passe à l'ouverture et éventuellement un différent à la modification cela offre deux protections.
le fait de le déprotéger pour modifier le contenu de ta feuille ne modifie en rien cette protection, elle sera de nouveau active après avoir fermé le classeur.
Mais si tu le souhaites, il est possible d'écrire un code en VBA qui reprotégera la feuille ou le classeur s'il a été déprotégé après un délai de x minutes
0
Il faut que tout le monde puisse le consulter donc pas de mot de passe à l'ouverture.

J'ai essayé d'ouvrir le fichier, de déprotéger la feuille pour modifier un truc, j'ai ensuite enregistré puis fermé. En reouvrant, il n'y avait plus la protection de la feuille...
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
27 mars 2012 à 09:55
Re,

Tu travailles certainement sous Excel 2007 ou 2010, alors soit tu enregistres ton fichier sous l'ancienne extension .XLS pour cela lorsque tu fais Enregistrer ou Enregistrer sous en bas de ta fenêtre, dans Type sélectionne Classeur Excel 97-2003(*.xls) ce qui permettra également de lire ton fichier sous toutes les versions Excel depuis 97 alors que les fichiers enregistrés avec 2007 ou 2010 seront ouvert que par ces version ou il faudra télécharger un convertisseur.

ou tu enregistres ton fichier avec l'extension XLSM de la même façon dans Type sélectionne Classeur Excel prenant en charge les macros (*.xlsm)

Il est possible qu'à chaque ouverture le système te demande d'activer les macros dans ce cas tu reviens sur la discussion et je te dirais comment procéder pour éviter cela. De même que si le code macro ne fonctionne pas, c'est que le niveau de sécurité est trop élevé et te dirai également comment procéder.
Tu me donneras ta version Excel
0
C'est excel 2007 je l'ai mis dans le titre.
C'est pas nécessaire qu'il soit lisible avec les anciennes versions d'excel donc j'ai essayé ta deuxieme proposition: enregistrer sous fichier excel prenant en charge les macros.
J'ai ensuite essayé de nouveau d'ôter la protection de la feuille concerné, de modifier un truc, d'enregistrer, de fermé, de réouvrir et la protection était toujours inactive :S

Après avoir rentrer le code que tu m'as dit, j'ai fermé visual basic.. Je fais quelque chose d'incorrect?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
27 mars 2012 à 11:31
Re,

Effectivement j'avais zappé ta version excuse moi.

le code que je t'ai écrit protégeait la feuille lors d'un changement de feuille vers une autre et t'ai également précisé que ce code pouvait être activé à l'ouverture ou à la fermeture du fichier, toutes les x minutes, après un changement, un délai d'inactivité, un bouton de commande etc ...
regarde le fichier joint, le code s'active à l'ouverture du fichier et lorsque tu quitte la feuille

https://www.cjoint.com/?BCBlES9nExy
0
Ok merci, je commence à comprendre le système car j'ai vu que ça fonctionnait quand j'enlève la protection, que je vais sur une autre feuille et que je reviens sur la feuille, la protection s'est en effet remise toute seule.
Par contre ce qui m'intéresse c'est juste qu'à chaque ouverture du fichier, la protection soit active même si on l'a désactivé plus tôt pour faire une modif (et oublier de la réactiver).
J'ai donc pris seulement la premiere partie de ton code pour tester et ça ne fonctionne pas. J'enleve la protection pr faire une modif, j'enregistre, je ferme, j'ouvre, et la protection ne s'est pas remise toute seule.

Il faut bien que je créais une protection (malgré ce code qu'on met dans visual basic) avec le même mot de passe non?
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
27 mars 2012 à 12:40
Re,

Pour que la protection soit active à chaque ouverture du fichier c'est ce code

Private Sub Workbook_Open()
ActiveSheet.Protect Password:="titi"
End Sub

ou tu peux également réactiver la protection à la fermeture du fichier

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveSheet.Protect Password:="titi"
End Sub
0
J'ai mis le code pour que la protection soit active à chaque ouverture du fichier mais ça ne fonctionne toujours pas et je ne sais pas pas pourquoi!
Faut-il bien que je créer une protection avec le code "titi" dans excel en plus de mettre ce code là dans visual basic?
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
27 mars 2012 à 14:14
Re,

Ce n'est pas grave, comme je te l'ai dit dans un post, le niveau de sécurité doit être élevé, dans la barre d'onglet, as tu l'onglet Développeur au dessus du ruban activé il est juste après Révision et Affichage
0
Non je n'ai pas l'onglet Développeur...
Sais-tu pourquoi ça ne fonctionne pas?
Merci
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
27 mars 2012 à 19:45
RE,

Commence par ouvrir Excel
En haut à gauche clic sur le bouton Microsoft
dans la fenêtre en bas à droite clic sur Options Excel
clic sur la rubrique Standard et coche Afficher l'onglet Développeur dans le ruban
ferme la boite de dialogue

clic sur l'onglet Développeur au dessus du ruban
dans le module Code clic sur sécurité des macros coche Activer toutes les macros (non recommandé; etc .......)

teste mon code et reviens dans la discussion je t'expliquerai comment relever le niveau de sécurité des macros
0
Ah oui ça marche mieux là!

Par contre, après plusieurs tests, j'ai remarqué un petit défaut:
En mettant le code seulement dans la fenetre "ThisWorkBook" dans Visual Basic, ça me protège bien les 3 feuilles de mon classeur mais quand j'ôte la protection de chacune des feuille pour modifier des trucs, j'enregistre, je ferme, je reouvre et je constate que la protection s'est réactivé seulement pour une seule des feuille (celle qui était à l'écran quand j'ai enregistré puis fermé).

N'y a t'il pas un remède? :)
Mais en tout cas déjà merci, ça fait plaisir de voir que ça fonctionne un peu! :D
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
28 mars 2012 à 11:33
Re,

remplace le code dans la Thiswokbook par celui ci et à chaque ouverture toutes les feuilles seront protégées

Private Sub Workbook_Open()
For Each Sh In Sheets
Sh.Protect Password:="titi"
Next Sh
End Sub

lorsque ton code sera bon n'oublie pas que nous devrons relever la protection d'Excel en complétant le code
0
Ah parfait ça fonctionne! :)
Relever la protection d'Excel c'est à dire?
Donc je devrais dans tous les cas l'enregistrer sous la forme excel prenant en charge les macro? (malgré que je n'ai aucune macro)
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
28 mars 2012 à 13:40
Re,

oui il faudra enregistrer dans chaque fichier concerné le code dans la Thiswokbook de chaque fichier (bien que l'on pourrait l'enregistrer dans un dossier privé de macro)
ce que tu veux faire ne peut être fait que par macro et le code que je t'ai écrit en est une.
Les virus sont de petit programme malveillant qui peuvent être caché dans des codes de programmation, pour des raisons de sécurité il est recommandé de travailler sous protection élevé ce qui bloque les codes comme les macros.
Il est possible de signer numériquement un code de sorte que Windows le reconnaisse comme sur et l'active automatiquement.
Pour cela j'ai écris une astuce que l'on peut retrouver dans les astuces du forum ICI

Création de la signature
* 2 Sous environnement XP, VISTA ou Windows7 pour Microsoft Office 2003 et 2007 :
o Bouton Démarrer.
o Dans Tous les programmes.
o Cliquer sur Microsoft Office.
o Outils Microsoft Office.
o Puis sur Certificat numérique pour les projets VBA.

rétablir la protection élevé d'Excel
* Si l'onglet Développeur n'est pas activé, cliquer sur le bouton Microsoft Office
* Puis sur Options Excel.
* Cliquer sur Standard, puis cocher Afficher l'onglet Développeur dans le ruban.
* Ouvrir le fichier contenant le code macro à signer
* Dans l'onglet Développeur, Visual Basic ou (Alt+F11)
* Dans la barre des menus du Visual Basic : Outils > Signature Électronique > cliquer sur choisir > puis sur le nom de sa signature et OK.
* Revenir sur la feuille de calcul
* Onglet Développeur,Sécurité des macros
* Cocher : Désactiver toute les macros à l'exception des macros signées numériquement et OK
* Enregistrer
* Fermer le fichier et l'application

Lorsque tes attentes seront satisfaites confirme le moi que je mette le statut de la discussion en résolu
0
Il est obligé de faire ça tu penses?
Parce que si c'est qu'un problème de virus, ce fichier ne sera pas sur internet!
Etant donné que ça fonctionne très bien comme ça, je ne peux pas simplement l'enregistrer et l'utiliser comme ça tout le temps?
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
28 mars 2012 à 14:43
Re,

Tu peux le laisser comme cela sans problème, mais tu n'as pas de barrière de protection et les virus ne sont pas que sur internet, il est possible de véhiculer des virus avec toute sorte de support magnétique comme un clé USB.
Maintenant tu fais comme tu veux !
0
Ok mais vu que c'est un fichier qui va rester dans une entreprise, que tout est bien sécurisé et que les clef USB sont interdite ça devrait aller mais merci c'est sympa! ;)

Par contre, est ce que c'est possible de faire le même genre de chose mais pour protéger le classeur cette fois? (pour empêcher la suppression d'une feuille par exemple)
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
28 mars 2012 à 23:32
Re,

Oui bien sur avec Excel tout est possible ou presque,

dans la Thiswokbook colle ce code à la place de l'autre qui protége les feuille et la structure du classeur


Option Explicit

Private Sub Workbook_Open()
Dim Sh As Worksheet
For Each Sh In Sheets
Sh.Protect Password:="titi"
Next Sh
ActiveWorkbook.Protect Password:="titi", Structure:=True, Windows:=False
End Sub

par contre la déprotection d'une feuille ne déprotégera pas la structure du classeur, pour modifier le classeur il faudra remplacer la dernière ligne par

ActiveWorkbook.Unprotect Password:="titi"

ou créer une macro dans un module
0
thx u very much
0
C'est parfait, c'est exactement ce que je voulais merci beaucoup!!
Encore une ptite question: Je voulais que ce fichier excel puisse être utilisé par plusieurs personne en même temps sur un disque réseau (par les personnes qui peuvent le modifier et d'autre non).
Je pense alors que c'est la fonction "partage" d'excel?
Donc je l'ai activé mais j'ai constaté que dans ce cas on ne peut pas ensuite enlever les protection... C'est pas compatible la protection et le partage?!
Merci ;)
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
29 mars 2012 à 11:57
Re,

La tu en demande beaucoup, je ne suis pas en réseau il m'est difficile d'écrire un code et le tester, je ne pense pas que le partage soit possible avec ce genre de protection et cela me parait illogique
0
Ok c'était au cas où! :)

Merci encore pour ton aide ça m'a bcp aidé !!! ;)
0
roms2902 Messages postés 3 Date d'inscription jeudi 14 novembre 2013 Statut Membre Dernière intervention 18 novembre 2013
14 nov. 2013 à 19:25
Bonjour,

Je souhaite faire exactement la même chose (j'arrive plus ou moins avec les codes écrit ci dessus).


A la seule différence que je souhaiterais mettre deux mots de passe différents sur les feuilles.
Mon document comporte 7 feuilles. 1 mot de passe pour 3 d'entre elles. ET 1 mot de passe pour les 4 autres.

Merci d'avance.
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
14 nov. 2013 à 22:10
Re,

le plus simple si j'ai bien compris ton problème est d'enregistrer deux constantes en début de code par lesquelles tu détermines tes mots de passe exemple titi et toto
ensuite tu affectes un mot à chaque feuille
ce code est à placer dans la Thisworkbook

Option Explicit

Const mot1 As Variant = "titi"
Const mot2 As Variant = "toto"

Private Sub Workbook_Open()
Sheets("Feuil2").Protect Password:=mot1
Sheets("Feuil1").Protect Password:=mot1
Sheets("Feuil4").Protect Password:=mot2
End Sub

0
roms2902 Messages postés 3 Date d'inscription jeudi 14 novembre 2013 Statut Membre Dernière intervention 18 novembre 2013
15 nov. 2013 à 17:28
Bonjour,

Une fois rentré dans le visual basic

Onglet This workbook (dans le listing à droite) + Dans la liste déroulante : Workbook

Mise en place du code > enregistrement > Fermeture > Réouverture
-->
A l'ouverture du fichier : Erreur d'exécution '9'
L'indice n'appartient pas à la sélection

Merci en tout cas pour ta rapidité.
0