Problème avec protection feuilles

aredo

XLDnaute Occasionnel
bonjour,

J'ai un projet en vba qui contient une centaine de feuilles protégées avec le même mot de passe, seules trois avec un MdP différent.
Sur ces 100 feuilles, j'interviens souvent, une macro me permet de déprotéger et reprotéger ces feuilles(usf5). Le problème est survenu lors du changement de mot de passe, il m'a fallu changer manuellement le MdP sur ces 100 feuilles pour que le code soit validé. Ne peut-on pas changer le code pour que je n'ai plus à faire cette manip très longue?
Voici le fichier
Cijoint.fr - Service gratuit de dépôt de fichiers
Nom fred
MdP aredo
MdP vba aredo
merci au fofo bon wkend
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Problème avec protection feuilles

Bonjour Aredo :),
Si j'ai bien compris les questions :confused:, pour automatiser toutes tes macros en protection/déprotection, le plus simple est de passer par la déclaration d'une constante
Code:
Public Const MdP  As String = "MdP"
Sub Test()
ActiveSheet.Unprotect MdP
'...
ActiveSheet.Protect MdP
End Sub
Pour changer massivement le mot de passe d'une centaine de feuille sans toucher celles dont le mot de passe est différent ou non protégées
Code:
Sub ChangementMassifMdP()
Dim AncienMdP As String, NouveauMdP As String
Dim Feuille As Worksheet
AncienMdP = InputBox("Ancien mot de passe ?")
NouveauMdP = InputBox("Nouveau mot de passe ?")
For Each Feuille In ThisWorkbook.Worksheets
On Error GoTo Passe
If Feuille.ProtectContents = True Then
Feuille.Unprotect AncienMdP
Feuille.Protect NouveauMdP
End If
On Error GoTo 0
Passe:
Next
End Sub
que tu peux bien sûr transférer dans un USF pour masquer les caractères. A ce propos, j'ai vu que tu utilisais des caractères type dingbats pour masquer le MdP, le plus simple est de renseigner la propriété PasswordChar avec "*" dans les propriété du TextBox.
Bon WE :cool:
 

aredo

XLDnaute Occasionnel
Re : Problème avec protection feuilles

salut JNP,

Je suis novice en vba, le projet de gestion de stock a été réalisé par
Jp14, matthieu33 et brunoM45 et le fofo. Petit à petit le code a pris de l'importance...
Bref, ton idée me séduit, mais j'aimerai, si tu peux, l'intégrer au code existant, tout en sachant que la macro "protège/déprotège est ds l'usf5, et que ds thisworkbook, le fichier quitte en reprotègeant les feuilles.
Egalement, comment fais-tu pour renseigner la propriété PasswordChar? Je ne vois pas où changer ds l'usf user.
Excuses mon ignorance, mais pour qqu'un qui n'a pas baigné dedans, c'est parfois dur dur! Mais petit à petit, on apprend et c'est grâce à des personnes comme toi, dont le mérite n'est plus à démontrer.
Sincèrement, j'espère que tu pourras satisfaire ma demande.
De mon côté, je vais essayer, mais ds ce code où tout se tient, les erreurs sont fréquentes.
En attendant merci encore.
@+
 

JNP

XLDnaute Barbatruc
Re : Problème avec protection feuilles

Re :),
Bref, ton idée me séduit, mais j'aimerai, si tu peux, l'intégrer au code existant, tout en sachant que la macro "protège/déprotège est ds l'usf5, et que ds thisworkbook, le fichier quitte en reprotègeant les feuilles.
Code:
Changer
Code:
[COLOR=blue]Sheets(intWS).Unprotect Password:="guy"[/COLOR]
[COLOR=blue]par[/COLOR]
[COLOR=blue]Sheets(intWS).Unprotect Password:=MdP[/COLOR]
et
Code:
Sheets(intWS).Protect Password:="guy", DrawingObjects:=True, Contents:=True, Scenarios:=True
Code:
[COLOR=blue]par[/COLOR]
[COLOR=blue]Sheets(intWS).Protect Password:=MdP, DrawingObjects:=True, Contents:=True, Scenarios:=True[/COLOR]
avec
Code:
Public Const MdP  As String = "Guy"
dans un module en dehors d'une Sub, même combat dans ThisWorkbook.

Egalement, comment fais-tu pour renseigner la propriété PasswordChar? Je ne vois pas où changer ds l'usf user.
jnp-albums-images-jnp-picture691-password.jpg
Bon courage :cool:
 

aredo

XLDnaute Occasionnel
Re : Problème avec protection feuilles

Re,

Cà paraît simple, en effet! Malgré tout, un bug subsiste.
Il prend en compte le Mdp sur la feuille sélectionnée, mais pas sur les autres feuilles. Lors de la déprotection ,il met erreur 1004, L'ancien mot de passe est resté sur la feuille non sélectionnée. Ds mon fichier les feuilles concernées 6432 et 6942-5 !
peut-être dois-je appliquer ta seconde méthode? Qu'en penses-tu?
@+
 

JNP

XLDnaute Barbatruc
Re : Problème avec protection feuilles

Re :),
Voici le code commenté, tu comprendras mieux la méthode
Code:
Sub ChangementMassifMdP()
Dim AncienMdP As String, NouveauMdP As String ' Déclaration des variables pour les MdP
Dim Feuille As Worksheet ' Déclaration d'un objet Sheets
AncienMdP = InputBox("Ancien mot de passe ?") ' Entrée de l'ancien MdP
NouveauMdP = InputBox("Nouveau mot de passe ?") ' Entrée du nouveau MdP
For Each Feuille In ThisWorkbook.Worksheets ' Pour chaque feuille du classeur
On Error GoTo Passe ' Si le MdP est mauvais, à la place d'afficher l'erreur, je saute à Passe:
If Feuille.ProtectContents = True Then ' Si la feuille est protégée
Feuille.Unprotect AncienMdP ' Je la déprotège ou génère une erreur si le MdP n'est pas bon
Feuille.Protect NouveauMdP ' Je reprotège avec le nouveau MdP
End If ' Fin du test
On Error GoTo 0 ' Fin de la gestion d'erreur
Passe: ' J'ai sauté la déprotection/protection pour les MdP différents
Next ' Feuille suivante
End Sub
Bon courage :cool:
 

aredo

XLDnaute Occasionnel
Re : Problème avec protection feuilles

Salut JNP,

Merci encore pour cette clarté. Mais, je ne suis pas arrivé à l'intégrer ds mon code. Je le mets où? S'il fonctionne, je suppose qu'à chaque chgt de MdP, je devrais changer les mots de passe ds usf5(macro de protection et déprotection des feuilles) et ds thisworkbook.
Où alors, je n'ai pas tout saisi.
Excuses encore ma naïveté... On va y arriver, j'espère.
@+
 

JNP

XLDnaute Barbatruc
Re : Problème avec protection feuilles

Re :),
Ce n'est pas une question de naiveté, mais plus de compréhension...
Ta demande était de changer le MdP de 100 feuilles. Ma macro permet (déclenchement par F5 en étant cliqué dessus) de modifier le MdP "toto" sur toutes les feuilles protégées par "toto" par "tata" par exemple.
D'un autre côté, pour faire appel à un MdP commun, je te conseillais de rentrer le MdP dans une constante
Code:
Public Const MdP  As String = "Guy"
puis de faire appel à cette constante quand tu as besoin
Code:
Sheets("Feuil1").UnProtect MdP
ou
Code:
Sheets("Feuil1").Protect MdP
ce qui t'évite de modifier le MdP partout...
Est-ce plus clair ?
A + :cool:
 

aredo

XLDnaute Occasionnel
Re : Problème avec protection feuilles

Salut JNP

Merci pour ta patience.
J'ai fait plusieurs tests et il bloque:

http://img82.imageshack.us/i/code1i.gif/

J'ai rajouté ce code sans changer le code existant.
En vois-tu la cause?
bonne journée

Apparemment, si je déprotège les feuilles manuellement au départ, les macros ont l'air de fonctionner par la suite. Il me semble qu'au départ, elles ont toutes été protégé manuellement.
Sinon , çà bug. J'essaie de valider au boulot.
@+
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Problème avec protection feuilles

Re :),
Il faudrait que tu repostes ton fichier dans l'état actuel des macros pour qu'on puisse le tester. Sinon, de base, si le mot de passe est mauvais, ça produit le message que tu cites, d'où ma gestion d'erreur sur les modifications massives.
Bon courage :cool:
 

aredo

XLDnaute Occasionnel
Re : Problème avec protection feuilles

Bonsoir JNP,

Voici mon fichier, j'ai enlevé le code Sub ChangementMassifMdP()


Nom fred
MdP aredo
- Toutes les feuilles ont le même MdP guy(ce sont ces feuilles que j'aimerai changer sans être obligé d'enlever la protection manuellement), sauf les feuilles "historiq et users MdP aredo
La feuille connexion ne possède pas de mot de passe. J'ai fait apparaître volontairement les feuilles "users et connexion" qui ne sont pas visibles en temps normal.
Merci pour les tests.
à bientôt

Apparemment, il change les MdP sur ttes les feuilles sauf "reference et stock"
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Problème avec protection feuilles

Re :),
Le problème, à mon avis, se situe dans la clarté de tes protections/déprotections dans tes macros, ce qui fait qu'un simple plantage laisse une feuille dans le mauvais état, et qu'on ne sait plus où on en est dans le fichier. Le plus simple serait d'utiliser 2 fonctions type
Code:
Function Protège(NomFeuille As String)
Dim MdP As String
Select Case NomFeuille
Case "historiq", "users"
MdP = "aredo"
Case Else
MdP = "guy"
End Select
Sheets(NomFeuille).Protect
End Function
 
Function Déprotège(NomFeuille As String)
Dim MdP As String
Select Case NomFeuille
Case "historiq", "users"
MdP = "aredo"
Case Else
MdP = "guy"
End Select
Sheets(NomFeuille).Unprotect
End Function
et de les appeler dans ton code en fonction des besoins, par exemple
Code:
Call Protège("users")
Une fois que tu as un fichier propre, la macro massive fonctionnera et il te suffira de modifier seulement les 2 fonctions pour être tranquille.
Bon courage :cool:
 

JNP

XLDnaute Barbatruc
Re : Problème avec protection feuilles

Re :),
Dans tout ton code, par exemple
Code:
[COLOR=#0000ff]Sheets(intWS).Unprotect Password:="guy"[/COLOR]
sera remplacé par
Code:
[COLOR=#0000ff]Call Déprotège(intWS)[/COLOR]
Bon courage :cool:
 

Discussions similaires

Statistiques des forums

Discussions
312 587
Messages
2 090 009
Membres
104 344
dernier inscrit
nesrine