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
 

a3lain

XLDnaute Junior
Cela a l'air de fonctionner. Je vais completer mes tests et je vous tiens informé.
Je suis d'accord avec toi. Je pensais aussi que la variable etant publique, elle serait accessible partout ailleurs.Or il faut la reinitialiser à chaque fois, bizarre.

Si quelqu'un a une idée, il l'a donnera peut être

Merci encore et je mettrais dans le fil si cela fonctionne entièrement.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Jacques, Alain, Jacou

Attention, ce qui ne va pas dans ton Code Jacques, ce n'est pas bizarre, c'est faux :

Public Pass As String déclarée dans le Private Module de ThisWorkBook restera Private.

Doubler la déclaration de Variable dans ThisWorkBook et dans Module1 est une erreur.

Tripler la déclaration dans les Privates Modules de Feuille est également une erreur.

Seule sera prise en compte comme étant rééllement Publique la Variable Public déclarée dans le Module Standard 'Module1', le fait de multiplier les déclarations et initialisations peut avoir des effets plus qu'indésirables même si ça ne bug pas au premier click.

Pour le passage du paramètre 'Onglet' c'est bien mais il faut aussi penser à passer tous les paramètres nécessaires car je pense qu'alain ne travaillera pas que sur une seule feuille...

Pour le reste on peut aussi s'éviter les Select

Voici une ébauche un peu plus affinée...Si j'ai bien interprété la demande d'Alain en fonction de la lecture du code de Jacques.

Bonne Soirée
[ol]@+Thierry[/ol] [file name=Protect_V01.zip size=18504]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Protect_V01.zip[/file]
 

Pièces jointes

  • Protect_V01.zip
    18.1 KB · Affichages: 24

a3lain

XLDnaute Junior
Merci Thierry et à vous tous,

Je crois avoir compris la subtilité du Private et du pourquoi le pass restait vide hors du workbook_open, du moins dans le texte. Je vais faire des tests avec ta solution et je dirais dans le fil si ca répond au besoin.

Merci à tous et en general au forum.
Mon prochain message sera je l'espère : YES, ca marche :)

Alain
 

a3lain

XLDnaute Junior
Re Thierry,

A partir de ton fichier , j'ai pu corriger toutes mes erreurs. Je t'en remercie. Cela a l'air de marcher comme je veux.
J'ai un peu adapté une ou deux choses pour simplifier et parce que je ne comprenais pas bien étant novice ce qu'il en etait :
1) Option Explicit dans Workbook : à quoi cela sert il? Je l'ai gardé.
2) Pourquoi preferer ecrire
Sub Deproteger(Onglet As String)
Dim WS As Worksheet
Set WS = Worksheets(Onglet)
With WS
.Unprotect Password:=Pass
End With
End Sub

plutot que directement
Sub Deproteger(Onglet As String)
Worksheets(Onglet).Unprotect Password:=Pass
End Sub

Dans tous les cas , merci à tous de votre aide qui m'a enllevé une belle epine du pied.

Alain
 
D

Domi

Guest
Bonjour a3lain, bonjour Thierry,
bonjour le forum

Option Explicit indique que toutes tes variables doivent être déclarées par Dim.

Pour la différence entre les deux formules, je ne peux tester, mais la première déclare le classeur comme objet, et manipule les propriétés des feuilles.

A première vu, la seconde devrait avoir le mëme effet ...

Bon courage.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Alain, Domi, Jacques, le Forum

J'arrive un peu après la bataille, sorry !

Domi a bien répondu, Option Explicit est un 'Statement' qui indique à VBA une Option qui oblige le développeur à délarer les Variables... Sinon VBA le signale bien gentiment au lieu de ne rien faire... Ce qui peut éviter bien des soucis par la suite...

Ta remarque sur les différences de Syntaxe est judicieuse…

En effet la syntaxe que j’emploie ici semble plus longue… Cependant il ne faut pas oublier que VB / VBA, et autres dérivés, sont des langages orientés « Objects » et implicitement VBA fera une instance à un Object WorkSheet indifféremment des deux syntaxes…

Dans le cas présent, il est clair que la Syntaxe :
Worksheets(Onglet).Unprotect Password:=Pass

Suffit amplement…

Par contre ci on devait “triturer” cette feuille à plusieurs reprises avec par exemple :

Sub Deproteger(Onglet As String)
Dim WS1 As Worksheet

Set WS1 = Worksheets(Onglet)
Set WS2 = Worksheets('Source')


   
With WS1
        .Unprotect Password:=Pass
        .Visible = xlSheetVisible
        .Range('A1') =
Date
            WS2.Range('A1').Copy .Range('A2')
        .PrintOut
        .Visible = xlSheetVeryHidden
        .Protect Password:=Pass
   
End With

End Sub

Ce serait bien plus « fatiguant » pour VBA de faire le code ci-dessous car il fera une Instance à la Feuille à chaque ligne au lieu d’une seule comme au dessus avec mon Set d'Object :

Sub Deproteger(Onglet As String)
    Worksheets(Onglet).Unprotect Password:=Pass
    Worksheets(Onglet).Visible = xlSheetVisible
    Worksheets(Onglet).Range('A1') =
Date
    Worksheets('Source').Range('A1').Copy Worksheets(Onglet).Range('A2')
    Worksheets(Onglet).PrintOut
    Worksheets(Onglet).Visible = xlSheetVeryHidden
    Worksheets(Onglet).Protect Password:=Pass
End Sub

Même si il semble y a voir moins de lignes...

Mais comme j'ai dit, dans le cas présent ce n'est pas justifié, ce sont mes habitudes de dévelloppement.

Bonne Appétit
[ol]@+Thierry[/ol]
 

Discussions similaires

Réponses
2
Affichages
218

Statistiques des forums

Discussions
312 615
Messages
2 090 243
Membres
104 464
dernier inscrit
alzerco