Exécution macro sur feuille protégée par mot de passe

Bonjour,

Sur mon fichier Excel, je souhaite exécuter une macro pour imprimer le contenu de la feuille avec une mise en page spécifique. Celle-ci fonctionne bien, mais uniquement lorsque la feuille n'est pas protégée.

Dès que je mets une protection avec mot de passe sur cette feuille, la macro ne s'exécute pas.

J'ai donc voulu rajouter à mon code VBA, la suppression du mot de passe en début de macro, puis la remise en place de la protection en fin de programme.

Du coup, cela fonctionne bien, mais le souci, c'est qu'il faut taper le mot de passe ! Or je ne veux pas le diffuser. Je n'ai pas non plus envie qu'il apparaisse dans le code VBA (sauf si je ne peux pas faire autrement).

D'après ce que j'ai compris en lisant certains articles sur internet, il faudrait mettre du code dans ThisWorkbook pour dire que l'exécution des macros est possible sur un onglet protégé. Mais là, je suis un peu en manque de connaissances

Pourriez-vous m'aider ?

Je suppose que ce n'est pas grand-chose à faire, mais je n'y arrive pas.

J'avais essayé autre chose, c'est de changer les critères d'autorisation dans la fenêtre de protection de la feuille. MAIS, il n'y a pas la possibilité d'exécuter une macro lorsque l'on protège la feuille.

Pour l'instant je ne peux malheureusement pas vous fournir mon fichier, étant donné qu'il est professionnel.

Si besoin, je pourrai faire un fichier y ressemblant, pour le joindre à cette discussion.

Merci d'avance pour votre aide.

Bonjour,

Un essai ...

Remplace "XXX" par ton mot de passe ... exemple : "Bonjour04"

Place ce code dans ThisWorkbook ...

Si ça fonctionne correctement, protège l'accès au code par un mot de passe

(menu Outils > Propriétés de VbaProject > onglet Protection).

Note précieusement tes mots de passe dans un carnet ... car la mémoire est une faculté qui oublie.

Ceux qui ne le font pas, se retrouvent un jour ou l'autre dans la mouise.

Important, pour les tests, utilise une copie de ton fichier.

Ferme le classeur et rouvre-le pour que le code entre en fonction.

Private Sub Workbook_Open()
Dim Ws As Worksheet

   For Each Ws In ThisWorkbook.Worksheets
      Ws.Protect "XXX", UserInterFaceOnly:=True
   Next Ws
End Sub

ric

Bonjour,

J'ai donc voulu rajouter à mon code VBA, la suppression du mot de passe en début de macro, puis la remise en place de la protection en fin de programme.

Du coup, cela fonctionne bien, mais le souci, c'est qu'il faut taper le mot de passe ! Or je ne veux pas le diffuser. Je n'ai pas non plus envie qu'il apparaisse dans le code VBA

Merci d'avance pour votre aide.

Bonjour, Si tu dois taper le mot de passe alors tu n'as pas du utiliser la fonction unprotect correctement.

Je pense qu'il faut utliser en début et en fin de macro car

L'utilisation dans this workbook open n'a pas d'intérêt ? à quoi bon protéger une feuille si c'est pour la déprotéger à l'ouverture du fichier !

Il te faut un :

ActiveSheet.Unprotect Password:="ton mot de passe"

en début de macro et

ActiveSheet.protect Password:="ton mot de passe"

en fin de macro

Merci pour vos réponses.

Effectivement, je ne veux pas que la protection de l'onglet soit inhibée des que l'on ouvre le fichier. Le but de la protection, est d'empêcher d'autres personnes de modifier le contenu de la feuille. Ces autres personne doivent juste pouvoir visualiser la feuille et l'imprimer via la macro.

Donc si je comprend bien vos explications, en appliquant la méthode de Ric, la feuille ne sera pas protégée tant que le fichier est ouvert ?

Donc si j'applique la méthode de Xmenpl, il faut que je mette le mot de passe dans mon code VBA, et que je prenne une partie de la méthode de Ric, pour protéger le code par mot de passe.

Ai-je bien tout compris ?

Merci

Merci pour vos réponses.

Effectivement, je ne veux pas que la protection de l'onglet soit inhibée des que l'on ouvre le fichier. Le but de la protection, est d'empêcher d'autres personnes de modifier le contenu de la feuille. Ces autres personne doivent juste pouvoir visualiser la feuille et l'imprimer via la macro.

Donc si je comprend bien vos explications, en appliquant la méthode de Ric, la feuille ne sera pas protégée tant que le fichier est ouvert ?

Donc si j'applique la méthode de Xmenpl, il faut que je mette le mot de passe dans mon code VBA, et que je prenne une partie de la méthode de Ric, pour protéger le code par mot de passe.

Ai-je bien tout compris ?

Merci

Si tu as déjà protégé ta feuille alors la protection à l'ouverture du fichier ne sert plus.

Juste le code de la macro qui enlève et remet la protection suffit.

Bonjour à tous,

Donc si je comprend bien vos explications, en appliquant la méthode de Ric, la feuille ne sera pas protégée tant que le fichier est ouvert ?

Tout au contraire, toutes les feuilles seront protégées, mais le code (que l'on n'a pas pu tester faute de fichier représentatif) devrait fonctionner correctement. Fais quelques tests.

Il est possible d'appliquer ma méthode sur quelques feuilles seulement dans une boucle.

Si ça ne te convient pas, la façon de faire de Xmenpl est aussi bonne, l'on désactive la protection au début du code, puis l'on remet à protection à la fin du code.

ric

Merci pour ces précisions

Je ne sais pas encore quelle méthode je vais utiliser, mais celles que vous m'avez proposé me plaisent.

Par contre, ayant plusieurs feuilles dans le même fichier, et si j'utilise la méthode avec "ThisWorkbook", je souhaite n'avoir une protection que sur une des feuilles.

Quelles serait donc la modif à appliquer dans le code suivant ?

Private Sub Workbook_Open()
Dim Ws As Worksheet

   For Each Ws In ThisWorkbook.Worksheets
      Ws.Protect "XXX", UserInterFaceOnly:=True
   Next Ws
End Sub

De plus, j'ai oublié de vous préciser une petite chose... Il y a une autre macro dans mon fichier, mais je ne veux pas qu'elle soit impactée par la mise en place et l'utilisation de la mienne.

Merci

Si c'est pour une seule feuille alors inutile de passer par un code à l'ouverture

puisque tu devras quand même dans ta macro ajouter l'évènement unprotect et protect

Bonjour,

Private Sub Workbook_Open()
Dim Ws As Worksheet

   For Each Ws In ThisWorkbook.Worksheets
      If Ws.Name = "Feuil2" Then
         Ws.Protect "XXX", UserInterFaceOnly:=True
      End If
   Next Ws
End Sub

Il reste à adapter le nom de la feuille à protéger et le mot de passe.

par Xmenpl » ... Si c'est pour une seule feuille alors inutile de passer par un code à l'ouverture puisque tu devras quand même dans ta macro ajouter l'évènement unprotect et protect

@Xmenpl > le but de UserInterFaceOnly:=True est de protéger la/les feuilles tout en laissant la/les macros s'exécuter.

Par contre, il est vrai que certains traitements vont nécessiter quand même le déverrouillage de la feuille.

N'ayant pas vu le code à exécuter, il n'y a que les tests de la part de binome18 qui vont nous dire si cette méthode est valable.

A+

ric

Re Ric

Merci pour l'info là je ne savais pas que ta méthode permettait quand même l'éxécution de macro (dans la mesure du possible).

Comme quoi on en aprrend encore tous les jours.

Bonjour à tous,

Moi-même, je n'ai appris que dernièrement cette instruction sur ce forum ... une gracieuseté d'eriiic dans ce fil :

https://forum.excel-pratique.com/viewtopic.php?f=2&t=120520&p=736080&hilit=UserInterFaceOnly#p736080

Suite à cette info, j'ai trouvé :

http://www.criticaltosuccess.com/speedup-excel-vba-macros-protect-userinterfaceonly/

ric

Effectivement, dans mon cas, je pense que j'en aurai d'avantage l'utilité

Merci

Merci beaucoup pour vos réponses.

Je n'ai malheureusement pas eu le temps d'essayer vos solutions aujourd'hui, j’espère pouvoir le faire demain.

Je vous tiendrai bien sûr au courant du résultat, et éventuellement des difficultés rencontrées.

Merci

Bonjour,

Je viens seulement d'essayer vos solutions.

J'ai appliqué la solution du retrait protection en début de macro, en remise en place à la fin.

Par contre, j'ai souhaité protéger le code VBA par un mot de passe, pour que les utilisateurs les plus malins, ne puissent pas voir le mots de passe qui est inscrit dans la macro.

J'ai donc utilisé la méthode que ric m'a proposé, à savoir mettre un mot de passe via le menu outils>Propriété de VBAproject>Onglet protection, en cochant la case "Verrouiller le projet pour l'affichage". Le souci, c'est que tout le projet est verrouillé en affichage.

Y-a-t-il un moyen de verrouiller en affichage un seul des modules ? En effet, nous sommes 2 ou 3 collègues à faire des modifications sur ce fameux fichier, mais il faut qu'ils continuent à pouvoir accéder à leurs modules.

Merci d'avance aux réponses que vous pourrez me donner.

Bonjour,

... Y-a-t-il un moyen de verrouiller en affichage un seul des modules ? ...

Je n'ai jamais lu que ce soit possible.

Je crois que l'on ne peut verrouiller que VBE au complet.

ric

Bonjour,

... Y-a-t-il un moyen de verrouiller en affichage un seul des modules ? ...

Je n'ai jamais lu que ce soit possible.

Je crois que l'on ne peut verrouiller que VBE au complet.

ric

BOnjour,

En effet même avis que Ric on peut pas utiliser cette protection sur un partie de vba seulement.

Par contre pour info au cas ou Il est possible de réaliser un "export de module" afin d'en sauvegarder le contenu.

Il sera ensuite facile de réimporter le module en cas de modification d'un utilisateur non autorisé.

Rechercher des sujets similaires à "execution macro feuille protegee mot passe"