OVH Cloud OVH Cloud

Ajuster une macro

12 réponses
Avatar
Caroline L.
Bonjour à tous !

Au bas, voici une macro sur laquelle je dois faire des petits ajustements
mais je n'y arrive pas. Juste vous dire que le but de celle-ci est qu'à la
fermeture d'un classeur, l'utilisateur est forcer de remettre la protection
sur les feuilles et de protéger le classeur (tout ça avec un mot de passe).
La macro est presque à point, mais : au départ, il n'est pas nécessaire que
la boîte "Ôter la protection du classeur" s'ouvre... il serait bien que
seulement si la protection du classeur n'est pas activé, là d'accord une
boîte "Protéger le classeur" s'ouvre. (en ce moment, le programme demande
toujours d'ôter la protection et de remettre la protection, etc.)
Dernière petite chose, lorsque j'ouvre le classeur, la fenêtre du classeur
ne contient plus les barres de défilement verticales et je ne peux plus
"déplacer" cette fenêtre en "clique-glisse sur le bleu du haut". Pour
résoudre ces 2 problèmes, j'enlève la protection du classeur, et tout se
replace. Bizarre ??

Merci pour votre aide
Caroline



Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
On Error Resume Next

ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:=894).Execute
ThisWorkbook.Unprotect ""
Loop

Err.Clear

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

10 réponses

1 2
Avatar
anonymousA
bonjour,

pour la 1ere question, le Thisworkbook.unprotect "" est là pour tester si le
classeur n'a pas été protégé par un chaine vide,ce qui rendrait de facto la
protection bien faible et le on error qui précede est la pour éviter dans ce
test que si jamais il y a déjà une protection de classeur , le programme ne
se plante.
Ensuite il est à nouveau répété dans la procédure pour les mêmes raisons.

Par ailleurs, le programme d'envoi automatique de la fenêtre de dialogue de
la protcetion du classeur ,une fois son 1er test Thisworkbook.unprotect ""
réalisé, ne se déclenche QUE si vraiment il n'y a pas de protection de
classeur. Je viens de refaire l'essai.

Enfin, pour éviter eventuellement que l'utilisateur ne puisse fermer le
classeur, il faudrait rajouter un Application.EnableCancelKey=xlDisabled en
début de macro et un Application.EnableCancelKey =xlInterrupt à la fin mais
c'est à manier avec précaution.

Pour la 2eme question , je ne vois pas, enableselections ou scrollarea
peut-être.

A+


Bonjour à tous !

Au bas, voici une macro sur laquelle je dois faire des petits ajustements
mais je n'y arrive pas. Juste vous dire que le but de celle-ci est qu'à la
fermeture d'un classeur, l'utilisateur est forcer de remettre la protection
sur les feuilles et de protéger le classeur (tout ça avec un mot de passe).
La macro est presque à point, mais : au départ, il n'est pas nécessaire que
la boîte "Ôter la protection du classeur" s'ouvre... il serait bien que
seulement si la protection du classeur n'est pas activé, là d'accord une
boîte "Protéger le classeur" s'ouvre. (en ce moment, le programme demande
toujours d'ôter la protection et de remettre la protection, etc.)
Dernière petite chose, lorsque j'ouvre le classeur, la fenêtre du classeur
ne contient plus les barres de défilement verticales et je ne peux plus
"déplacer" cette fenêtre en "clique-glisse sur le bleu du haut". Pour
résoudre ces 2 problèmes, j'enlève la protection du classeur, et tout se
replace. Bizarre ??

Merci pour votre aide
Caroline



Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
On Error Resume Next

ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:‰4).Execute
ThisWorkbook.Unprotect ""
Loop

Err.Clear

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





Avatar
Oliv'
Bonsoir,
Essaye ce code
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
'On Error Resume Next
For I = 1 To Sheets.Count
toto = Sheets(I).ProtectContents
Do While Sheets(I).ProtectContents = False

Sheets(I).Activate
nom = ActiveSheet.Name
MsgBox "Vous devez proteger cette feuille avant fermeture" & nom
Application.CommandBars.FindControl(ID:‰3).Execute
Loop
Next
'ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:‰4).Execute
'ThisWorkbook.Unprotect ""
Loop

Err.Clear

End Sub

2) le classeur est figé car protégé.

Pourquoi ne protège tu pas toi même les feuilles avec ta macro ?
les utilisateurs doivent t'ils saisir un mot de passe ?

Oliv'

"Caroline L." a écrit dans le message de news:
xx_Xd.22260$
Bonjour à tous !

Au bas, voici une macro sur laquelle je dois faire des petits ajustements
mais je n'y arrive pas. Juste vous dire que le but de celle-ci est qu'à la
fermeture d'un classeur, l'utilisateur est forcer de remettre la protection
sur les feuilles et de protéger le classeur (tout ça avec un mot de passe).
La macro est presque à point, mais : au départ, il n'est pas nécessaire que
la boîte "Ôter la protection du classeur" s'ouvre... il serait bien que
seulement si la protection du classeur n'est pas activé, là d'accord une
boîte "Protéger le classeur" s'ouvre. (en ce moment, le programme demande
toujours d'ôter la protection et de remettre la protection, etc.)
Dernière petite chose, lorsque j'ouvre le classeur, la fenêtre du classeur
ne contient plus les barres de défilement verticales et je ne peux plus
"déplacer" cette fenêtre en "clique-glisse sur le bleu du haut". Pour
résoudre ces 2 problèmes, j'enlève la protection du classeur, et tout se
replace. Bizarre ??

Merci pour votre aide
Caroline



Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
On Error Resume Next

ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:‰4).Execute
ThisWorkbook.Unprotect ""
Loop

Err.Clear

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

OK, merci pour tes explications.
J'ai refait des tests et tout ce passe bien.

Lorsqu'Excel demande d'entrer le mot de passe, il est FACULTATIF.
Existe-t-il un moyen d'éviter ce choix ? Il est très important pour mon cas
que la protection soit avec mot de passe.

Pour la 2e question : je sais maintenant. C'est que dans la
boîte "Protéger le classeur", dans Éléments à protéger, je cochais parfois
Fenêtres.

Merci :o)


Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
On Error Resume Next

-------- > '? ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:‰4).Execute
----------> '?ThisWorkbook.Unprotect ""
Loop

Err.Clear

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


For I = 1 To Sheets.Count
Err.Clear
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

ActiveWorkbook.Save

End Sub





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

pour la 1ere question, le Thisworkbook.unprotect "" est là pour tester si
le

classeur n'a pas été protégé par un chaine vide,ce qui rendrait de facto
la

protection bien faible et le on error qui précede est la pour éviter dans
ce

test que si jamais il y a déjà une protection de classeur , le programme
ne

se plante.
Ensuite il est à nouveau répété dans la procédure pour les mêmes raisons.

Par ailleurs, le programme d'envoi automatique de la fenêtre de dialogue
de

la protcetion du classeur ,une fois son 1er test Thisworkbook.unprotect ""
réalisé, ne se déclenche QUE si vraiment il n'y a pas de protection de
classeur. Je viens de refaire l'essai.

Enfin, pour éviter eventuellement que l'utilisateur ne puisse fermer le
classeur, il faudrait rajouter un Application.EnableCancelKey=xlDisabled
en

début de macro et un Application.EnableCancelKey =xlInterrupt à la fin
mais

c'est à manier avec précaution.

Pour la 2eme question , je ne vois pas, enableselections ou scrollarea
peut-être.

A+


Bonjour à tous !

Au bas, voici une macro sur laquelle je dois faire des petits
ajustements


mais je n'y arrive pas. Juste vous dire que le but de celle-ci est qu'à
la


fermeture d'un classeur, l'utilisateur est forcer de remettre la
protection


sur les feuilles et de protéger le classeur (tout ça avec un mot de
passe).


La macro est presque à point, mais : au départ, il n'est pas nécessaire
que


la boîte "Ôter la protection du classeur" s'ouvre... il serait bien que
seulement si la protection du classeur n'est pas activé, là d'accord une
boîte "Protéger le classeur" s'ouvre. (en ce moment, le programme
demande


toujours d'ôter la protection et de remettre la protection, etc.)
Dernière petite chose, lorsque j'ouvre le classeur, la fenêtre du
classeur


ne contient plus les barres de défilement verticales et je ne peux plus
"déplacer" cette fenêtre en "clique-glisse sur le bleu du haut". Pour
résoudre ces 2 problèmes, j'enlève la protection du classeur, et tout se
replace. Bizarre ??

Merci pour votre aide
Caroline



Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
On Error Resume Next

ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:‰4).Execute
ThisWorkbook.Unprotect ""
Loop

Err.Clear

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







Avatar
anonymousA
bonjour,

si tu supprimes le thisworkbook.unprotect "" , comment geres-tu le fait
que la chaine vide ait pu être choisie par l'utilisateur comme mdp, ce
qui , reconnaissons le , est quand même plus que faiblard comme protection.
De +, quel est l'interet de la variable toto qui recoit d'ailleurs false
ou true ?


A+

Bonsoir,
Essaye ce code
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
'On Error Resume Next
For I = 1 To Sheets.Count
toto = Sheets(I).ProtectContents
Do While Sheets(I).ProtectContents = False

Sheets(I).Activate
nom = ActiveSheet.Name
MsgBox "Vous devez proteger cette feuille avant fermeture" & nom
Application.CommandBars.FindControl(ID:‰3).Execute
Loop
Next
'ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:‰4).Execute
'ThisWorkbook.Unprotect ""
Loop

Err.Clear

End Sub

2) le classeur est figé car protégé.

Pourquoi ne protège tu pas toi même les feuilles avec ta macro ?
les utilisateurs doivent t'ils saisir un mot de passe ?

Oliv'

"Caroline L." a écrit dans le message de news:
xx_Xd.22260$
Bonjour à tous !

Au bas, voici une macro sur laquelle je dois faire des petits ajustements
mais je n'y arrive pas. Juste vous dire que le but de celle-ci est qu'à la
fermeture d'un classeur, l'utilisateur est forcer de remettre la protection
sur les feuilles et de protéger le classeur (tout ça avec un mot de passe).
La macro est presque à point, mais : au départ, il n'est pas nécessaire que
la boîte "Ôter la protection du classeur" s'ouvre... il serait bien que
seulement si la protection du classeur n'est pas activé, là d'accord une
boîte "Protéger le classeur" s'ouvre. (en ce moment, le programme demande
toujours d'ôter la protection et de remettre la protection, etc.)
Dernière petite chose, lorsque j'ouvre le classeur, la fenêtre du classeur
ne contient plus les barres de défilement verticales et je ne peux plus
"déplacer" cette fenêtre en "clique-glisse sur le bleu du haut". Pour
résoudre ces 2 problèmes, j'enlève la protection du classeur, et tout se
replace. Bizarre ??

Merci pour votre aide
Caroline



Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
On Error Resume Next

ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:‰4).Execute
ThisWorkbook.Unprotect ""
Loop

Err.Clear

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





Avatar
anonymousA
ben, dans la proc que je te communique, le mdp N'EST PAS FACULTATIF.
c'est même tout l'objet de thisworkbook.unprotect "" de le verifer et en
conséquence il ne faut surtout pas l'enlever, ce que j'ai tenté de
t'expliquer dans mon précédent POST.
En effet,si l'utilisateur a rentré une chaine vide, le unprotect "" est
l'équivalence de la déprotection du classeur et de fait
.Protectstructures devient false donc on rentre dans la boucle ou on
n'en sort pas tant que l'utilisateur n'a pas rentré un mdp différent
d'une chaine vide.

A+

Allo anonymousA,

OK, merci pour tes explications.
J'ai refait des tests et tout ce passe bien.

Lorsqu'Excel demande d'entrer le mot de passe, il est FACULTATIF.
Existe-t-il un moyen d'éviter ce choix ? Il est très important pour mon cas
que la protection soit avec mot de passe.

Pour la 2e question : je sais maintenant. C'est que dans la
boîte "Protéger le classeur", dans Éléments à protéger, je cochais parfois
Fenêtres.

Merci :o)


Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
On Error Resume Next

-------- > '? ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:‰4).Execute
----------> '?ThisWorkbook.Unprotect ""
Loop

Err.Clear

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


For I = 1 To Sheets.Count
Err.Clear
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

ActiveWorkbook.Save

End Sub





"anonymousA" a écrit dans le message
de news:

bonjour,

pour la 1ere question, le Thisworkbook.unprotect "" est là pour tester si


le

classeur n'a pas été protégé par un chaine vide,ce qui rendrait de facto


la

protection bien faible et le on error qui précede est la pour éviter dans


ce

test que si jamais il y a déjà une protection de classeur , le programme


ne

se plante.
Ensuite il est à nouveau répété dans la procédure pour les mêmes raisons.

Par ailleurs, le programme d'envoi automatique de la fenêtre de dialogue


de

la protcetion du classeur ,une fois son 1er test Thisworkbook.unprotect ""
réalisé, ne se déclenche QUE si vraiment il n'y a pas de protection de
classeur. Je viens de refaire l'essai.

Enfin, pour éviter eventuellement que l'utilisateur ne puisse fermer le
classeur, il faudrait rajouter un Application.EnableCancelKey=xlDisabled


en

début de macro et un Application.EnableCancelKey =xlInterrupt à la fin


mais

c'est à manier avec précaution.

Pour la 2eme question , je ne vois pas, enableselections ou scrollarea
peut-être.

A+



Bonjour à tous !

Au bas, voici une macro sur laquelle je dois faire des petits



ajustements

mais je n'y arrive pas. Juste vous dire que le but de celle-ci est qu'à



la

fermeture d'un classeur, l'utilisateur est forcer de remettre la



protection

sur les feuilles et de protéger le classeur (tout ça avec un mot de



passe).

La macro est presque à point, mais : au départ, il n'est pas nécessaire



que

la boîte "Ôter la protection du classeur" s'ouvre... il serait bien que
seulement si la protection du classeur n'est pas activé, là d'accord une
boîte "Protéger le classeur" s'ouvre. (en ce moment, le programme



demande

toujours d'ôter la protection et de remettre la protection, etc.)
Dernière petite chose, lorsque j'ouvre le classeur, la fenêtre du



classeur

ne contient plus les barres de défilement verticales et je ne peux plus
"déplacer" cette fenêtre en "clique-glisse sur le bleu du haut". Pour
résoudre ces 2 problèmes, j'enlève la protection du classeur, et tout se
replace. Bizarre ??

Merci pour votre aide
Caroline



Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
On Error Resume Next

ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:‰4).Execute
ThisWorkbook.Unprotect ""
Loop

Err.Clear

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












Avatar
Caroline L.
Re-bonjour Anonymous,

J'ai ajouté ce que tu suggères ci-bas... cela semble éviter que
l'utilisateur n'entre aucun mot de passe, donc le mdp n'est plus facultatif
mais obligatoire, est-ce que je comprends bien ??
Enfin, pour éviter eventuellement que l'utilisateur ne puisse fermer le
classeur, il faudrait rajouter un Application.EnableCancelKey=xlDisabled
en

début de macro et un Application.EnableCancelKey =xlInterrupt à la fin
mais

c'est à manier avec précaution



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

pour la 1ere question, le Thisworkbook.unprotect "" est là pour tester si
le

classeur n'a pas été protégé par un chaine vide,ce qui rendrait de facto
la

protection bien faible et le on error qui précede est la pour éviter dans
ce

test que si jamais il y a déjà une protection de classeur , le programme
ne

se plante.
Ensuite il est à nouveau répété dans la procédure pour les mêmes raisons.

Par ailleurs, le programme d'envoi automatique de la fenêtre de dialogue
de

la protcetion du classeur ,une fois son 1er test Thisworkbook.unprotect ""
réalisé, ne se déclenche QUE si vraiment il n'y a pas de protection de
classeur. Je viens de refaire l'essai.

Enfin, pour éviter eventuellement que l'utilisateur ne puisse fermer le
classeur, il faudrait rajouter un Application.EnableCancelKey=xlDisabled
en

début de macro et un Application.EnableCancelKey =xlInterrupt à la fin
mais

c'est à manier avec précaution.

Pour la 2eme question , je ne vois pas, enableselections ou scrollarea
peut-être.

A+


Bonjour à tous !

Au bas, voici une macro sur laquelle je dois faire des petits
ajustements


mais je n'y arrive pas. Juste vous dire que le but de celle-ci est qu'à
la


fermeture d'un classeur, l'utilisateur est forcer de remettre la
protection


sur les feuilles et de protéger le classeur (tout ça avec un mot de
passe).


La macro est presque à point, mais : au départ, il n'est pas nécessaire
que


la boîte "Ôter la protection du classeur" s'ouvre... il serait bien que
seulement si la protection du classeur n'est pas activé, là d'accord une
boîte "Protéger le classeur" s'ouvre. (en ce moment, le programme
demande


toujours d'ôter la protection et de remettre la protection, etc.)
Dernière petite chose, lorsque j'ouvre le classeur, la fenêtre du
classeur


ne contient plus les barres de défilement verticales et je ne peux plus
"déplacer" cette fenêtre en "clique-glisse sur le bleu du haut". Pour
résoudre ces 2 problèmes, j'enlève la protection du classeur, et tout se
replace. Bizarre ??

Merci pour votre aide
Caroline



Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
On Error Resume Next

ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:‰4).Execute
ThisWorkbook.Unprotect ""
Loop

Err.Clear

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







Avatar
anonymousA
non, Caroline ca n'a pas exactement à voir avec l'obligation de saisir
le mdp .
EnablecancelKey=xldisabled veut dire que si l'utilisateur clique sur ESC
ou sur Ctrl+Pause pendant que la macro est exécutée ,celle-ci ne
s'interrompt pas.
En conséquence, même s'il ne veut pas saisir de mdp , il ne peut pas
faire planter la macro et fermer le fichier en l'état.Donc il est
contraint à laisser la macro se dérouler et par voie de conséquence à
lui reproposer la boite de dialogue mdp du classeur puis ensuite celle
des feuilles jusqu'à ce que , de guerre lasse, il finisse enfin par
saisir un mdp valide de classeur puis un mdp pour les feuilles.
Je me répète depuis 3 POSTS : ce qui oblige l'utilsateur à saisir un mdp
valide (c.à.d non vide)pour le classeur c'est Thisworkbook.unprotect ""
et la boucle Do while Thisworkbook.protectcontentsúlse.

A+


Re-bonjour Anonymous,

J'ai ajouté ce que tu suggères ci-bas... cela semble éviter que
l'utilisateur n'entre aucun mot de passe, donc le mdp n'est plus facultatif
mais obligatoire, est-ce que je comprends bien ??

Enfin, pour éviter eventuellement que l'utilisateur ne puisse fermer le
classeur, il faudrait rajouter un Application.EnableCancelKey=xlDisabled


en

début de macro et un Application.EnableCancelKey =xlInterrupt à la fin


mais

c'est à manier avec précaution




"anonymousA" a écrit dans le message
de news:

bonjour,

pour la 1ere question, le Thisworkbook.unprotect "" est là pour tester si


le

classeur n'a pas été protégé par un chaine vide,ce qui rendrait de facto


la

protection bien faible et le on error qui précede est la pour éviter dans


ce

test que si jamais il y a déjà une protection de classeur , le programme


ne

se plante.
Ensuite il est à nouveau répété dans la procédure pour les mêmes raisons.

Par ailleurs, le programme d'envoi automatique de la fenêtre de dialogue


de

la protcetion du classeur ,une fois son 1er test Thisworkbook.unprotect ""
réalisé, ne se déclenche QUE si vraiment il n'y a pas de protection de
classeur. Je viens de refaire l'essai.

Enfin, pour éviter eventuellement que l'utilisateur ne puisse fermer le
classeur, il faudrait rajouter un Application.EnableCancelKey=xlDisabled


en

début de macro et un Application.EnableCancelKey =xlInterrupt à la fin


mais

c'est à manier avec précaution.

Pour la 2eme question , je ne vois pas, enableselections ou scrollarea
peut-être.

A+



Bonjour à tous !

Au bas, voici une macro sur laquelle je dois faire des petits



ajustements

mais je n'y arrive pas. Juste vous dire que le but de celle-ci est qu'à



la

fermeture d'un classeur, l'utilisateur est forcer de remettre la



protection

sur les feuilles et de protéger le classeur (tout ça avec un mot de



passe).

La macro est presque à point, mais : au départ, il n'est pas nécessaire



que

la boîte "Ôter la protection du classeur" s'ouvre... il serait bien que
seulement si la protection du classeur n'est pas activé, là d'accord une
boîte "Protéger le classeur" s'ouvre. (en ce moment, le programme



demande

toujours d'ôter la protection et de remettre la protection, etc.)
Dernière petite chose, lorsque j'ouvre le classeur, la fenêtre du



classeur

ne contient plus les barres de défilement verticales et je ne peux plus
"déplacer" cette fenêtre en "clique-glisse sur le bleu du haut". Pour
résoudre ces 2 problèmes, j'enlève la protection du classeur, et tout se
replace. Bizarre ??

Merci pour votre aide
Caroline



Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
On Error Resume Next

ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:‰4).Execute
ThisWorkbook.Unprotect ""
Loop

Err.Clear

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












Avatar
Caroline L.
D'accord, merci.
Là j'ai compris. Tu sais, je ne suis encore qu'à mes débuts en VBA, le
vocabulaire n'est pas toujours évident à saisir. Merci pour ta patience et
explications.
Dernière petite question : je cherche à créer la macro suivante :

Boîte dialogue "Ôter la protection du classeur"
si le mot de passe est valide la macro se poursuit (j'ai fait le reste)
sinon, MsgBox "Mot de passe erroné. La gestion des horaires est limité à
l'administration"

merci encore
Caroline

"anonymousA" a écrit dans le message de news:
4230c8f9$0$3124$
non, Caroline ca n'a pas exactement à voir avec l'obligation de saisir
le mdp .
EnablecancelKey=xldisabled veut dire que si l'utilisateur clique sur ESC
ou sur Ctrl+Pause pendant que la macro est exécutée ,celle-ci ne
s'interrompt pas.
En conséquence, même s'il ne veut pas saisir de mdp , il ne peut pas
faire planter la macro et fermer le fichier en l'état.Donc il est
contraint à laisser la macro se dérouler et par voie de conséquence à
lui reproposer la boite de dialogue mdp du classeur puis ensuite celle
des feuilles jusqu'à ce que , de guerre lasse, il finisse enfin par
saisir un mdp valide de classeur puis un mdp pour les feuilles.
Je me répète depuis 3 POSTS : ce qui oblige l'utilsateur à saisir un mdp
valide (c.à.d non vide)pour le classeur c'est Thisworkbook.unprotect ""
et la boucle Do while Thisworkbook.protectcontentsúlse.

A+


Re-bonjour Anonymous,

J'ai ajouté ce que tu suggères ci-bas... cela semble éviter que
l'utilisateur n'entre aucun mot de passe, donc le mdp n'est plus
facultatif


mais obligatoire, est-ce que je comprends bien ??

Enfin, pour éviter eventuellement que l'utilisateur ne puisse fermer le
classeur, il faudrait rajouter un Application.EnableCancelKey=xlDisabled


en

début de macro et un Application.EnableCancelKey =xlInterrupt à la fin


mais

c'est à manier avec précaution




"anonymousA" a écrit dans le
message


de news:

bonjour,

pour la 1ere question, le Thisworkbook.unprotect "" est là pour tester
si




le

classeur n'a pas été protégé par un chaine vide,ce qui rendrait de facto


la

protection bien faible et le on error qui précede est la pour éviter
dans




ce

test que si jamais il y a déjà une protection de classeur , le programme


ne

se plante.
Ensuite il est à nouveau répété dans la procédure pour les mêmes
raisons.




Par ailleurs, le programme d'envoi automatique de la fenêtre de dialogue


de

la protcetion du classeur ,une fois son 1er test Thisworkbook.unprotect
""



réalisé, ne se déclenche QUE si vraiment il n'y a pas de protection de
classeur. Je viens de refaire l'essai.

Enfin, pour éviter eventuellement que l'utilisateur ne puisse fermer le
classeur, il faudrait rajouter un Application.EnableCancelKey=xlDisabled


en

début de macro et un Application.EnableCancelKey =xlInterrupt à la fin


mais

c'est à manier avec précaution.

Pour la 2eme question , je ne vois pas, enableselections ou scrollarea
peut-être.

A+



Bonjour à tous !

Au bas, voici une macro sur laquelle je dois faire des petits



ajustements

mais je n'y arrive pas. Juste vous dire que le but de celle-ci est qu'à



la

fermeture d'un classeur, l'utilisateur est forcer de remettre la



protection

sur les feuilles et de protéger le classeur (tout ça avec un mot de



passe).

La macro est presque à point, mais : au départ, il n'est pas nécessaire



que

la boîte "Ôter la protection du classeur" s'ouvre... il serait bien que
seulement si la protection du classeur n'est pas activé, là d'accord
une




boîte "Protéger le classeur" s'ouvre. (en ce moment, le programme



demande

toujours d'ôter la protection et de remettre la protection, etc.)
Dernière petite chose, lorsque j'ouvre le classeur, la fenêtre du



classeur

ne contient plus les barres de défilement verticales et je ne peux plus
"déplacer" cette fenêtre en "clique-glisse sur le bleu du haut". Pour
résoudre ces 2 problèmes, j'enlève la protection du classeur, et tout
se




replace. Bizarre ??

Merci pour votre aide
Caroline



Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
On Error Resume Next

ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:‰4).Execute
ThisWorkbook.Unprotect ""
Loop

Err.Clear

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














Avatar
MichDenis
Bonsoir Caroline,

Tu peux insérer ceci dans ton code....

Si ta feuille est protégée lorsque cette ligne de code s'exécute, tu auras une boîte de dialogue te demandant de saisir
le mot de passe pour déprotéger la feuille active. Cependant, si la feuille n'est pas protégée, ce sera une fenêtre qui
s'affichera pour protéger la feuille.

'--------------------
If Application.Dialogs(xlDialogProtectDocument).Show = False Then
Exit Sub
End If
'--------------------


Salutations!



"Caroline L." a écrit dans le message de news: Ch5Yd.45289$
D'accord, merci.
Là j'ai compris. Tu sais, je ne suis encore qu'à mes débuts en VBA, le
vocabulaire n'est pas toujours évident à saisir. Merci pour ta patience et
explications.
Dernière petite question : je cherche à créer la macro suivante :

Boîte dialogue "Ôter la protection du classeur"
si le mot de passe est valide la macro se poursuit (j'ai fait le reste)
sinon, MsgBox "Mot de passe erroné. La gestion des horaires est limité à
l'administration"

merci encore
Caroline

"anonymousA" a écrit dans le message de news:
4230c8f9$0$3124$
non, Caroline ca n'a pas exactement à voir avec l'obligation de saisir
le mdp .
EnablecancelKey=xldisabled veut dire que si l'utilisateur clique sur ESC
ou sur Ctrl+Pause pendant que la macro est exécutée ,celle-ci ne
s'interrompt pas.
En conséquence, même s'il ne veut pas saisir de mdp , il ne peut pas
faire planter la macro et fermer le fichier en l'état.Donc il est
contraint à laisser la macro se dérouler et par voie de conséquence à
lui reproposer la boite de dialogue mdp du classeur puis ensuite celle
des feuilles jusqu'à ce que , de guerre lasse, il finisse enfin par
saisir un mdp valide de classeur puis un mdp pour les feuilles.
Je me répète depuis 3 POSTS : ce qui oblige l'utilsateur à saisir un mdp
valide (c.à.d non vide)pour le classeur c'est Thisworkbook.unprotect ""
et la boucle Do while Thisworkbook.protectcontentsúlse.

A+


Re-bonjour Anonymous,

J'ai ajouté ce que tu suggères ci-bas... cela semble éviter que
l'utilisateur n'entre aucun mot de passe, donc le mdp n'est plus
facultatif


mais obligatoire, est-ce que je comprends bien ??

Enfin, pour éviter eventuellement que l'utilisateur ne puisse fermer le
classeur, il faudrait rajouter un Application.EnableCancelKey=xlDisabled


en

début de macro et un Application.EnableCancelKey =xlInterrupt à la fin


mais

c'est à manier avec précaution




"anonymousA" a écrit dans le
message


de news:

bonjour,

pour la 1ere question, le Thisworkbook.unprotect "" est là pour tester
si




le

classeur n'a pas été protégé par un chaine vide,ce qui rendrait de facto


la

protection bien faible et le on error qui précede est la pour éviter
dans




ce

test que si jamais il y a déjà une protection de classeur , le programme


ne

se plante.
Ensuite il est à nouveau répété dans la procédure pour les mêmes
raisons.




Par ailleurs, le programme d'envoi automatique de la fenêtre de dialogue


de

la protcetion du classeur ,une fois son 1er test Thisworkbook.unprotect
""



réalisé, ne se déclenche QUE si vraiment il n'y a pas de protection de
classeur. Je viens de refaire l'essai.

Enfin, pour éviter eventuellement que l'utilisateur ne puisse fermer le
classeur, il faudrait rajouter un Application.EnableCancelKey=xlDisabled


en

début de macro et un Application.EnableCancelKey =xlInterrupt à la fin


mais

c'est à manier avec précaution.

Pour la 2eme question , je ne vois pas, enableselections ou scrollarea
peut-être.

A+



Bonjour à tous !

Au bas, voici une macro sur laquelle je dois faire des petits



ajustements

mais je n'y arrive pas. Juste vous dire que le but de celle-ci est qu'à



la

fermeture d'un classeur, l'utilisateur est forcer de remettre la



protection

sur les feuilles et de protéger le classeur (tout ça avec un mot de



passe).

La macro est presque à point, mais : au départ, il n'est pas nécessaire



que

la boîte "Ôter la protection du classeur" s'ouvre... il serait bien que
seulement si la protection du classeur n'est pas activé, là d'accord
une




boîte "Protéger le classeur" s'ouvre. (en ce moment, le programme



demande

toujours d'ôter la protection et de remettre la protection, etc.)
Dernière petite chose, lorsque j'ouvre le classeur, la fenêtre du



classeur

ne contient plus les barres de défilement verticales et je ne peux plus
"déplacer" cette fenêtre en "clique-glisse sur le bleu du haut". Pour
résoudre ces 2 problèmes, j'enlève la protection du classeur, et tout
se




replace. Bizarre ??

Merci pour votre aide
Caroline



Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
On Error Resume Next

ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:‰4).Execute
ThisWorkbook.Unprotect ""
Loop

Err.Clear

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














Avatar
Caroline L.
Bonsoir MichDenis,

Merci, mais ce n'est pas vraiment la bonne chose si la programme demande à
protéger la feuille.
Merci à toi et si tu as d'autres idées, n'hésite pas
bonne soirée
Caroline




"MichDenis" a écrit dans le message de news:
#
Bonsoir Caroline,

Tu peux insérer ceci dans ton code....

Si ta feuille est protégée lorsque cette ligne de code s'exécute, tu auras
une boîte de dialogue te demandant de saisir

le mot de passe pour déprotéger la feuille active. Cependant, si la
feuille n'est pas protégée, ce sera une fenêtre qui

s'affichera pour protéger la feuille.

'--------------------
If Application.Dialogs(xlDialogProtectDocument).Show = False Then
Exit Sub
End If
'--------------------


Salutations!



"Caroline L." a écrit dans le message de news:
Ch5Yd.45289$

D'accord, merci.
Là j'ai compris. Tu sais, je ne suis encore qu'à mes débuts en VBA, le
vocabulaire n'est pas toujours évident à saisir. Merci pour ta patience et
explications.
Dernière petite question : je cherche à créer la macro suivante :

Boîte dialogue "Ôter la protection du classeur"
si le mot de passe est valide la macro se poursuit (j'ai fait le reste)
sinon, MsgBox "Mot de passe erroné. La gestion des horaires est limité à
l'administration"

merci encore
Caroline

"anonymousA" a écrit dans le message de news:
4230c8f9$0$3124$
non, Caroline ca n'a pas exactement à voir avec l'obligation de saisir
le mdp .
EnablecancelKey=xldisabled veut dire que si l'utilisateur clique sur ESC
ou sur Ctrl+Pause pendant que la macro est exécutée ,celle-ci ne
s'interrompt pas.
En conséquence, même s'il ne veut pas saisir de mdp , il ne peut pas
faire planter la macro et fermer le fichier en l'état.Donc il est
contraint à laisser la macro se dérouler et par voie de conséquence à
lui reproposer la boite de dialogue mdp du classeur puis ensuite celle
des feuilles jusqu'à ce que , de guerre lasse, il finisse enfin par
saisir un mdp valide de classeur puis un mdp pour les feuilles.
Je me répète depuis 3 POSTS : ce qui oblige l'utilsateur à saisir un mdp
valide (c.à.d non vide)pour le classeur c'est Thisworkbook.unprotect ""
et la boucle Do while Thisworkbook.protectcontentsúlse.

A+


Re-bonjour Anonymous,

J'ai ajouté ce que tu suggères ci-bas... cela semble éviter que
l'utilisateur n'entre aucun mot de passe, donc le mdp n'est plus
facultatif


mais obligatoire, est-ce que je comprends bien ??

Enfin, pour éviter eventuellement que l'utilisateur ne puisse fermer
le




classeur, il faudrait rajouter un
Application.EnableCancelKey=xlDisabled





en

début de macro et un Application.EnableCancelKey =xlInterrupt à la fin


mais

c'est à manier avec précaution




"anonymousA" a écrit dans le
message


de news:

bonjour,

pour la 1ere question, le Thisworkbook.unprotect "" est là pour tester
si




le

classeur n'a pas été protégé par un chaine vide,ce qui rendrait de
facto





la

protection bien faible et le on error qui précede est la pour éviter
dans




ce

test que si jamais il y a déjà une protection de classeur , le
programme





ne

se plante.
Ensuite il est à nouveau répété dans la procédure pour les mêmes
raisons.




Par ailleurs, le programme d'envoi automatique de la fenêtre de
dialogue





de

la protcetion du classeur ,une fois son 1er test
Thisworkbook.unprotect




""
réalisé, ne se déclenche QUE si vraiment il n'y a pas de protection de
classeur. Je viens de refaire l'essai.

Enfin, pour éviter eventuellement que l'utilisateur ne puisse fermer
le




classeur, il faudrait rajouter un
Application.EnableCancelKey=xlDisabled





en

début de macro et un Application.EnableCancelKey =xlInterrupt à la fin


mais

c'est à manier avec précaution.

Pour la 2eme question , je ne vois pas, enableselections ou scrollarea
peut-être.

A+



Bonjour à tous !

Au bas, voici une macro sur laquelle je dois faire des petits



ajustements

mais je n'y arrive pas. Juste vous dire que le but de celle-ci est
qu'à






la

fermeture d'un classeur, l'utilisateur est forcer de remettre la



protection

sur les feuilles et de protéger le classeur (tout ça avec un mot de



passe).

La macro est presque à point, mais : au départ, il n'est pas
nécessaire






que

la boîte "Ôter la protection du classeur" s'ouvre... il serait bien
que





seulement si la protection du classeur n'est pas activé, là d'accord
une




boîte "Protéger le classeur" s'ouvre. (en ce moment, le programme



demande

toujours d'ôter la protection et de remettre la protection, etc.)
Dernière petite chose, lorsque j'ouvre le classeur, la fenêtre du



classeur

ne contient plus les barres de défilement verticales et je ne peux
plus





"déplacer" cette fenêtre en "clique-glisse sur le bleu du haut". Pour
résoudre ces 2 problèmes, j'enlève la protection du classeur, et tout
se




replace. Bizarre ??

Merci pour votre aide
Caroline



Private Sub Workbook_BeforeClose(Cancel As Boolean)
'remet la protection sur toutes les feuilles et protéger le classeur
On Error Resume Next

ThisWorkbook.Unprotect ""

Do While ThisWorkbook.ProtectStructure = False
MsgBox "Vous devez proteger ce classeur avant fermeture"
Application.CommandBars.FindControl(ID:‰4).Execute
ThisWorkbook.Unprotect ""
Loop

Err.Clear

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



















1 2