Macro Masquer et Protéger des feuilles
Bonjour tout le monde,
Je finalise un classeur je suis au stade des protections.
But final pour le fichier : Je souhaiterai pouvoir activer les feuilles masquées et empêcher la suppression de feuilles.
Dans le ThisWorkbook une macro masque toutes les feuilles du classeur sauf la feuille (Sommaire), à l’ouverture du fichier un mot de passe dans la msgbox donne à l’utilisateur accès à une feuille supplémentaire ou plusieurs selon le cas, à la fermeture toutes les feuilles sont cachées automatiquement, cette macro fonctionne parfaitement comme je le souhaite.
Je voudrais allez plus loin en interdisant la suppression de toutes les feuilles contenues dans ce classeur (ce n’est pas la première fois que par erreur une personne supprime une feuille pour une raison X).
Mon souci dans l’état actuel du fichier, si on fait clic droit sur une feuille non cachée on peut la supprimer.
Aussi je pensais qu’en mettant le petit bout de code ci-dessous dans chaque feuille le problème serait réglé …. Hélas ce n’est pas le cas, si j’active le code ci-dessous qui est actuellement uniquement dans la feuille (Sommaire) la msgbox s’ouvre bien mais si je rentre un code d’accès pour un utilisateur aucune feuille n’apparait.
Je souhaiterai pouvoir activer les feuilles masquées et empêcher la suppression de feuilles.
J’ai essayé pas mal de choses mais mes compétences en VBA ne me permettent pas de solutionner le problème.
Merci pour votre aide.
Private Sub Worksheet_Activate()
ThisWorkbook.Protect "1"
End Sub
Private Sub Worksheet_Deactivate()
ThisWorkbook.Unprotect "1"
End SubBonjour,
Plus que la protection des feuilles/onglets, je pense que vous devriez jeter un oeil ici Protéger un classeur - Support Microsoft (protection de la structure du classeur)
Bonjour,
Est ce qu'en interdisant le clic droit cela te suffirait ?
Si oui voila ce qu'il te faut utiliser
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Cancel = True
End SubBonjour Jacky, merci pour ta réponse
Juste avant les précisions ci-dessous il est possible que je paramètre mal en passant par révision.
J'ai déjà essayé de protéger par révision le classeur : dans ce cas dans la macro pour afficher les feuilles ne fonctionne plus, il n'est plus possible de donner les accès aux feuilles des utilisateurs.
Dans le cas de la protection de la feuille par révision : l'utilisateur ne pourra plus supprimer des lignes dans sa feuilles ou modifier un format de cellule ou ...etc, il n'y a pas l'option d'empêcher la suppression de feuille par contre il faut qu'il puisse entrer des données et faire pas mal de choses.
Ce que je souhaite si tu regarde mon fichier c'est pouvoir donner l'accès aux utilisateurs mais qu'en même temps il ne soit pas possible de supprimer une feuilles du classeur
merci pour ton aide
pour ta deuxième réponse avant je j'essai sur le fichier si ta solution empêche le clic uniquement sur l'onglet oui, si çà empêche le clic droit sur toute la feuille non
rebonjour Jacky,
C'est bien ce qu'il me semblai avec ta solution du clic droit plus possible de faire copier/coller ....etc
ce n'est pas viable pour les utilisateurs.
J'ai peut etre été un peu trop vague, mais en appelant
ThisWorkbook.Unprotect Password:="password"Avant vos manipulations d'onglets, et ensuite
ThisWorkbook.Protect Password:="password"Pour reverrouiller le classeur, je ne vois pas où vous pouvez avoir un problème. C'est la manière classique de faire.
Certes avec ma proposition, l'utilisation du clic droit étant interdite, certaines fonctions ne sont plus disponibles telles que copier/coller
Par contre la proposition de saboh12617 te permet de protéger ton workbook, ou éventuellement une feuille. Est ce que cela te suffit ?
Quant à
je paramètre mal en passant par révision
je ne comprends pas
merci pour votre réponse saboh12617,
Si j'ai bien compris avec le code ci-dessous, (mes connaissances en VBA sont limitées)
ThisWorkbook.Unprotect Password:="password"
ThisWorkbook.Protect Password:="password"
cette façon de faire implique d'aller dans les macros pour activer protéger/déprotéger ou de mettre des boutons pour protéger/déprotéger le classeur sur chaque feuille d'utilisateur, le problème que je voit c'est que si le classeur est déverrouillé alors la manip de suppression de feuille est possible, c'est ca ?
d'où ma volonté de de faire comme dans mon premier message
(Je souhaiterai pouvoir activer les feuilles masquées et empêcher la suppression de feuilles, ne pouvoir ni supprimer la feuille Sommaire qui est toujours visible ni la feuille sur laquelle travaille un utilisateur. Mais de laisser la possibilité de travailler normalement aux utilisateurs)
Vous faites beaucoup d'hypothèses et peu d'essais… La protection du classeur (Workbook.Protect ou le 1e lien que je vous ai envoyé) bloque la suppression, l'ajout, le masquage et le déplacement des feuilles. Point. Les utilisateurs peuvent travailler normalement pour le reste. C'est exactement ce que vous demandez.
Maintenant oui, il n'y a pas de solution miracle, il va falloir revoir votre code et ajouter, à chaque fois que c'est nécessaire, les instructions de déverrouillage et reverrouillage quand vous voulez que vos macros s'occupent des feuilles.
Si vous avez un code mal structuré c'est un autre problème, mais arretez de rejeter la solution alors qu'elle correspond parfaitement à la description du problème " si on fait clic droit sur une feuille non cachée on peut la supprimer". Il n'existe pas de fonction VBA de base pour en meme temps afficher les feuilles.
Peut etre qu'on peut vous écrire un Sub générique qui affiche masque les feuilles voulues, ca vous simplifiera certainement votre code, mais pour cela, besoin de bien comprendre ce que vous voulez.
Ci-joint une proposition :
Mon cher Papy64, vous vous entêtez
Nous vous avons bien précisé qu'il vous suffit de protéger soit votre workbook complet, soit les feuilles une par une pour interdire la suppression des ou d'une feuille.
Je vous rappelle ce que vous a dit saboh12617
La protection du classeur (Workbook.Protect ou le 1e lien que je vous ai envoyé) bloque la suppression, l'ajout, le masquage et le déplacement des feuilles. Point. Les utilisateurs peuvent travailler normalement pour le reste. C'est exactement ce que vous demandez.
C'est clair
saboh12617, au plaisir de vous croiser sur le forum un jour prochain
Merci saboh12617 pour votre fichier corrigé, la solution que vous proposez est exactement ce que je recherchais.
Je me suis certainement mal exprimé et je le regrette, d'où peut être toute cette incompréhension, loin de moi l’idée de rejeter une de vos solutions, ma macro était mal structurée effectivement pour ce que je voulais faire. Les prochaines fois où je demanderai de l’aide sur le forum je vais tâcher de mieux m’expliquer pour éviter ce genre d’incident.
En tout cas Je tiens à vous remercier sincèrement tous les deux pour votre aide, l’attention, et les solutions que vous m’avez proposées et apportées.
Cdt
Il n'y a pas de mal, on a tous des questions, surtout quand on débute. Mais il faut prendre le temps de bien les poser car on a tous une interprétation différente, et plus la demande est formulée clairement, plus la solution est simple et rapide.
En l'occurrence votre demande était bien posée, c'est plutôt après que je me suis perdu. Bon peu importe.
Si j'écris c'est surtout pour souligner un dernier point :
Je ne sais pas quel sera l'usage de votre classeur, mais j'espère qu'il ne contiendra pas de données sensibles. En effet n'importe qui sachant ouvrir l'éditeur VBA peut retrouver très facilement l'ensemble des mots de passe. S'il s'agit, je ne sais pas, d'une application pour réserver la cantine ou que sais-je, on s'en fiche. Mais tenez en compte, avec le code actuel vous avez tous les mots de passe "en clair", même celui de protection du classeur.
Pour répondre à votre commentaire sur les données sensibles ou pas du fichier original, effectivement certaines données sont sensibles.
Pour éviter la visibilité des mots de passe, j’ai prévu de sécuriser les macros comme ceci :
Dans Propriétés de VBAPProject…Verrouiller le projet pour l’affichage (avec un mot de passe).
Si je ne me trompe pas, normalement les mots de passe ne sont plus accessibles.
Un grand merci pour votre aide et vos conseils