OVH Cloud OVH Cloud

Remettre Protection à la fermeture du fichier

4 réponses
Avatar
Caroline L.
Allo à vous !

Je désire créer une macro mais j'ignore comment l'écrire en VBA, voici le
cas :
À la fermeture du fichier, si la protection du classeur n'est pas activée,
la boîte dialogue "Protéger le classeur" s'ouvre. Il serait impossible de
fermer le classeur à moins d'entrer le mot de passe de la protection.
Si la protection est activée, le fichier se ferme normalement.

Merci de m'aider
Bonne soirée

4 réponses

Avatar
anonymousA
Bonsoir,

voilà ce que je peux te proposer. Amettre dans le module thisworkbook du
projet VBA de ton classeur.Cette procédure teste aussi si l'utilisateur n'a
rien rentré dasn la boite de dialogue " protéger le classeur".
par défaut j'ai fait le test sur la protection de la structure du classeur.
A adapter donc si tu permets les fenêtres et/ou la structure.


Private Sub Workbook_BeforeClose(Cancel As Boolean)

On Error GoTo errhandler

Application.CommandBars("Worksheet Menu
Bar").Controls("&Outils").Controls("Prot&ection").Controls("Protéger le
&classeur...").Execute

ThisWorkbook.Unprotect ""

If ThisWorkbook.ProtectStructure = False Then
MsgBox "Vous devez proteger ce classeur avant fermeture"
Cancel = True
End If

errhandler:

End Sub

A+ si tu as besoin.

"Caroline L." a écrit dans le message de news:
B_CFd.7311$
Allo à vous !

Je désire créer une macro mais j'ignore comment l'écrire en VBA, voici le
cas :
À la fermeture du fichier, si la protection du classeur n'est pas activée,
la boîte dialogue "Protéger le classeur" s'ouvre. Il serait impossible de
fermer le classeur à moins d'entrer le mot de passe de la protection.
Si la protection est activée, le fichier se ferme normalement.

Merci de m'aider
Bonne soirée




Avatar
Caroline L.
Bonsoir,
d'abord merci de m'aider.
J'ai fait le test avec ta procédure et le message suivant apparaît: Erreur
de compilation, erreur de syntaxe à la ligne suivante :
Application.CommandBars("Worksheet Menu

Mais en faisant d'autres tests, je me suis rendu compte que j'ai confondu
"Protéger le classeur" avec "Protéger la feuille". En fait, les 2 options
me seraient utiles. Le problème c'est que mon classeur contient plusieurs
feuilles. Est-il possible que la procédure vérifie toutes les feuilles et
que s'il y a une ou plusieurs feuilles sans protection, que le programme
"force" l'utilisateur à remettre le mot de passe.

J'espère que je suis claire... si tu as besoin de précisions, n'hésite pas.
merci. :o)


"anonymousA" a écrit dans le message de news:
41e71f40$0$25809$
Bonsoir,

voilà ce que je peux te proposer. Amettre dans le module thisworkbook du
projet VBA de ton classeur.Cette procédure teste aussi si l'utilisateur
n'a

rien rentré dasn la boite de dialogue " protéger le classeur".
par défaut j'ai fait le test sur la protection de la structure du
classeur.

A adapter donc si tu permets les fenêtres et/ou la structure.


Private Sub Workbook_BeforeClose(Cancel As Boolean)

On Error GoTo errhandler

Application.CommandBars("Worksheet Menu
Bar").Controls("&Outils").Controls("Prot&ection").Controls("Protéger le
&classeur...").Execute

ThisWorkbook.Unprotect ""

If ThisWorkbook.ProtectStructure = False Then
MsgBox "Vous devez proteger ce classeur avant fermeture"
Cancel = True
End If

errhandler:

End Sub

A+ si tu as besoin.

"Caroline L." a écrit dans le message de news:
B_CFd.7311$
Allo à vous !

Je désire créer une macro mais j'ignore comment l'écrire en VBA, voici
le


cas :
À la fermeture du fichier, si la protection du classeur n'est pas
activée,


la boîte dialogue "Protéger le classeur" s'ouvre. Il serait impossible
de


fermer le classeur à moins d'entrer le mot de passe de la protection.
Si la protection est activée, le fichier se ferme normalement.

Merci de m'aider
Bonne soirée








Avatar
anomymousA
bonjour,

Bon pour l'erreur, il s'agit peut-être soit d'une erreur de frappe ou de
recopie ou de texte.Ca marche at home anyway
Enfin, je te propose 2 autres types d'instruction ( l'une avec le N° du
commandbar et l'autre avec FindControl du N° d'ID des boites de dialogue: tu
choisis l'une ou l'autre mais pas les 2 lignes en même temps).
Par ailleurs, j'ai modifiié la procédure pour tenir compte de ta demande
pour les feuilles

Private Sub Workbook_BeforeClose(Cancel As Boolean)

On Error GoTo errhandler

'cest ici que tu fois choisir l'une ou l'autre des 2 instructins suivantes
Application.CommandBars(1).Controls("&Outils").Controls("Prot&ection").Controls("Protéger le &classeur...").Execute
Application.CommandBars.FindControl(ID:‰4).Execute

ThisWorkbook.Unprotect ""

If ThisWorkbook.ProtectStructure = False Then
MsgBox "Vous devez proteger ce classeur avant fermeture"
Cancel = True
End If

For I = 1 To Sheets.Count
If Sheets(I).ProtectContents = False Then
Sheets(I).Activate
Application.CommandBars.FindControl(ID:‰3).Execute
End If
Next

On Error Resume Next
For I = 1 To Sheets.Count
Sheets(I).Activate
ActiveSheet.Unprotect ""
If Err.Number <> 0 Then
MsgBox "Vous devez proteger les feuilles. Au moins l'une d'entre elles
pose un problème"
Cancel = True
Exit Sub
End If
Next

errhandler:

End Sub

A+


Bonsoir,
d'abord merci de m'aider.
J'ai fait le test avec ta procédure et le message suivant apparaît: Erreur
de compilation, erreur de syntaxe à la ligne suivante :
Application.CommandBars("Worksheet Menu

Mais en faisant d'autres tests, je me suis rendu compte que j'ai confondu
"Protéger le classeur" avec "Protéger la feuille". En fait, les 2 options
me seraient utiles. Le problème c'est que mon classeur contient plusieurs
feuilles. Est-il possible que la procédure vérifie toutes les feuilles et
que s'il y a une ou plusieurs feuilles sans protection, que le programme
"force" l'utilisateur à remettre le mot de passe.

J'espère que je suis claire... si tu as besoin de précisions, n'hésite pas.
merci. :o)


"anonymousA" a écrit dans le message de news:
41e71f40$0$25809$
Bonsoir,

voilà ce que je peux te proposer. Amettre dans le module thisworkbook du
projet VBA de ton classeur.Cette procédure teste aussi si l'utilisateur
n'a

rien rentré dasn la boite de dialogue " protéger le classeur".
par défaut j'ai fait le test sur la protection de la structure du
classeur.

A adapter donc si tu permets les fenêtres et/ou la structure.


Private Sub Workbook_BeforeClose(Cancel As Boolean)

On Error GoTo errhandler

Application.CommandBars("Worksheet Menu
Bar").Controls("&Outils").Controls("Prot&ection").Controls("Protéger le
&classeur...").Execute

ThisWorkbook.Unprotect ""

If ThisWorkbook.ProtectStructure = False Then
MsgBox "Vous devez proteger ce classeur avant fermeture"
Cancel = True
End If

errhandler:

End Sub

A+ si tu as besoin.

"Caroline L." a écrit dans le message de news:
B_CFd.7311$
Allo à vous !

Je désire créer une macro mais j'ignore comment l'écrire en VBA, voici
le


cas :
À la fermeture du fichier, si la protection du classeur n'est pas
activée,


la boîte dialogue "Protéger le classeur" s'ouvre. Il serait impossible
de


fermer le classeur à moins d'entrer le mot de passe de la protection.
Si la protection est activée, le fichier se ferme normalement.

Merci de m'aider
Bonne soirée













Avatar
Caroline L.
Re-bonjour AnomymousA,

Présentement il m'est impossible de tester les nouvelles instructions mais
je vais le faire aussitôt que possible. Merci beaucoup pour toute l'aide
apportée.

Bonne fin de journée


"anomymousA" a écrit dans le message
de news:
bonjour,

Bon pour l'erreur, il s'agit peut-être soit d'une erreur de frappe ou de
recopie ou de texte.Ca marche at home anyway
Enfin, je te propose 2 autres types d'instruction ( l'une avec le N° du
commandbar et l'autre avec FindControl du N° d'ID des boites de dialogue:
tu

choisis l'une ou l'autre mais pas les 2 lignes en même temps).
Par ailleurs, j'ai modifiié la procédure pour tenir compte de ta demande
pour les feuilles

Private Sub Workbook_BeforeClose(Cancel As Boolean)

On Error GoTo errhandler

'cest ici que tu fois choisir l'une ou l'autre des 2 instructins suivantes

Application.CommandBars(1).Controls("&Outils").Controls("Prot&ection").Contr

ols("Protéger le &classeur...").Execute
Application.CommandBars.FindControl(ID:‰4).Execute

ThisWorkbook.Unprotect ""

If ThisWorkbook.ProtectStructure = False Then
MsgBox "Vous devez proteger ce classeur avant fermeture"
Cancel = True
End If

For I = 1 To Sheets.Count
If Sheets(I).ProtectContents = False Then
Sheets(I).Activate
Application.CommandBars.FindControl(ID:‰3).Execute
End If
Next

On Error Resume Next
For I = 1 To Sheets.Count
Sheets(I).Activate
ActiveSheet.Unprotect ""
If Err.Number <> 0 Then
MsgBox "Vous devez proteger les feuilles. Au moins l'une d'entre elles
pose un problème"
Cancel = True
Exit Sub
End If
Next

errhandler:

End Sub

A+


Bonsoir,
d'abord merci de m'aider.
J'ai fait le test avec ta procédure et le message suivant apparaît:
Erreur


de compilation, erreur de syntaxe à la ligne suivante :
Application.CommandBars("Worksheet Menu

Mais en faisant d'autres tests, je me suis rendu compte que j'ai
confondu


"Protéger le classeur" avec "Protéger la feuille". En fait, les 2
options


me seraient utiles. Le problème c'est que mon classeur contient
plusieurs


feuilles. Est-il possible que la procédure vérifie toutes les feuilles
et


que s'il y a une ou plusieurs feuilles sans protection, que le programme
"force" l'utilisateur à remettre le mot de passe.

J'espère que je suis claire... si tu as besoin de précisions, n'hésite
pas.


merci. :o)


"anonymousA" a écrit dans le message de news:
41e71f40$0$25809$
Bonsoir,

voilà ce que je peux te proposer. Amettre dans le module thisworkbook
du



projet VBA de ton classeur.Cette procédure teste aussi si
l'utilisateur



n'a
rien rentré dasn la boite de dialogue " protéger le classeur".
par défaut j'ai fait le test sur la protection de la structure du
classeur.

A adapter donc si tu permets les fenêtres et/ou la structure.


Private Sub Workbook_BeforeClose(Cancel As Boolean)

On Error GoTo errhandler

Application.CommandBars("Worksheet Menu
Bar").Controls("&Outils").Controls("Prot&ection").Controls("Protéger
le



&classeur...").Execute

ThisWorkbook.Unprotect ""

If ThisWorkbook.ProtectStructure = False Then
MsgBox "Vous devez proteger ce classeur avant fermeture"
Cancel = True
End If

errhandler:

End Sub

A+ si tu as besoin.

"Caroline L." a écrit dans le message de news:
B_CFd.7311$
Allo à vous !

Je désire créer une macro mais j'ignore comment l'écrire en VBA,
voici




le
cas :
À la fermeture du fichier, si la protection du classeur n'est pas
activée,


la boîte dialogue "Protéger le classeur" s'ouvre. Il serait
impossible




de
fermer le classeur à moins d'entrer le mot de passe de la
protection.




Si la protection est activée, le fichier se ferme normalement.

Merci de m'aider
Bonne soirée