Re : Classeur partagé et usage privatif
Bonsoir à tous,
Si mon problème de sécurisation d'une partie des données sur un classeur partagé n'est pas résolu dans les "règles de l'art", j'ai trouvé un moyen d'éviter des accès indésirables de la manière suivante.
2 raisons pour vous la présenter :
- il y a probablement une faille à laquelle je n'ai pas pensé.
- Comme il emm....dera plus d'un curieux qui voudra mettre son nez dans la partie protégée, il peut être utile à quelqu'un.
Le principe : décourager les moins obstinés et les moins compétents dans Excel
Données de départ :
J'ai donc un classeur partagé axé autour d'une base de données.
Les utilisateurs ("Grouillots dans mon exemple) saisissent via un userform.
Les données sont utilisées pour des stats (définir des risques potentiels dans mon cas)
Seul un responsable ("Chefaillon") dispose de l'accès aux données sensibles.
A l'ouverture du classeur, il est entièrement protégé
- les feuilles sensibles sont cachées (xlVeryHidden) et protégées par un mot de passe (Protect)
- pour chaque feuille sensible, seule la cellule A1 est autorisée (activeSheet.ScrollArea = "A1")
- les onglets ne sont pas visibles, de même que la barre de formule, les barres de défilement H et V et accessoirement les entêtes de lignes et le quadrillage.
- quelques données nécessitant une certaine discrétion sont affichées dans des cellules lointaines [cells(3,256) par ex.] avec une couleur de police similaire à celle de la cellule.
- Le mode de calcul automatique est désactivé .[Calculation = xlCalculationManual] de même que la mise à jour de l'écran [.ScreenUpdating = False]
A l'ouverture, Grouillot n'a accès qu'à la feuille "Accueil". Feuille protégée avec un bouton permettant d'accéder à un UserForm multipage.
- pour sa saisie, il n'a accès qu'à la 1re page du UserForm. En validant sa saisie, la macro ôte la protection ( Visible + unprotect), libère les cellules (ScrollArea =""), et remet tout en place dès la fin du transfert des données avec retour à la page d'accueil.
- la sélection des autres pages déclenche l'apparition d'un UserForm demandant la saisie d'un mot de passe pour accéder aux feuilles sensibles. Il est boulé après 4 tentatives infructueuses avec fermeture du classeur.
Si Grouillot cherche à accéder au classeur en réactivant les onglets, l'arrivée sur l'une des pages sensibles vérifie et comble les lacunes de protection. il est aussitôt redirigé vers la page d'accueil. Et s'il arrive malgré tout a accéder à la feuille, chaque sélection de cellule le fait retourner à la cellule A1 tandis que la couleur de la police prend automatiquement la couleur de la cellule.
Quand à Chefaillon, il n'a accès au données sensibles qu'après saisie du mot de passe. Les feuilles sensibles sont libérées et la mise a jour se fait par un bouton lié à la procédure Calculate. Tout est reprotégé dès qu'il quitte la zone sensible.
Et évidemment le code source est protégé par un mot de passe 18 caractères (chiffre, min, maj et caratères spéciaux). ca doit amuser un "casseur de code" pendant un moment !
---------
Cette méthode artisanale et bancale, bien qu'alourdissant le code, doit à mon sens décourager 99% des curieux.
Evidement je sais qu'un cador d'Excel doit contourner çà sans problème (notamment l'accès au code source via un tableur concurrent d'Excel), mais disons que c'est la prime à la compétence.
Question : est-ce qu'en créant un autre classeur on peut récupérer les données sur les pages cachées (xlVeryHidden) via un code en VBA ?
Bonne soirée
Kotov