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

Protéger/déprotéger plusieurs feuilles

9 réponses
Avatar
pier
Bonsoir,

J'ai un classeur Excel qui contient de nombreux feuilles.Pour prot=E9ger
et d=E9prot=E9ger ces feuilles sans devoir le faire une par une j'ai
ins=E9r=E9 ce code dans "This woorkbook" et ca marche tr=E8s bien pour
prot=E9ger toutes les feuilles d'un coup

Private Sub Workbook_Open()

Dim MaFeuille As Worksheet
For Each MaFeuille In Worksheets
MaFeuille.Protect Password:=3D"mot de passe"
Next

End Sub

Le probl=E8me avec ce code c'est que le mot de passe est =E9crit en clair
et est donc accessible pour quiconque clique sur l'onglet d'une
feuille + "visualiser le code".
Je cherche donc un moyen plus "discret" pour obtenir le m=EAme
r=E9sultat...

Merci d'avance.

Pierre

9 réponses

Avatar
Papyjac
Bonjour pier,

Tu peux protéger le code : Sous VBE, clic droit sur le project ; propriétés
du VBA ; Onglet protection ; Taper un mot de passe

Mais aucune protection n'est infaillible dans ces applications

Qu'est qu'il y a dans ton classeur, des linguots d'or !

--
Papyjac


"pier" a écrit :

Bonsoir,

J'ai un classeur Excel qui contient de nombreux feuilles.Pour protéger
et déprotéger ces feuilles sans devoir le faire une par une j'ai
inséré ce code dans "This woorkbook" et ca marche très bien pour
protéger toutes les feuilles d'un coup

Private Sub Workbook_Open()

Dim MaFeuille As Worksheet
For Each MaFeuille In Worksheets
MaFeuille.Protect Password:="mot de passe"
Next

End Sub

Le problème avec ce code c'est que le mot de passe est écrit en clair
et est donc accessible pour quiconque clique sur l'onglet d'une
feuille + "visualiser le code".
Je cherche donc un moyen plus "discret" pour obtenir le même
résultat...

Merci d'avance.

Pierre



Avatar
Papyjac
Bonjour Pier

Pour faire suite, je te déconseille de mettre ton mot de passe en clair dans
le VBA, il faut accepter de la taper une fois dans une inputbox, puis ton
code va le reproduire pour tous les autres onglets : s'il est bon la
protection est levée ; s'il est mauvais elle échoue


--
Papyjac


"pier" a écrit :

Bonsoir,

J'ai un classeur Excel qui contient de nombreux feuilles.Pour protéger
et déprotéger ces feuilles sans devoir le faire une par une j'ai
inséré ce code dans "This woorkbook" et ca marche très bien pour
protéger toutes les feuilles d'un coup

Private Sub Workbook_Open()

Dim MaFeuille As Worksheet
For Each MaFeuille In Worksheets
MaFeuille.Protect Password:="mot de passe"
Next

End Sub

Le problème avec ce code c'est que le mot de passe est écrit en clair
et est donc accessible pour quiconque clique sur l'onglet d'une
feuille + "visualiser le code".
Je cherche donc un moyen plus "discret" pour obtenir le même
résultat...

Merci d'avance.

Pierre



Avatar
pier
Bonsoir Papyjac !

Non c'est pas des lingots d'or qu'il y a dans mon classeur (ce s'rait
trop beau !!!)....

C'est juste que je veux éviter que les différentes personnes qui ont
accès au classeur change des choses dans mes formules par mauvaise
manipulation par exemple.
Alors du coup je protège toutes les feuilles et je suis donc obligé de
les protéger 1 par 1 ce qui est fastidieux...

J'ai trouvé ce moyen de les protéger d'un seul coup mais de fait mon
mot de passe est visible très facilement. Et c'est juste ce que je
voulais éviter...
Ce que tu me proposes gentiment en mettant un mot de passe sur le
projet n'empêches pas de visualiser le code....

Pierre



On 15 sep, 20:34, Papyjac wrote:
Bonjour pier,

Tu peux protéger le code : Sous VBE, clic droit sur le project ; propri étés
du VBA ; Onglet protection ; Taper un mot de passe

Mais aucune protection n'est infaillible dans ces applications

Qu'est qu'il y a dans ton classeur, des linguots d'or !

--
Papyjac



Avatar
pier
Re'bonsoir Papyjac,

Je veux bien taper le mot de passe dans une inputbox mais ça.... je ne
sais pas faire :o(

Pierre


On 15 sep, 20:37, Papyjac wrote:
Bonjour Pier

Pour faire suite, je te déconseille de mettre ton mot de passe en clair dans
le VBA, il faut accepter de la taper une fois dans une inputbox, puis ton
code va le reproduire pour tous les autres onglets : s'il est bon la
protection est levée ; s'il est mauvais elle échoue

--
Papyjac



Avatar
Papyjac
Bonjour pier,

merci pour les linguots,

dans ta procédure :
Réponse = InputBox(Prompt:="Taper le mot de passe",
Title:="Titre à ta convenanve", Default:="XXXX")
et ensuite tu utilise Réponse pour lever la protection

Ci-dessous, l'extrait de l'aide
InputBox, fonction
Voir aussi Exemple Particularités

Affiche une invite dans une boîte de dialogue, attend que l'utilisateur tape
du texte ou clique sur un bouton, puis renvoie le contenu de la zone de
texte sous la forme d'une valeur de type String.

Syntaxe

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile,
context])

La syntaxe de la fonction InputBox comprend les arguments nommés suivants :

Élément Description
prompt Expression de chaîne affichée comme message dans la boîte de
dialogue. La longueur maximale de l'argument prompt est d'environ 1 024
caractères, selon la largeur des caractères utilisés. Si prompt occupe plus
d'une ligne, n'oubliez pas d'insérer un retour chariot (Chr(13)) ou un saut
de ligne (Chr(10)) entre les lignes, ou une combinaison de caractères retour
chariot-saut de ligne (Chr(13) & Chr(10)) entre chaque ligne.
title Facultatif. Expression de chaîne affichée dans la barre de titre de la
boîte de dialogue. Si l'argument title est omis, le nom de l'application est
placé dans la barre de titre.
default Facultatif. Expression de chaîne affichée par défaut dans la zone de
texte en l'absence de toute autre valeur. Si l'argument default est omis, la
zone de texte qui s'affiche est vide.
xpos Facultatif. Expression numérique indiquant, en twips, la distance
horizontale qui sépare le bord gauche de l'écran de la bordure gauche de la
boîte de dialogue. Si l'argument xpos est omis, la boîte de dialogue est
centrée horizontalement.
ypos Facultatif. Expression numérique indiquant, en twips, la distance
verticale qui sépare le haut de l'écran de la bordure supérieure de la boîte
de dialogue. Si l'argument ypos est omis, la boîte de dialogue est
positionnée verticalement, à environ un tiers de l'écran en partant du haut.
helpfile Facultatif. Expression de chaîne indiquant le fichier d'aide à
utiliser pour fournir une aide contextuelle sur la boîte de dialogue. Si
l'argument helpfile est défini, l'argument context doit l'être également.
context Facultatif. Expression numérique indiquant le numéro de contexte
attribué par l'auteur de l'aide à la rubrique appropriée. Si l'argument
context est défini, l'argument helpfile doit l'être également.



Remarques

Lorsque les deux arguments helpfile et context sont définis, l'utilisateur
peut appuyer sur F1 pour afficher la rubrique d'aide correspondant à
l'argument context. Certaines applications hôtes, Microsoft Excel par
exemple, peuvent ajouter automatiquement un bouton Aide à la boîte de
dialogue. Si l'utilisateur clique sur OK ou appuie sur ENTRÉE , la fonction
InputBox renvoie le texte contenu dans la zone de texte. Si l'utilisateur
clique sur le bouton Annuler, la fonction renvoie une chaîne de longueur
nulle ("").

Note Si vous souhaitez préciser plus d'informations que celles fournies
par le premier argument nommé, vous devez utiliser la fonction InputBox dans
une expression. Si vous voulez omettre certains arguments de position, vous
devez quand même placer la virgule de séparation correspondante.



"pier" a écrit dans le message de
news:
Re'bonsoir Papyjac,

Je veux bien taper le mot de passe dans une inputbox mais ça.... je ne
sais pas faire :o(

Pierre


On 15 sep, 20:37, Papyjac wrote:
Bonjour Pier

Pour faire suite, je te déconseille de mettre ton mot de passe en clair
dans
le VBA, il faut accepter de la taper une fois dans une inputbox, puis ton
code va le reproduire pour tous les autres onglets : s'il est bon la
protection est levée ; s'il est mauvais elle échoue

--
Papyjac



Avatar
pier
Re' Papyjac !

Désolé mais je n'ai rien compris dans ta réponse qui semble aussi
aisée à comprendre que l'aide chez Microsoft :o)

Tu dis "... dans ta procédure..." : je sais même pas ce que c'est une
"procédure"
J'ai cru comprendre que je devais copier ton bout de code quelque part
dans mon projet VBA
J'ai essayé de le copier dans "This workbook" mais bon ca donne
rien ...

C'est gentil de me faire un copié/collé de l'aide Excel mais tu sais
je suis passé par là d'abord avant de venir sur le forum (si, si
j't'assure).
J'ai lu la 1ère phrase :
"Affiche une invite dans une boîte de dialogue, attend que
l'utilisateur tape du texte ou clique sur un bouton, puis renvoie le
contenu de la zone de texte sous la forme d'une valeur de type
String." et déjà je comprenais rien... la forme d'une valeur String",
ça veut ABSOLUMENT rien dire pour moi...

Faut bien comprendre que tous les utilisateurs d'Excel sont pas des
programmateurs aguerris à ce type de langage... J'utilise juste Excel
comme un tableur et je voulais juste savoir comment protéger/
déprotéger plusieurs feuilles sans devoir retaper le mot de passe à
chaque fois... j'imaginais pas que cela me demande de connaitre un
langage si technique...
J'ai donc cherché sur le net et j'avais trouvé ce morceau de code :

Private Sub Workbook_Open()

Dim MaFeuille As Worksheet
For Each MaFeuille In Worksheets
MaFeuille.Protect Password:="mot de passe"
Next

End Sub

Cela me convenait plutôt bien, j'ai juste copié/collé ce code dans
"This workbook" et ca fonctionnait sauf que ... mon mot de passe est
visible dans le code et cela me chagrine...

Pierre



On 15 sep, 21:49, "Papyjac" <papyjac(supprimerceci)@free.fr> wrote:
Bonjour pier,

merci pour les linguots,

dans ta procédure :
            Réponse = InputBox(Prompt:="Taper le mot de passe",
Title:="Titre à ta convenanve", Default:="XXXX")
et ensuite tu utilise Réponse pour lever la protection

Ci-dessous, l'extrait de l'aide
InputBox, fonction
Voir aussi     Exemple     Particularités

Affiche une invite dans une boîte de dialogue, attend que l'utilisateur tape
du texte ou clique sur un bouton, puis renvoie le contenu de la zone de
texte sous la forme d'une valeur de type String.

Syntaxe

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile,
context])

La syntaxe de la fonction InputBox comprend les arguments nommés suivan ts :

Élément Description
prompt Expression de chaîne affichée comme message dans la boîte de
dialogue. La longueur maximale de l'argument prompt est d'environ 1 024
caractères, selon la largeur des caractères utilisés. Si prompt occ upe plus
d'une ligne, n'oubliez pas d'insérer un retour chariot (Chr(13)) ou un saut
de ligne (Chr(10)) entre les lignes, ou une combinaison de caractères r etour
chariot-saut de ligne (Chr(13) & Chr(10)) entre chaque ligne.
title Facultatif. Expression de chaîne affichée dans la barre de titr e de la
boîte de dialogue. Si l'argument title est omis, le nom de l'applicatio n est
placé dans la barre de titre.
default Facultatif. Expression de chaîne affichée par défaut dans l a zone de
texte en l'absence de toute autre valeur. Si l'argument default est omis, la
zone de texte qui s'affiche est vide.
xpos Facultatif. Expression numérique indiquant, en twips, la distance
horizontale qui sépare le bord gauche de l'écran de la bordure gauche de la
boîte de dialogue. Si l'argument xpos est omis, la boîte de dialogue est
centrée horizontalement.
ypos Facultatif. Expression numérique indiquant, en twips, la distance
verticale qui sépare le haut de l'écran de la bordure supérieure de la boîte
de dialogue. Si l'argument ypos est omis, la boîte de dialogue est
positionnée verticalement, à environ un tiers de l'écran en partant du haut.
helpfile Facultatif. Expression de chaîne indiquant le fichier d'aide à
utiliser pour fournir une aide contextuelle sur la boîte de dialogue. S i
l'argument helpfile est défini, l'argument context doit l'être égal ement.
context Facultatif. Expression numérique indiquant le numéro de conte xte
attribué par l'auteur de l'aide à la rubrique appropriée. Si l'argu ment
context est défini, l'argument helpfile doit l'être également.

Remarques

Lorsque les deux arguments helpfile et context sont définis, l'utilisat eur
peut appuyer sur F1 pour afficher la rubrique d'aide correspondant à
l'argument context. Certaines applications hôtes, Microsoft Excel par
exemple, peuvent ajouter automatiquement un bouton Aide à la boîte de
dialogue. Si l'utilisateur clique sur OK ou appuie sur ENTRÉE , la fonc tion
InputBox renvoie le texte contenu dans la zone de texte. Si l'utilisateur
clique sur le bouton Annuler, la fonction renvoie une chaîne de longueu r
nulle ("").

Note   Si vous souhaitez préciser plus d'informations que celles four nies
par le premier argument nommé, vous devez utiliser la fonction InputBox dans
une expression. Si vous voulez omettre certains arguments de position, vo us
devez quand même placer la virgule de séparation correspondante.



Avatar
Francois L
pier a écrit :

Bonjour,

Le fait de saisir le mot de passe via une inputbox ne changera pas le
fait que celui-ci restera visible dans ton code VBA.

La question est : tu veux protéger ton mot de passe, mais vis à vis de
qui ? La solution la plus simple est d'empêcher l'affichage du code VBA
en utilisant l'outil de protection : clic droit sur thisworkbook (si
c'est là qu'est ton code), "Propriétés de VBAProject", "Protection". Ca
ne résistera pas à une attaque en règle par quelqu'un qui sait faire
mais si les utilisateurs que tu crains ne sont pas trop des cadors,
c'est déjà mieux.

Ceci étant dit, ne te fais pas trop d'illusions. Les mots de passe trop
nombreux et trop fréquents provoque une réaction des utilisateurs (et on
les comprend bien !), il en découle des pratiques peu sécuritaires qui
vont du post-it collé à coté du clavier au classeur accessible contenant
tous les mots de passe d'un utilisateur ! On peut aussi considérer que
tout mot de passe qui dure un certain temps n'en est plus un ! Regardes,
si tu as un code d'accès à ton immeuble, combien de gens le connaissent
au bout de quelques mois.

--
François L


Re' Papyjac !

Désolé mais je n'ai rien compris dans ta réponse qui semble aussi
aisée à comprendre que l'aide chez Microsoft :o)

Tu dis "... dans ta procédure..." : je sais même pas ce que c'est une
"procédure"
J'ai cru comprendre que je devais copier ton bout de code quelque part
dans mon projet VBA
J'ai essayé de le copier dans "This workbook" mais bon ca donne
rien ...

C'est gentil de me faire un copié/collé de l'aide Excel mais tu sais
je suis passé par là d'abord avant de venir sur le forum (si, si
j't'assure).
J'ai lu la 1ère phrase :
"Affiche une invite dans une boîte de dialogue, attend que
l'utilisateur tape du texte ou clique sur un bouton, puis renvoie le
contenu de la zone de texte sous la forme d'une valeur de type
String." et déjà je comprenais rien... la forme d'une valeur String",
ça veut ABSOLUMENT rien dire pour moi...

Faut bien comprendre que tous les utilisateurs d'Excel sont pas des
programmateurs aguerris à ce type de langage... J'utilise juste Excel
comme un tableur et je voulais juste savoir comment protéger/
déprotéger plusieurs feuilles sans devoir retaper le mot de passe à
chaque fois... j'imaginais pas que cela me demande de connaitre un
langage si technique...
J'ai donc cherché sur le net et j'avais trouvé ce morceau de code :

Private Sub Workbook_Open()

Dim MaFeuille As Worksheet
For Each MaFeuille In Worksheets
MaFeuille.Protect Password:="mot de passe"
Next

End Sub

Cela me convenait plutôt bien, j'ai juste copié/collé ce code dans
"This workbook" et ca fonctionnait sauf que ... mon mot de passe est
visible dans le code et cela me chagrine...

Pierre



On 15 sep, 21:49, "Papyjac" <papyjac(supprimerceci)@free.fr> wrote:
Bonjour pier,

merci pour les linguots,

dans ta procédure :
Réponse = InputBox(Prompt:="Taper le mot de passe",
Title:="Titre à ta convenanve", Default:="XXXX")
et ensuite tu utilise Réponse pour lever la protection

Ci-dessous, l'extrait de l'aide
InputBox, fonction
Voir aussi Exemple Particularités

Affiche une invite dans une boîte de dialogue, attend que l'utilisateur tape
du texte ou clique sur un bouton, puis renvoie le contenu de la zone de
texte sous la forme d'une valeur de type String.

Syntaxe

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile,
context])

La syntaxe de la fonction InputBox comprend les arguments nommés suivants :

Élément Description
prompt Expression de chaîne affichée comme message dans la boîte de
dialogue. La longueur maximale de l'argument prompt est d'environ 1 024
caractères, selon la largeur des caractères utilisés. Si prompt occupe plus
d'une ligne, n'oubliez pas d'insérer un retour chariot (Chr(13)) ou un saut
de ligne (Chr(10)) entre les lignes, ou une combinaison de caractères retour
chariot-saut de ligne (Chr(13) & Chr(10)) entre chaque ligne.
title Facultatif. Expression de chaîne affichée dans la barre de titre de la
boîte de dialogue. Si l'argument title est omis, le nom de l'application est
placé dans la barre de titre.
default Facultatif. Expression de chaîne affichée par défaut dans la zone de
texte en l'absence de toute autre valeur. Si l'argument default est omis, la
zone de texte qui s'affiche est vide.
xpos Facultatif. Expression numérique indiquant, en twips, la distance
horizontale qui sépare le bord gauche de l'écran de la bordure gauche de la
boîte de dialogue. Si l'argument xpos est omis, la boîte de dialogue est
centrée horizontalement.
ypos Facultatif. Expression numérique indiquant, en twips, la distance
verticale qui sépare le haut de l'écran de la bordure supérieure de la boîte
de dialogue. Si l'argument ypos est omis, la boîte de dialogue est
positionnée verticalement, à environ un tiers de l'écran en partant du haut.
helpfile Facultatif. Expression de chaîne indiquant le fichier d'aide à
utiliser pour fournir une aide contextuelle sur la boîte de dialogue. Si
l'argument helpfile est défini, l'argument context doit l'être également.
context Facultatif. Expression numérique indiquant le numéro de contexte
attribué par l'auteur de l'aide à la rubrique appropriée. Si l'argument
context est défini, l'argument helpfile doit l'être également.

Remarques

Lorsque les deux arguments helpfile et context sont définis, l'utilisateur
peut appuyer sur F1 pour afficher la rubrique d'aide correspondant à
l'argument context. Certaines applications hôtes, Microsoft Excel par
exemple, peuvent ajouter automatiquement un bouton Aide à la boîte de
dialogue. Si l'utilisateur clique sur OK ou appuie sur ENTRÉE , la fonction
InputBox renvoie le texte contenu dans la zone de texte. Si l'utilisateur
clique sur le bouton Annuler, la fonction renvoie une chaîne de longueur
nulle ("").

Note Si vous souhaitez préciser plus d'informations que celles fournies
par le premier argument nommé, vous devez utiliser la fonction InputBox dans
une expression. Si vous voulez omettre certains arguments de position, vous
devez quand même placer la virgule de séparation correspondante.






Avatar
pier
Bonjour François,

Merci pour ta précision concernant la visibilité du mot de passe même
via une inputbox.
En effet, tu poses la bonne question et ce que je crains surtout c'est
une erreur de manipulation de la part d'un utilisateur. C'est pourquoi
je veux juste empêcher ces utilisateurs de modifier les feuilles que
j'ai créées. Une chose est certaine : ces utilisateurs n'iront pas
sciemment dans le code VBA pour voir quoi que ce soit... la plupart
d'être eux ne savent même pas que cela existe !
Donc la solution simple que tu proposes en changeant les propriétés de
VBA project sur "this workbook" me convient bien. J'avais pas vu que
je pouvais verrouiller l'affichage lorsque Papyjac avait proposé faire
la manip.
Maintenant c'est fait, le clic droit sur l'onglet d'une feuille ne
permet plus de visualiser le code VBA et donc ne permet plus de lire
mon mot de passe... cela me va très bien.

Bonne journée.

Pierre


On 16 sep, 06:55, Francois L
wrote:
pier a écrit :

Bonjour,

Le fait de saisir le mot de passe via une inputbox ne changera pas le
fait que celui-ci restera visible dans ton code VBA.

La question est : tu veux protéger ton mot de passe, mais vis à vis d e
qui ? La solution la plus simple est d'empêcher l'affichage du code VBA
en utilisant l'outil de protection : clic droit sur thisworkbook (si
c'est là qu'est ton code),  "Propriétés de VBAProject", "Protecti on". Ca
ne résistera pas à une attaque en règle par quelqu'un qui sait fair e
mais si les utilisateurs que tu crains ne sont pas trop des cadors,
c'est déjà mieux.

Ceci étant dit, ne te fais pas trop d'illusions. Les mots de passe trop
nombreux et trop fréquents provoque une réaction des utilisateurs (et on
les comprend bien !), il en découle des pratiques peu sécuritaires qu i
vont du post-it collé à coté du clavier au classeur accessible cont enant
tous les mots de passe d'un utilisateur ! On peut aussi considérer que
tout mot de passe qui dure un certain temps n'en est plus un ! Regardes,
si tu as un code d'accès à ton immeuble, combien de gens le connaisse nt
au bout de quelques mois.

--
François L


Avatar
Francois L
pier a écrit :

Bonsoir,

Parfait et merci du retour...

--
François L

Bonjour François,

Merci pour ta précision concernant la visibilité du mot de passe même
via une inputbox.
En effet, tu poses la bonne question et ce que je crains surtout c'est
une erreur de manipulation de la part d'un utilisateur. C'est pourquoi
je veux juste empêcher ces utilisateurs de modifier les feuilles que
j'ai créées. Une chose est certaine : ces utilisateurs n'iront pas
sciemment dans le code VBA pour voir quoi que ce soit... la plupart
d'être eux ne savent même pas que cela existe !
Donc la solution simple que tu proposes en changeant les propriétés de
VBA project sur "this workbook" me convient bien. J'avais pas vu que
je pouvais verrouiller l'affichage lorsque Papyjac avait proposé faire
la manip.
Maintenant c'est fait, le clic droit sur l'onglet d'une feuille ne
permet plus de visualiser le code VBA et donc ne permet plus de lire
mon mot de passe... cela me va très bien.

Bonne journée.

Pierre


On 16 sep, 06:55, Francois L
wrote:
pier a écrit :

Bonjour,

Le fait de saisir le mot de passe via une inputbox ne changera pas le
fait que celui-ci restera visible dans ton code VBA.

La question est : tu veux protéger ton mot de passe, mais vis à vis de
qui ? La solution la plus simple est d'empêcher l'affichage du code VBA
en utilisant l'outil de protection : clic droit sur thisworkbook (si
c'est là qu'est ton code), "Propriétés de VBAProject", "Protection". Ca
ne résistera pas à une attaque en règle par quelqu'un qui sait faire
mais si les utilisateurs que tu crains ne sont pas trop des cadors,
c'est déjà mieux.

Ceci étant dit, ne te fais pas trop d'illusions. Les mots de passe trop
nombreux et trop fréquents provoque une réaction des utilisateurs (et on
les comprend bien !), il en découle des pratiques peu sécuritaires qui
vont du post-it collé à coté du clavier au classeur accessible contenant
tous les mots de passe d'un utilisateur ! On peut aussi considérer que
tout mot de passe qui dure un certain temps n'en est plus un ! Regardes,
si tu as un code d'accès à ton immeuble, combien de gens le connaissent
au bout de quelques mois.

--
François L