Protéger un onglet pour empêcher son ouverture

Tophe2

XLDnaute Impliqué
Bonjour le forum

Voilà j'ai un fichier avec plusieurs onglets, le problème c'est que plusieurs personnes peuvent consulter les onglets (sans modifier le contenu) je souhaiterai interdire l'accès de certains onglets et pouvoir laisser l'accès sur d'autres onglets en fonction du nom d'utilisateur et/ou de l'ordinateur utilisé.

Mais je ne sais même pas si cela est possible ?

Et si oui par où il faut commencer, explication et exemple (sur un onglet ou plusieurs).

Ci joint un fichier avec des onglets, il y a une macro présente à l'intérieur qui me copie 52 fois la feuille (semaine par semaine) pour info.

Merci par avance
Cordialement
Christophe.
 

Pièces jointes

  • Matrice SEMAINE.zip
    61.4 KB · Affichages: 128

kjin

XLDnaute Barbatruc
Re : Protéger un onglet pour empêcher son ouverture

Bonsoir,
Et si oui par où il faut commencer....
Par le commencement ! :D
Tous les feuilles dont l'autorisation est conditionnée doivent être masquées/démasquées par macro (en dur)
Il faut créer une feuille supplémentaire (masquée aussi évidemment) dans laquelle on trouve dans une colonne le nom du USER (Application.UserName) et dans la colonne adjacente les feuilles autorisées.
A l'ouverture, du classeur, une macro récupère le nom du USER et démasque les feuilles autorisées pour ce USER
A+
kjin
 

Tophe2

XLDnaute Impliqué
Re : Protéger un onglet pour empêcher son ouverture

Bonsoir kjin

Pourrais tu me donner un exemple de macro à écrire si j'ai bien compris il faut une feuille caché avec deux colonnes 1 pour le nom d'utilisateur et l'autre pour les feuilles autorisés.

Mais j'aurai vraiment besoin d'aide sur l'écriture d'une telle macro.

Merci pour ton aide
Christophe.
 

kjin

XLDnaute Barbatruc
Re : Protéger un onglet pour empêcher son ouverture

Re,
Regarde les macros dans le module de ThisWorkBook
Je les ai désactivées et mis des données bidons dans la feuille USER pour que tu puisses tester. J'ai aussi viré qq feuilles pour alléger
Si les macros sont désactivées à l'ouverture, les feuilles resteront masquées
Il est impossible d'afficher une feuille masquée par vba, via le menu afficher d'excel.
Comme tu crées une copie des feuilles, le code ne sera pas exporté, donc c'est le classeur entier qu'il faudra enregistrer sous un autre nom, à moins que tu ne donne d'autre précisions
Il faut peut-être ensuite protéger ton code par le menu outils/propriétés/protection du menu vbe.
A+
kjin
 

Pièces jointes

  • tophe.zip
    27.5 KB · Affichages: 309
  • tophe.zip
    27.5 KB · Affichages: 328
  • tophe.zip
    27.5 KB · Affichages: 332

Tophe2

XLDnaute Impliqué
Re : Protéger un onglet pour empêcher son ouverture

Re,

Oui je crée 52 copies avec les dates des semaines qui changent pour avoir un fichier par semaine, si je copie le fichier il ne me modifiera pas les semaines ?.

Comment dois je faire pour ne pas perdre la macro dans la copie des fichiers ?

Quand tu dis il faut protéger le code c'est à dire l'accès à l'éditeur VBA ?

J'ai une autre question, le fait de masquer les feuilles en fonction des utilisateurs ne permattra pas à l'utilisateur en question de la démasquer par excel ? (format, feuille, afficher)

Merci pour ton aide très précieuse.
Je testerai en principe demain.
Christophe.
 

kjin

XLDnaute Barbatruc
Re : Protéger un onglet pour empêcher son ouverture

Re,
Oui je crée 52 copies avec les dates des semaines qui changent pour avoir un fichier par semaine, si je copie le fichier il ne me modifiera pas les semaines ?.
Quand tu enregistres le classeur sous un autre nom, tu crées une copie
Aucune crainte pour les autres classeurs donc
Comment dois je faire pour ne pas perdre la macro dans la copie des fichiers ?
Si tu copies le classeur, les macros et la protection VBE le seront aussi
Quand tu dis il faut protéger le code c'est à dire l'accès à l'éditeur VBA ?
Je ne dis pas que c'est indispensable, à toi de voir s'il faut empêcher quiconque d'aller bidouiller le code.
En outre, ça n'empêchera pas les futés de désactiver le code de protection
...le fait de masquer les feuilles en fonction des utilisateurs ne permattra pas à l'utilisateur en question de la démasquer par excel ? (format, feuille, afficher)
C'est écrit en toutes lettres dans mon message précédent (tu n'as donc pas tout lu) - NON !
A+
kjin
 

Tophe2

XLDnaute Impliqué
Re : Protéger un onglet pour empêcher son ouverture

Re,

Merci pour tant d'explications, j'aurai certainement d'autres questions après la mise en place de cela si besoin jeme permattrai de reveir sur le message.

J'avais bien tout lu mais pas forcément tout assimilé ou compris !!!!

Existe t il un moyen de connaitre l'username d'un utilisateur sans avoir à le demander.

Merci
CHristophe.
 

Tophe2

XLDnaute Impliqué
Re : Protéger un onglet pour empêcher son ouverture

Bonjour le forum

Je suis en train d'essayer de protéger les onglets en fonction du nom de l'utilisateur en passant par outil/option/général pour connaitre le nom mais cela me semble simple de pouvoir le modifier et donc plus rien ne fonctionnerai car les onglets sont tous masqués.

Existe t il une autre solution ou écriture pour ne pas pouvoir modifier cela.

J'utilise la proposition de Kjin pour faire les essais
Cordialement.
Christophe.
 

Tophe2

XLDnaute Impliqué
Re : Protéger un onglet pour empêcher son ouverture

Re à tous

Voilà j'ai commencé à protoger les onglets pas de problème cependant après chaque enregistrement il m'affiche une erreur et me garde uniquement la feuil1. Pouvez vous m'expliquer pourquoi il y a une erreur car il garde bien une feuille affichée.

Il est vrai qu'à chaque nouvelle année il y a la copie de 52 fichiers avec les dates qui se mettent à jours semaine 1, Semaine 2..... est il possible de copier le contenu du thisworkbook afin d'éviter de copier 52 fois le code.

Ci joint le fichier j'ai rendu inactif le code qui me fait une erreur afin de vous présenter le document avant que les feuilles soient masqués.

Bonne journée
Cordialement
Christophe.
 

Pièces jointes

  • Copie de Matrice SEMAINE.zip
    72.3 KB · Affichages: 100

Lii

XLDnaute Impliqué
Re : Protéger un onglet pour empêcher son ouverture

Bonjour

avec ce que j'ai compris : fichier allégé à ouvrir la première fois en désactivant les macros et en définissant les données en feuille "Admin".
Attention, il faut passer par l'éditeur pour la rendre visible.
L'enregistrement permet de cacher toutes les feuilles exceptée "Feuil1" (dont j'ignore la finalité).
 

Pièces jointes

  • UsernameFeuillesVisibles.zip
    32.6 KB · Affichages: 172

Tophe2

XLDnaute Impliqué
Re : Protéger un onglet pour empêcher son ouverture

Bonjour Lii

A l'ouverture il m'affiche un erreur 9 l'indice n'appartient pas ..., de quoi cela peut il venir.
En ce qui concerne la feuil1 je voulais tout simplement que cela s'ouvre sur une feuille "Accueil", je me suis trompé cette feuille 1 sert de liste pour des données validation.

Je ne sais pas de quoi vient cette erreur!!!

Merci
Cordialement
Christophe.
 

Lii

XLDnaute Impliqué
Re : Protéger un onglet pour empêcher son ouverture

Re

Ce genre d'erreur se produit quand une feuille inexistante est appelée.
Vérifie que tu as bien un onglet pour chaque nom de la liste "user" de la feuille "Admin" en plus des autres et en faisant attention à la casse.
Les noms de la liste des feuilles de "Admin" doivent-être identiques à ceux des onglets correspondants.
Tiens nous au courant.
 

Tophe2

XLDnaute Impliqué
Re : Protéger un onglet pour empêcher son ouverture

Re,

Toujours le même problème le nom des onglets vérifiés mais à l'ouverture toujours erreur 9 qui va directement sur " Sheets(Environ("username")).Visible = True ", si cela peut aider.

Christophe.
 

Lii

XLDnaute Impliqué
Re : Protéger un onglet pour empêcher son ouverture

re

remplace le code par
Code:
Private Sub Workbook_Open()
  Application.ScreenUpdating = False
  [B]MsgBox Application.Username[/B]
  [B]MsgBox Environ("username") [/B]
  Sheets(Environ("username")).Visible = True
  With Sheets("Admin")
    For i = 2 To .Range("A6500").End(xlUp).Row
      If UCase(.Cells(i, "A")) = UCase(Environ("username")) Then
        Sheets(.Cells(i, "B").Value).Visible = -1
        Exit For
      End If
    Next
  End With
  Application.ScreenUpdating = True
End Sub
et lance pas à pas (F8)


Dans l'un ou l'autre cas, il doit y avoir un onglet avec le nom valable !
 

Tophe2

XLDnaute Impliqué
Re : Protéger un onglet pour empêcher son ouverture

Re,

Je viens de faire ce que tu me proposes, il m'affiche deux noms différents dans les messages.

Puis me signale une erreur 9 sur la ligne : " Sheets(Environ("username")).Visible = True " en faisant la méthode pas à pas.

Je ne comprend pas d'où vient l'erreur. Car si le fichier fonctionne chez toi pourquoi ne fonctionne t il pas sur mon ordinateur.

Christophe.
 

Discussions similaires