[VBA] Protéger classeur avec MDP à l'ouverture.

Mjgreg67

XLDnaute Junior
Bonjour le forum,

J'espère que vous allez bien.

Je suis actuellement entrain de bloquer sur une procédure qui est selon moi... Toute banal... Mais qui, je ne sais pourquoi, ne fonctionne pas.

J'aimerai connaitre la procédure VBA permettant d'enregistrer un mot de passe pour un classeur. Mot de passe qui sera demandé à l'ouverture du dit classeur.

Le code que j'ai actuellement est le suivant :

CODE: TOUT SÉLECTIONNER
Workbooks("Blabla.xls").Protect Password:="test", Structure:=True, Windows:=False


Le problème c'est que le classeur est effectivement protégé pour modification mais ne demande pas le mot de passe à l'ouverture...

J'ai beau rechercher sur internet je ne trouve que les procédures permettant de déverrouiller un classeur à son ouverture ... Ce n'est pas ce que je recherche.

Pouvez-vous m'aider à trouver la bonne procédure ?

Merci beaucoup
 

Lone-wolf

XLDnaute Barbatruc
Re : [VBA] Protéger classeur avec MDP à l'ouverture.

Bonsoir Mjgreg


Code:
Option Explicit
Private Sub Workbook_Open()
Dim Ws

For Each Ws In Worksheets
Ws.Protect Password:="ton mot de passe", DrawingObjects:=True, Contents:=True, _
Scenarios:=True, AllowFormattingCells:=True
Next Ws
End Sub


Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Range("M1") = "ton mot de passe" Then _
Sh.Unprotect Password:=Sh.Range("M1")
End Sub



A+ :cool:
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : [VBA] Protéger classeur avec MDP à l'ouverture.

Pour protéger un fichier, tu fais enregistrer sous, quand la fenêtre d'enregistrement s'ouvre, dans le bas il y a une toupie "options".
tu cliques dessus et une autre petite fenêtre s'ouvre, clique sur options générales et là une autre fenêtre s'ouvre pour insérer le mot de passe.
 

Lone-wolf

XLDnaute Barbatruc
Re : [VBA] Protéger classeur avec MDP à l'ouverture.

Bonsoir cathodique :)


@ Mjgreg: désolé, j'ai mal interpréter ta demande. :eek:


Mais si tu veux le déprotéger pourquoi:
J'aimerai connaitre la procédure VBA permettant d'enregistrer un mot de passe pour un classeur. Mot de passe qui sera demandé à l'ouverture du dit classeur.

Dans ce cas, dans un module : Public Const Pword as String = "toto"

Code:
Option Explicit
Private Sub Workbook_Open()
Dim Ws

For Each Ws In Worksheets
Ws.Protect Password:=Pword, DrawingObjects:=True, Contents:=True, _
Scenarios:=True, AllowFormattingCells:=True
Next Ws
End Sub


Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If sh.Range("p1") = Pword Then 
Sh.Unprotect Password:=Pword
End Sub


A+ :cool:
 
Dernière édition:

Mjgreg67

XLDnaute Junior
Re : [VBA] Protéger classeur avec MDP à l'ouverture.

Bonjour tous les 2 et merci d'avoir proposer vos solutions. :)
Cathodique : Merci celle-là je la connaissais depuis pas mal de temps mais ce n'est pas ce que je recherche...

Lone_Wolf : Merci de t'être pris la peine de poser un code. Je comprends votre code mais je crois que je me suis mal exprimé...
En effet, votre code est un code événementiel de type OPEN. C'est à dire qu'il s'exécutera à l'ouverture du dit fichier et je suis obligé de l'intégrer directement dans le fichier concerné. C'est pas tout à fait ce que je recherche. J'ai surement dû mal m'exprimer.

De ce fait je ré-explique mon besoin (Attention ça risque d'être indigeste).

Au sein de ma société j'ai un tableau Excel. Il me permet de réaliser un suivi des formations obligatoires.
Pour faire simple dans ce suivi on a le matricule de la personne, son nom + prénom, l'intitulé de la formation, la date de fin de formation et le nom du manager.
L'objectif étant que chaque manager a son propre fichier Excel récapitulatif des différentes formations obligatoires effectuées ou non afin qu'il puisse mieux gérer les demandes de formations de son équipe.

Lorsque j'enregistre, à travers un Userform, une date de fin pour une formation alors le code va s'exécuter ainsi :

ETAPE 1 : Vérifier que le manager à déjà un dossier à son nom. Si pas le cas alors c'est un nouveau manager donc création dossier + Création d'un fichier excel à partir d'un modèle.

ETAPE 2 : Si le dossier manager existait déjà alors le fichier Excel récapitulatif existait aussi déjà. De ce fait le code va l'ouvrir et vérifier si l'employé y existe déjà (Cas ou il avait fait une autre formation) et si la formation en question y existe déjà aussi (Cas ou un autre employé l'a déjà réalisé). Donc en fonction de cela il met à jour les informations ou il les rajoute.


Ces 2 étapes fonctionnent déjà parfaitement. Le problème c'est que les informations contenues dans ces fichiers à destination des managers sont PROPRES à chaque Manager. Il faut donc qu'un mot de passe soit demandé à l'ouverture de leur fichier (Cas où un autre manager serait un peu trop curieux)...
Je dois donc rajouter dans mon code originale en ETAPE 1 (Lorsque le dossier et le fichier du manager n'existe pas encore...) un morceau qui lui dit : OK tu me créés le fichier EXCEL ET tu insères le mot de passe BLABLATEST qui sera demandé à l'utilisateur à l'ouverture du fichier.

La création d'un fichier ne se fait pas à travers la fonction .ADD mais ouvre un modèle puis réalise un SAVECOPYAS.

J'ai déjà la partie du code qui permettra d'envoyer automatiquement un email au manager qui contient le mot de passe.


Il m'est impossible de vous mettre en PJ de ce courriel le dit fichier qui est ultra confidentiel (Ne me demandez pas pourquoi...).

Mais parle plus pur des hasards quelqu'un détiendrait le morceau du code manquant ?

Mille merci !
 

cathodique

XLDnaute Barbatruc
Re : [VBA] Protéger classeur avec MDP à l'ouverture.

Cathodique : Merci celle-là je la connaissais depuis pas mal de temps mais ce n'est pas ce que je recherche...
J'ai répondu d'après ce que j'ai compris.

Il m'est impossible de vous mettre en PJ de ce courriel le dit fichier qui est ultra confidentiel (Ne me demandez pas pourquoi...).
Aucuns soucis à te faire, personne ne fait d’interrogatoire sur ce forum.

Lien supprimé

Un fichier sans données ULTRA CONFIDENTIELLES. Pas simple ta demande sans fichier.
Le problème c'est que les informations contenues dans ces fichiers à destination des managers sont PROPRES à chaque Manager. Il faut donc qu'un mot de passe soit demandé à l'ouverture de leur fichier (Cas où un autre manager serait un peu trop curieux)...
Et si tu envoyé à chaque manager son propre fichier par mail, ça résoudrait le problème de mot de passe, non?
Cordialement,

edit: salut Lone-wolf.
 
Dernière édition:

Mjgreg67

XLDnaute Junior
Re : [VBA] Protéger classeur avec MDP à l'ouverture.

Bonjour Cathodique,

Très bonne proposition mais j'y avais aussi pensé déjà.

Le problème c'est que le manager en question recevrait approximativement 5 emails par jour concernant ce sujet. Il va vite revenir vers moi pour me taper sur les doigts :)

IL est obligé d'avoir la dernière version alors dès que j'enregistre une demande, une modification, une date de fin, une fiche de satisfaction, un cout... Ca lui enverrai un email car il doit être au courant du moindre détail...



Ma solutions finale SI on ne trouve pas ma demande serait :


=> Créer un fichier commun à tous mais cacher toutes les pages sauf celle du menu.
=> Si nouveau manager alors création d'une nouvelle page dans le fichier commun.
=> Si manager connu alors compléter la page existante en fonction de la formation / employé.


=> A l 'ouverture du fichier un Userform s'affiche avec un Pseudo / Mot de passe.

Evidemment à chaque fois que le manager n'est pas connu et qu'une nouvelle page est créée j'alimenterai aussi une base de données pour le pseudo / mot de passe.


Cette solution est pas mal selon moi mais j'ai tellement mis du temps à créé mon code pour le problème explicité ci-dessus que j'ai presque mal au main d'y retoucher ^^
 

Chris24

XLDnaute Impliqué
Re : [VBA] Protéger classeur avec MDP à l'ouverture.

Bonjour

Pour résumer si j'ai bien compris tu veux créer un nouveau classeur et l'enregistrer avec un mot de passe que tu détermines.

essaye d'adapter ce code qui crée un nouveau classeur avec mot de passe

Sub test()
Dim cNom As String
Dim Pwd As String
Dim NewClass As Workbook

cNom = "jojo"
Pwd = "dingo"

Set NewClass = Workbooks.Add

NewClass.SaveAs Filename:=cNom, Password:=Pwd
End Sub


Bonne journée
 

Mjgreg67

XLDnaute Junior
Re : [VBA] Protéger classeur avec MDP à l'ouverture.

Bonjour Chris24,

Merci pour votre variante. Bizarrement cela fonctionne mais uniquement lorsqu'on créé un nouveau fichier (vous utilisez la procédure ADD). Moi j'ouvre un fichier modèle existant et je fais un savecopyas. Du coup le mot de passe que je précise et bien il ne le met à l'ouverture... Bizarre c'est pourtant la même procédure.

Bref j'ai réussi a contourner le problème.

J'ai créé un système de Pseudo / MDP et dès qu'il y a un nouveau manager et il y a un nouveau compte PSEUDO / MDP qui se créé. Ainsi chaque manager à son MDP et son PSEUDO et en fonction de cela le fichier s'affiche ou non...

Merci quand même à tous pour votre aide :)
 

cathodique

XLDnaute Barbatruc
Re : [VBA] Protéger classeur avec MDP à l'ouverture.

Bonjour Mjgreg67,
Moi j'ouvre un fichier modèle existant
Comment ouvres-tu ce fichier modèle?
Si tu fais clic-droit puis ouvrir, dans ce cas tu ouvres bien ton fichier modèle (xlt sous 2003 ou xltx ou xltm sous 2007).
au format xltx, ton fichier est enregistré sans macros.
Mais si tu ouvres en double-cliquant sur ton fichier modèle, là tu ouvres une copie du fichier, pas le fichier lui-même.
Voilà, pour ma petite contribution.
 

Discussions similaires

Réponses
2
Affichages
164

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 182
dernier inscrit
moutassim.amine