XL 2010 Macro pour masquer des feuilles avec MDP

BOURGUIGNON

XLDnaute Nouveau
Bjr,
Sur mon fichier Excel j'ai 6 personnes; j'ai créé une macro pour que chaque personne puisse ouvrir uniquement sa feuille (et pas les autres) en entrant son MDP (pour l'instant le MDP de chacun est son prénom). Mon souci est que la fenêtre qui s'ouvre (après avoir cliqué sur sur le Bouton dans la feuille d'accueil) qui demande le MDP, s'ouvre 6 fois (il faut rentrer 6 fois son MDP). Pour info le MDP "eric" (administrateur) ouvre toutes les feuilles.
Merci de me donner l'astuce pour n'avoir qu'1 fois l'ouverture de la fenêtre pour rentre le MDP et non 6 fois.
 

Pièces jointes

  • Feuilles de tâches.xlsm
    51.6 KB · Affichages: 33

BOURGUIGNON

XLDnaute Nouveau
C'est parce que la feuille n'est pas protégée par un mot de passe, alors la dé-protection n'en demande pas un.
Maintenant si vous avez peur qu'un collaborateur ne se souvienne plus de son mot de passe, peut être ne faut-il pas employer le mot de passe de protection de la feuille, mais si vous voulez que ce soient des mots de passe perso, vous ne m'avez toujours pas dit où vous voulez qu'ils soient stockés, pour que toute personne un peu curieuse finisse par les trouver. Une solution en stockant dans un nom propre à la feuille plutôt un codes d'accès calculé d'après le mot de passe :
VB:
Option Explicit
Sub VoirFeuille()
   Dim Nom As String, Rép As String, Wsh As Worksheet, CodAcc#, CodCry#
   Nom = InputBox("Nom ?"): If Nom = "" Then Exit Sub
   On Error Resume Next
   Set Wsh = ThisWorkbook.Worksheets(Nom)
   If Err Then MsgBox "il n'existe pas de feuille """ & Nom & """.", _
      vbCritical, "Voir feuille": Exit Sub
   CodCry = CodeCrypté(InputBox("Mot de passe ?"))
   CodAcc = Wsh.[CodeDAccès]
   If Err Then
      If CodeCrypté(InputBox("Confirmez ce mot de passe SVP.")) <> CodCry _
         Then MsgBox "Accès dénié.", vbCritical, "Voir feuille": Exit Sub
      Wsh.Names.Add "CodeDAccès", CodCry
   ElseIf CodCry <> CodAcc Then
      MsgBox "Accès dénié.", vbCritical, "Voir feuille": Exit Sub: End If
   Wsh.Visible = xlSheetVisible
   Wsh.Activate
   If UCase(Nom) = "ERIC" Then
      For Each Wsh In ThisWorkbook.Worksheets
         Wsh.Visible = xlSheetVisible: Next Wsh: End If
   End Sub
Function CodeCrypté(ByVal MdP As String) As Double
   Const NOr = (5 ^ 0.5 + 1) / 2: Dim Code#, P&, A#
   For P = 1 To Len(MdP): A = Asc(Mid$(MdP, P, 1)) / &H100
      Code = (Code + A) ^ 7 + NOr: Code = Code - Int(Code): Next P
   CodeCrypté = Int(Code * 1E+15)
   End Function
Sub MotDePasseOublié()
   If MsgBox("Êtes-vous sûr de vouloir supprimer le code d'accès de cette feuille ?", _
      vbYesNo + vbExclamation, "Mot de passe oublié") = vbNo Then Exit Sub
   On Error Resume Next
   ActiveSheet.Names("CodeDAccès").Delete
   End Sub
Comme ça, même si c'est toujours un peu moins inviolable que le mot de passe de protection de la feuille, au moins personne à part son auteur ne sait quel mot de passe aboutit à ce code d'accès enregistré.
Super merci bcp vous êtes un caïd ; vous êtes informaticien ou quoi ? Petite dernière question si on veut être puriste…. Si la personne ne se souvient plus de son MDP peut on le retrouver ET/OU le changer ? Merci par avance
 

Dranreb

XLDnaute Barbatruc
Je le fus, mais je suis à la retraite.
On ne peut plus retrouver un mot de passe oublié, mais on peut supprimer le code d'accès de la feuille active au moyen de la Sub MotDePasseOublié
Il s'en suivra que tout mot de passe tapé par la suite sera accepté et enregistrera un nouveau code d'accès, sous réserve qu'il sera dûment confirmé.
 

BOURGUIGNON

XLDnaute Nouveau
Je le fus, mais je suis à la retraite.
On ne peut plus retrouver un mot de passe oublié, mais on peut supprimer le code d'accès de la feuille active au moyen de la Sub MotDePasseOublié
Il s'en suivra que tout mot de passe tapé par la suite sera accepté et enregistrera un nouveau code d'accès, sous réserve qu'il sera dûment confirmé.
Ca se voit qu'il y a du métier... J'ai fait un essai et pour cyrille j'ai rentré un mauvais MDP; par contre j'ai message "accès dénié" mais pas de message "Êtes-vous sûr de vouloir supprimer le code d'accès de cette feuille ?".
Pour pousser encore plus loin : imaginons que Ginette tape le nom de cyrille et bien entendu un mauvais MDP. Si la fonction de proposer un nouveau MDP fonctionne alors rien n'empêchera Ginette de changer le MDP de cyrille et pouvoir accéder à sa feuille ?... (je suis un peu tordu...) mais j'envisage tous les cas de figure.
Le mieux serait de donner accès qu'à l'Administrateur (Eric => Moi) qui lui peut changer le MDP de ses collaborateurs ?
Faisable ? très sûrement par un informaticien à la retraite... Merci par avance, cdlt
 

Dranreb

XLDnaute Barbatruc
Indépendante de la VoirFeuille, seule la procédure MotDePasseOublié demande confirmation de la suppression du code d'accès de la feuille active seulement et non d'une autre masquée. En quoi vous intéressent-ils les mots de passe mis par ceux qui, contrairement à vous, n'ont accès qu'à leurs propre feuille ? J'ai l'impression que vous avez été égaré dans votre compréhension du système par une frustration infondée. Leur mot de passe ne vous regarde pas, un point c'est tout. S'il l'ont oublié, vous serez le seul habilité à leur permettre d'en mettre un autre, qui ne vous regardera pas d'avantage.
 

BOURGUIGNON

XLDnaute Nouveau
Indépendante de la VoirFeuille, seule la procédure MotDePasseOublié demande confirmation de la suppression du code d'accès de la feuille active seulement et non d'une autre masquée. En quoi vous intéressent-ils les mots de passe mis par ceux qui, contrairement à vous, n'ont accès qu'à leurs propre feuille ? J'ai l'impression que vous avez été égaré dans votre compréhension du système par une frustration infondée. Leur mot de passe ne vous regarde pas, un point c'est tout. S'il l'ont oublié, vous serez le seul habilité à leur permettre d'en mettre un autre, qui ne vous regardera pas d'avantage.
Suis tout à fait d'accord avec vous que leurs MDP ne m'intéresse pas (surtout que je suis Administrateur "eric" et se me donne accès à toutes leurs feuilles…) Par contre ça m'échappe la procédure si par exemple cyrille a oublié son MDP . comment peut il le changer ? Quand je teste et rentre un mauvais MDP pour cyrille je n'ai aucun message qui m'invite à changer le MDP. Comment cyrille devra t il procéder si ça arrive poru changer MDP ?
 

Dranreb

XLDnaute Barbatruc
S'il ne peut plus accéder à sa feuille parce qu'il a oublié le mot de passe, il devra vous demander à vous d'exécuter la procédure MotDePasseOublié sur sa feuille. Vous pouvez donner un autre nom à cette procédure d'ailleurs, NettoyerCodeAccès ce serait pas mal.
 

Dranreb

XLDnaute Barbatruc
Menu Développeur, groupe Code, commande Macros.
Je ne pense pas qu'il faille prévoir une commande pour ça, mais il serait possible de l'affecter à un bouton de formulaire présent sur toutes les feuilles. Vous pouvez aussi faire touche F5 sur la procédure dans VBA. Où définir une commande personnalisée du ruban ou de la barre d'accès rapide.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum, BOURGUIGNON, Dranreb

[juste pour infos]
@BOURGUIGNON
mais j'envisage tous les cas de figure.
Sauf celui qui consiste à ouvrir le classeur sans activer les macros
Il suffit ensuite de mettre le code VBA en commentaire.
Puis de déprotéger les feuilles (sans avoir connaissance du mot de passe)
Tous ces modes opératoires sont accessibles sur le net.
Donc sauf si les utilisateurs sont des "néophytes" d'Excel et pas tentés d'avoir d'autres feuilles que les leurs, le code de Drandreb est effectivement du bel ouvrage (comme toujours) mais comme tous les codes VBA il nécessite d'activer les macros.
Or Microsoft nous a laissé la possibilité d'ouvrir un classeur sans les activer.
[/juste pour infos]
 
Dernière édition:

BOURGUIGNON

XLDnaute Nouveau
Menu Développeur, groupe Code, commande Macros.
Je ne pense pas qu'il faille prévoir une commande pour ça, mais il serait possible de l'affecter à un bouton de formulaire présent sur toutes les feuilles. Vous pouvez aussi faire touche F5 sur la procédure dans VBA. Où définir une commande personnalisée du ruban ou de la barre d'accès rapide.
Merci bien
Menu Développeur, groupe Code, commande Macros.
Je ne pense pas qu'il faille prévoir une commande pour ça, mais il serait possible de l'affecter à un bouton de formulaire présent sur toutes les feuilles. Vous pouvez aussi faire touche F5 sur la procédure dans VBA. Où définir une commande personnalisée du ruban ou de la barre d'accès rapide.
Parfait merci bien mais quand j'exécute la macro MDP oublié il me demande si je suis sur de vouloir supprimer le code d'accès de la feuille je dis oui . ensuite j'essaye de rentrer cyrille puis un NOUVEAU MDP mais acès refusé donc à priori il ne réinitialise pas les MDP. Ai je loupé quelque chose ? merci
 

Pièces jointes

  • upload_2018-7-27_7-56-1.png
    upload_2018-7-27_7-56-1.png
    56.1 KB · Affichages: 27

BOURGUIGNON

XLDnaute Nouveau
Re

@BOURGUIGNON
Tu as zappé le message#24, non ?
C'est volontaire ?
Ou mon hygiène buccale laisserait-elle à désirer ? :D
En tout cas, toi qui dit envisager tous les cas de figures, tu n'envisages apparemment pas de lire tous les messages postés dans ta discussion (lol) ;)
A 22 000 km je ne peux pas savoir si tu te brosses bien la bouche ….;)
OK ta méthode mais désolé c'est Dranreb qui m'aide depuis le début donc je suis SA logique et non la tienne ...;)
 

Staple1600

XLDnaute Barbatruc
Re

@BOURGUIGNON
Tu n'as pas compris le sens du message#24 apparemment
Je te prévenais simplement qu'on peut facilement outrepasser la protection native d'Excel ou tout code VBA dit "de protection"
Et je te disais cela en réponse au fait que tu cherchais à envisager tous les cas de figures
(ce cas de figure, par exemple: un utilisateur "curieux' qui saura mettre en oeuvre ce que j'expliquais dans le message#24)

Tout comme tu as mal lu ce message de ma part où je t'encourageas à plutôt utiliser le code de Dranreb :rolleyes:
Re

Pour rejoindre Dranreb
Je te laisse faire des essais et/ou tatonner et/ou relire le message#4 ;)
Et en tirer les conséquences
Pour l'heure, moi je vais me coucher.
Bonne nuit.


Ps: Dans tous les cas, cela ne t’empêchait pas de me saluer ou de simplement faire un commentaire suite au message#24, non ? ;)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
À quelle instruction, l'accès refusé ?
Joins le classeur dans l'état actuel que je puisse voir ce qui cloche.
Concernant les observations de Staple1600, ça fait un moment que je me dis qu'il faudra tôt ou tard protéger le projet VBA. Mais rien ne presse. Ça compliquerait la mise au point de le faire tout de suite. Si les macros ne sont pas activées on ne peut activer aucune feuille VeryHidden.
Les noms CodeDAccès doivent être non visibles aussi pour qu'on ne puisse pas les supprimer dans le gestionnaire de noms.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir Dranreb

La protection du projet VBA s'outrepasse également.
Donc les feuilles seront accessibles ensuite, non ?
1) Ouverture sans activer les macros
2) Suppression de la protection du projet VBA et des feuilles
3) Mise en commentaires du code VBA de "protection"
4) Changer les propriétés de visibilité des feuilles

Evidemment, comme dit précédemment, il faut que l'utilisateur connaisse un peu VBA ou sache correctement utiliser un moteur de recherche.
Mais encore une fois, mon message#24 était là juste pour prévenir BOURGUIGNON que sa protection peut être rapidement caduque.
 

Discussions similaires

Statistiques des forums

Discussions
315 103
Messages
2 116 229
Membres
112 692
dernier inscrit
olivier Clech