Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Protection feuilles classeur

8 réponses
Avatar
Stéphane L
Bonjour,

J'ai créé un classeur contenant 42 feuilles protégées individuellement, ce
classeur étant utilisé par plusieurs personnes, je ne veux pas que ces
personnes puissent en modifier les données (autres que celles autorisées) et
formules. Ce que je voudrait savoir, c'est s'il y a une méthode permettant
de protéger/déprotéger toutes les feuilles en même temps, ayant besoin
d'effectuer assez fréquemment des mises à jour, et c'est très pénible de
devoir protéger/déprotéger les feuilles une à une.
Si vous pouvez m'aider à résoudre ce petit problème, ce serait sympa.
Merci d'avance.




--
Stéphane

8 réponses

Avatar
Patrick BASTARD
Bonjour, *Stéphane L*
J'ai lu ton post 428cc2da$0$19655$
avec le plus grand intéret :

A copier dans un module standard (Alt + F11, insertion, Module)

Sub protege()
Dim Sh As Worksheet
Application.ScreenUpdating = False

For Each Sh In ThisWorkbook.Sheets
Sh.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True

Next Sh
Application.EnableEvents = True
Application.ScreenUpdating = False
End Sub

Sub deprotege()
Dim Sh As Worksheet
Application.ScreenUpdating = False

For Each Sh In ThisWorkbook.Sheets
Sh.Unprotect

Next Sh
Application.EnableEvents = True
Application.ScreenUpdating = False
End Sub


--
Bien cordialement,
P. Bastard


Bonjour,

J'ai créé un classeur contenant 42 feuilles protégées
individuellement, ce classeur étant utilisé par plusieurs personnes,
je ne veux pas que ces personnes puissent en modifier les données
(autres que celles autorisées) et formules. Ce que je voudrait
savoir, c'est s'il y a une méthode permettant de protéger/déprotéger
toutes les feuilles en même temps, ayant besoin d'effectuer assez
fréquemment des mises à jour, et c'est très pénible de devoir
protéger/déprotéger les feuilles une à une.
Si vous pouvez m'aider à résoudre ce petit problème, ce serait sympa.
Merci d'avance.


Avatar
Stéphane L
"Patrick BASTARD" a écrit dans le message de news:
A copier dans un module standard (Alt + F11, insertion, Module)

Sub protege()
Dim Sh As Worksheet
Application.ScreenUpdating = False

For Each Sh In ThisWorkbook.Sheets
Sh.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True

Next Sh
Application.EnableEvents = True
Application.ScreenUpdating = False
End Sub

Sub deprotege()
Dim Sh As Worksheet
Application.ScreenUpdating = False

For Each Sh In ThisWorkbook.Sheets
Sh.Unprotect

Next Sh
Application.EnableEvents = True
Application.ScreenUpdating = False
End Sub


Merci pour ton aide.
J'ai fait comme tu me l'as dit, je l'ai ensuite exécutée, c'est plus rapide
que la méthode basique que j'utilise, mais il faut quand même taper le mot
de passe pour chaque feuille, il n'y a pas de possibilité de taper une seule
fois le MdP pour déprotéger/protéger toutes les feuilles? Ai-je raté quelque
chose? Je précise que je ne suis pas un spécialiste d'Excel...




--
Stéphane

Avatar
Patrick BASTARD
Bonjour, *Stéphane L*

Rajoute ton mot de passe entre parenthèses :
après Scenarios:=True pour protéger
et après Sh.Unprotect pour déprotéger
Et ça devrait le faire, sans taper le mot de passe.


--
Bien cordialement,
P. Bastard

Merci pour ton aide.
J'ai fait comme tu me l'as dit, je l'ai ensuite exécutée, c'est plus
rapide que la méthode basique que j'utilise, mais il faut quand même
taper le mot de passe pour chaque feuille, il n'y a pas de
possibilité de taper une seule fois le MdP pour déprotéger/protéger
toutes les feuilles? Ai-je raté quelque chose? Je précise que je ne
suis pas un spécialiste d'Excel...


Avatar
Stéphane L
J'ai fait comme tu me l'as dit, je l'ai ensuite exécutée
, c'est plus rapide que la méthode basique que j'utilise,
mais il faut quand même taper le mot de passe pour chaque
feuille, il n'y a pas de possibilité de taper une seule
fois le MdP pour déprotéger/protéger toutes les feuilles?
Ai-je raté quelque chose? Je précise que je ne suis pas
un spécialiste d'Excel...


Bon, comme précisé ci-dessus, j'ai dû entré mon MdP pour chaque feuille,
maintenant la protection/déprotection se fait sur toutes les feuilles d'un
seul coup, mais... je n'ai plus besoin de taper de MdP, problème puisque
n'importe qui exécutant la macro peut déprotéger les feuilles sans avoir à
entre de MdP. j'ai fermé le classeur et Excel, en espérant qu'en exécutant
la macro à la réouverture il me serait demandé un MdP, mais non, il suffit
d'exécuter "Proteger" ou "Deproteger" pour réaliser l'opération demandée,
c'est normal?






--
Stéphane

Avatar
anonymousA
bonjour,

une macro ce n'est pas comme l'environnement Excel dans lequel on peut
effacer ce qu'on vient de faire par le bouton Rétablir.

Si tu veux reprotéger toutes feuilles d'un coup, tu fais la manip
inverse de ce qui t'a été indiqué, à savoir

For each sh in thisworkbook.sheets
sh.protect "mot de passe"
next

A+

J'ai fait comme tu me l'as dit, je l'ai ensuite exécutée
, c'est plus rapide que la méthode basique que j'utilise,
mais il faut quand même taper le mot de passe pour chaque
feuille, il n'y a pas de possibilité de taper une seule
fois le MdP pour déprotéger/protéger toutes les feuilles?
Ai-je raté quelque chose? Je précise que je ne suis pas
un spécialiste d'Excel...



Bon, comme précisé ci-dessus, j'ai dû entré mon MdP pour chaque feuille,
maintenant la protection/déprotection se fait sur toutes les feuilles d'un
seul coup, mais... je n'ai plus besoin de taper de MdP, problème puisque
n'importe qui exécutant la macro peut déprotéger les feuilles sans avoir à
entre de MdP. j'ai fermé le classeur et Excel, en espérant qu'en exécutant
la macro à la réouverture il me serait demandé un MdP, mais non, il suffit
d'exécuter "Proteger" ou "Deproteger" pour réaliser l'opération demandée,
c'est normal?









Avatar
Patrick BASTARD
Bonjour, *Stéphane L*
J'ai lu ton post 428cd1b3$0$19655$
avec le plus grand intéret :

D'après 'Dave Peterson, mpep

'Attribute VB_Name = "DemanderMotDePasse"
'demander un mot de passe et limiter le nombre d'essai pour
'fournir le mot de passe correct

Ceci à la place de la sub protège :
--------------------------------------------------------------
Sub TestMotPasse()
Dim okPswd As Boolean
Dim Sh As Worksheet

okPswd = GetPassword("Ton-Mot-De-Passe", 3)
' MsgBox okPswd
If okPswd Then
Application.ScreenUpdating = False

For Each Sh In ThisWorkbook.Sheets
Sh.Unprotect
Next Sh

Else
End If

End Sub
----------------------------------------------------------
Et ceci dans le même module :
----------------------------------------------------------
Function GetPassword(CorrectPswd As String, MaxTimes As Long) As Boolean
'Dave Peterson, mpep
Dim Pswd As String
Dim essais As Long
essais = 1
GetPassword = False
Do
Pswd = InputBox("Essai n°" & essais & " sur " & MaxTimes _
& ". Mot de passe?", _
"Saisie du mot de passe")
If Pswd = "" Then
Exit Function
End If
If Pswd <> CorrectPswd Then
essais = essais + 1
If essais <= MaxTimes Then
MsgBox "Erreur !"
End If
Else
GetPassword = True
'MsgBox "Mot de passe correct !"
Exit Function
End If
Loop Until essais > MaxTimes
End Function
--------------------------------------------------------------------
Cela te convient-il ?



J'ai fait comme tu me l'as dit, je l'ai ensuite exécutée
, c'est plus rapide que la méthode basique que j'utilise,
mais il faut quand même taper le mot de passe pour chaque
feuille, il n'y a pas de possibilité de taper une seule
fois le MdP pour déprotéger/protéger toutes les feuilles?
Ai-je raté quelque chose? Je précise que je ne suis pas
un spécialiste d'Excel...


Bon, comme précisé ci-dessus, j'ai dû entré mon MdP pour chaque
feuille, maintenant la protection/déprotection se fait sur toutes les
feuilles d'un seul coup, mais... je n'ai plus besoin de taper de MdP,
problème puisque n'importe qui exécutant la macro peut déprotéger les
feuilles sans avoir à entre de MdP. j'ai fermé le classeur et Excel,
en espérant qu'en exécutant la macro à la réouverture il me serait
demandé un MdP, mais non, il suffit d'exécuter "Proteger" ou
"Deproteger" pour réaliser l'opération demandée, c'est normal?



Avatar
Stéphane L
"Patrick BASTARD" a écrit dans le message de news:

D'après 'Dave Peterson, mpep

'Attribute VB_Name = "DemanderMotDePasse"
'demander un mot de passe et limiter le nombre
d'essai pour 'fournir le mot de passe correct

Ceci à la place de la sub protège :


Je l'ai mis à la place la sub deprotege. (copie macro utilisé ci-dessous).
Et le résultat est exactement celui que je cherchais.

Sub protege()
Dim Sh As Worksheet
Application.ScreenUpdating = False

For Each Sh In ThisWorkbook.Sheets
Sh.Protect (1234), DrawingObjects:=True, Contents:=True,
Scenarios:=True

Next Sh
Application.EnableEvents = True
Application.ScreenUpdating = False
End Sub

Sub deprotege()
Dim okPswd As Boolean
Dim Sh As Worksheet

okPswd = GetPassword("1234", 3)
' MsgBox okPswd
If okPswd Then
Application.ScreenUpdating = False

For Each Sh In ThisWorkbook.Sheets
Sh.Unprotect (1234)
Next Sh

Else
End If

End Sub

Function GetPassword(CorrectPswd As String, MaxTimes As Long) As Boolean
'Dave Peterson, mpep
Dim Pswd As String
Dim essais As Long
essais = 1
GetPassword = False
Do
Pswd = InputBox("Essai n°" & essais & " sur " & MaxTimes _
& ". Mot de passe?", _
"Saisie du mot de passe")
If Pswd = "" Then
Exit Function
End If
If Pswd <> CorrectPswd Then
essais = essais + 1
If essais <= MaxTimes Then
MsgBox "Erreur !"
End If
Else
GetPassword = True
'MsgBox "Mot de passe correct !"
Exit Function
End If
Loop Until essais > MaxTimes
End Function

---------

Ça te paraît correct?

---------------------------
Cela te convient-il ?


Parfaitement! Un grand, grand merci pour ton aide.






--
Stéphane

Avatar
Patrick BASTARD
Bonjour, *Stéphane L*

Merci à Dave Peterson, et au MPFE, sans lesquels je n'aurais jamais pû te
proposer cette solution.
Et merci à toi du retour.


--
Bien cordialement,
P. Bastard



Je l'ai mis à la place la sub deprotege. (copie macro utilisé
ci-dessous). Et le résultat est exactement celui que je cherchais.

Sub protege()
Dim Sh As Worksheet
Application.ScreenUpdating = False

For Each Sh In ThisWorkbook.Sheets
Sh.Protect (1234), DrawingObjects:=True,
Contents:=True, Scenarios:=True

Next Sh
Application.EnableEvents = True
Application.ScreenUpdating = False
End Sub

Sub deprotege()
Dim okPswd As Boolean
Dim Sh As Worksheet

okPswd = GetPassword("1234", 3)
' MsgBox okPswd
If okPswd Then
Application.ScreenUpdating = False

For Each Sh In ThisWorkbook.Sheets
Sh.Unprotect (1234)
Next Sh

Else
End If

End Sub

Function GetPassword(CorrectPswd As String, MaxTimes As Long) As
Boolean 'Dave Peterson, mpep
Dim Pswd As String
Dim essais As Long
essais = 1
GetPassword = False
Do
Pswd = InputBox("Essai n°" & essais & " sur " & MaxTimes _
& ". Mot de passe?", _
"Saisie du mot de passe")
If Pswd = "" Then
Exit Function
End If
If Pswd <> CorrectPswd Then
essais = essais + 1
If essais <= MaxTimes Then
MsgBox "Erreur !"
End If
Else
GetPassword = True
'MsgBox "Mot de passe correct !"
Exit Function
End If
Loop Until essais > MaxTimes
End Function

---------

Ça te paraît correct?

---------------------------
Cela te convient-il ?


Parfaitement! Un grand, grand merci pour ton aide.