Protect/deProtect Classeur et Feuilles

a3lain

XLDnaute Junior
Bonjour,

Je voudrais proteger
1) un classeur à son ouverture avec un mot de passe contenu dans la feuille1 en cellule AY2 par exemple 'toto' et ce afin que personne ne puisse creer des onglets.
Masquer la colonne AY2 pour ne pas etre visible
Je voudrais que ce passwd soit stocké dans une variable publique 'pass' accessible par la la suite dans toutes les feuilles

2) ensuite , je voudrais que la feuille active Feuille1 soit proteger par le meme mot de passe stocké dans la variable.
J'ai ensuite des actions a faire comme masquer demasquer des lignes en fonction de case remplies par l'utilisateur.
Je dois donc deproteger la feuille active le temps de masquer / demasquer puis la reproteger après.

J'ai tenté de le faire en utilisant ThisWorbook et Active.Sheets mais j'ai des problèmes d'execution. J'ai l'inpression que la variable pass perd sa valeur entre autre.
Bref j 'y arrive pas
Merci de votre aide.
Alain
 

Jacques87

XLDnaute Accro
Bonsoir Alain

Avec ce code, tu pourras protéger toutes tes feuilles dès l'ouverture de ton classeur, avec comme moy de passe 'toto' qui est situé dans la cellule A1 de la feuille 1
De plus la colonne A de la feuille 1 se masque automatiquement

Public mdp As String

Private Sub Workbook_Open()
mdp = Worksheets(1).Range('A1').Value
Worksheets(1).Columns('A:A').EntireColumn.Hidden = True

For I = 1 To Sheets.Count
Sheets(I).Select
Sheets(I).Protect Password:=mdp
Next I
End Sub

Pour déprotéger tes feuilles tu peux le faire manuellement, une par une, ou alors utiliser la macro suivante

Sub deproteger()
Dim I As Integer
For I = 1 To Sheets.Count
Sheets(I).Select
Sheets(I).Unprotect Pasword:= mdp
Next I

Bon courage
 

a3lain

XLDnaute Junior
Bonjour et merci Jacques87

Connaissant le nom des feuilles, est ce que je peux utiliser deproteger avec un parametre? comme cela?

Sub deproteger(Onglet As String)

Sheets(Onglet).Select
Sheets(Onglet).Unprotect Pasword:= mdp

End Sub

et reproteger à l'inverse une fois les opérations finies sur la feuille.

en faisait des appels deproteger ('Mois') dans le code VBA de la feuille Mois

De plus, je suppose que le code
Public mdp As String

Private Sub Workbook_Open()
... doit être mis dans ThisWorkbook

Merci
 

Jacques87

XLDnaute Accro
Re Alain

Bien sur en ce qui concerne ta première question, tu pourras ainsi de déprotéger ou protéger que la feuille qui t'intéresse, alors qu'avec mon code tu déprotèges ou protèges toutes les feuilles en même temps

également oui pour la deuxième question, en mettant cette procédure dans l'objet ThisWorkBook, et en particulier dans l'évennement open, elle sera lancée à chaque ouverture de ton fichier

Tu as tout compris, bon courage
 

a3lain

XLDnaute Junior
re bonjour

J'ai fait à peu près tout ce que l'on a vu mais j'ai toujours une erreur d''execution et cela ne marche pas.

Je joins le fichier pour exemple.

Merci de ton aide et de celle des autres si eventuellement quelqu'un a une idée. [file name=TestsProtect.zip size=15514]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TestsProtect.zip[/file]
 

Pièces jointes

  • TestsProtect.zip
    15.2 KB · Affichages: 21

Jacques87

XLDnaute Accro
Attention Alain, tu avais tout fait ce que l'on s'était dit mais pas dans le bon ordre.
Tu ne peux pas effectuer une transformation (cacher une colonne) sur une feuille protégée. Or tes feuilles sont protégées d'office à l'ouverture du fichier étant donné que tu fais une sauvegarde du fichier avec les feuilles protégées
Il te faut donc
1) déprotéger la feuille
2) cacher la colonne
3) reprotéger la feuille

A ta disposition [file name=TestsProtect_20060129173939.zip size=15473]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TestsProtect_20060129173939.zip[/file]
 

Jacou

XLDnaute Impliqué
Bonjour
Tu ne peux pas cacher une colonne déjà cachée
remplace
Worksheets('Monthly').Columns('O:O').EntireColumn.Hidden = True
par
If Worksheets('Monthly').Columns('o').Hidden = False Then
Worksheets('Monthly').Columns('o').Hidden = True
End If

Bon courage
 

a3lain

XLDnaute Junior
Re Jacques87,

J'ai effectué le test avec ta feuille mais je vois deux choses qui clochent :
1) une fois ouvert : le classeur n'est pas protégé - la feuille est bien protegee

2) quand je bascule de Yes à No ou inverse, j'ai un message d'erreur qui me reporte a 'deproteger'

Est ce que tu vois d'où cela vient?

Merci
 

Jacques87

XLDnaute Accro
Re Alain

1ere question :
le classeur n'est pas protégé - la feuille est bien protegee
normal tu m'as demandé une protection des feuilles : WoorkSheets(nom).Protect, donc seules les feuilles sont protégées, mais pas le classeur.
Entre nous, selon moi, ce type de protection est suffisante dans ton cas

2ème question :
quand je bascule de Yes à No ou inverse, j'ai un message d'erreur qui me reporte a
\\'deproteger

c'est tout à fait normal, je t'ai expliqué tout à l'heure que tu ne pouvais rien faire sur une feuille protégée, tu dois d'abord la déprotéger, faire ton action et ensuite la reprotéger.


pour ces questions ainsi que pour la suite de tes questions, laisse moi un peu de temps, je suis plusieurs Fils en même temps, donc je dois me partager entre les demandes.Je te promets de te donner une réponse ce soir ou au plus tard demain

Bonne soirée
 

Jacou

XLDnaute Impliqué
Bonsoir Alain, Jacques et tout le forum

Oui il y a une petite erreur de frappe dans la macro qui appelle la macro deproteger : onglet a la valeur Montlhy au lieu de Monthly
alors évidemment VBA ne trouve pas la feuille.
D'autre part je n'ai pas vu l'endroit où la valeur du mot de passe pass est défini

Bon courage et bonne soirée
 

Jacques87

XLDnaute Accro
re

Voici le fichier actualisé selon tes désirs

Pour masquer tes lignes par + ou -, je connais le truc, mais ne l'ayant jamais utilisé, car je fais tout par code VBA, je ne pourrais pas t'aider

dis moi si ce fichier actualisé correspond à ce que tu attends [file name=TestsProtect_20060129221027.zip size=15550]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TestsProtect_20060129221027.zip[/file]
 

a3lain

XLDnaute Junior
Merci à vous deux de votre aide. Pas de problème Jacques87, je vais attendre que tu ais plus de temps, c'est déjà aimable de m'aider.

Jacou, je vais revérifier mes syntaxes.

Pour la protection du classeur, je la voulais car je ne souhaite pas que l'utilisateur puisse ajouter des onglets. C'est vrai j'avais oublié de le signaler mais à la limite, c'est pas grave ar je peux le mettre directement dans la feuille excel, mon besoin etant juste de proteger et deproteger les feuilles dans mes manips.

Encore merci à vous et à ce forum. J'attends que vous ayez un peu de temps pour suivre mon fil mais si je trouve la solution, je la mets bien evidemment, vous en serez informé.

donc j'attends vos idées
 

a3lain

XLDnaute Junior
Re Jacques87,

J'ai testé ta nouvelle version et je crois que ce qui ne marche pas , c'est qu'il ne garde pas le mot de pass dans la variable pass. Du coup, le message d'erreur dit que le mot de passe est invalide. Le debugger dit que la variable pass est vide.
C'est comme si elle etait privée et reste au niveau de Workbook_open.

Idée?

Merci encore de ta perseverance
 

Jacques87

XLDnaute Accro
Re

je ne comprends pas très bien. J'avais bien déclaré la variable comme variable publique et pourtant
Donc pour remédier à ce phénomène que je ne m'explique pas, j'ai redéfini la variable dans le module ou se trouvent les procédures de protection et de déprotection [file name=TestsProtect_20060129225358.zip size=16319]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TestsProtect_20060129225358.zip[/file]
 

Discussions similaires

Réponses
2
Affichages
214

Membres actuellement en ligne

Statistiques des forums

Discussions
312 571
Messages
2 089 805
Membres
104 276
dernier inscrit
helenevellocet