IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Anticiper déprotection VBA par code avant protection


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Anticiper déprotection VBA par code avant protection
    Bonjour à tous,

    Tout d'abord merci d'avance à ceux qui prendront le temps de lire ma demande et éventuellement d'y répondre

    Je programme actuellement en VBA un dispositif de protection des feuilles d'un classeur par un système de login/mot de passe. Chaque login pouvant avoir accès à différentes feuilles. Il est destiné aux autres équipes de ma société pouvant être amenées à travailler sur des données "relativement" sensibles, ce dispositif sera donc installé sur différents fichiers excel. (on n'est pas sur du secret défense non plus ! )

    Là où j'ai besoin d'aide, c'est que mon dispositif pour être efficace s'appuie sur la protection du projet VBA par un mot de passe. Le MDP étant choisi par celui qui met en place le dispositif, je ne le connais pas.

    Seulement voilà, pour des raisons de sécurité, j'aimerais inclure dans le code une porte de sortie que seul moi connaisse permettant de déverrouiller le code VBA (par une instruction définie au moment du login).

    D'où ma question, est-il possible d'écrire un code dans un projet VBA avant de le protéger lui permettant de se "déprotéger" lui même ?

    J'espère avoir été assez clair dans mes explications, si c'est pas le cas n'hésitez pas à m'en demander plus !

    Merci d'avance pour votre aide

  2. #2
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Salut,
    Je pense que le mdp VBE doit être le tien et que tu dois donner la possibilité à la personne de modifier le mdp de la feuille. On est bien d'accord les personnes peuvent ouvrir le classeur mais pas voir certaines feuilles ? ou juste ne pas les modifier ?

    On m'avait donné ce code , je ne connais pas l'auteur
    à mettre dans le code de la feuille que l'on veut protéger.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Option Explicit
    Public Feuille_cible
    Private Sub Worksheet_Activate()
    
        Dim Message
        Feuille_cible = ActiveSheet.Name
        On Error Resume Next
            Dim MyPassword As String
            Sheets(1).Select
            MyPassword = "azerty"    'là tu choisi le mot de passe que tu souhaite appliqué a ta feuille
    
            Range("az65000").Select   'choisi une cellule qui est loin de ton champ de donnees
            Sheets(Feuille_cible).Protect Password:=MyPassword
    
            Message = InputBox("Mot de passe:", "Entrer le mot de passe pour consulter la feuille")
            If Message = MyPassword Then
                Sheets(Feuille_cible).Unprotect Password:=MyPassword
                verrouEvent = 1
                Sheets(Feuille_cible).Select
                Sheets(Feuille_cible).Range("k6").Select
    
                Exit Sub
            Else: Sheets(1).Select
    
            End If
        Else
            Sheets(Feuille_cible).Select
    End Sub
    Tu peux ajouter un code d'initialisation
    soit en inscrivant ton mdp dans une cellule d'une feuille non visible ( mafeuille.Visible = xlVeryHidden )
    soit dans un NOM masqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub nomMasque()
    ThisWorkbook.Names.Add Name:="MDPass", _
            RefersTo:="azerty", _
            Visible:=False
     
    End Sub
     
    Sub verif_nomMasque()
    NomMasqué = Mid(ThisWorkbook.Names("MDPass").Value, 3)
    'retire les "
    NomMasqué = Left(NomMasqué, Len(NomMasqué) - 1)
    MsgBox (InputBox("mdp ?") = NomMasqué)
     
    End Sub
    ou encore dans une propriété personnalisée du classeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'Récupération de la valeur de la propriété personnalisée (mdp) du classeur dans la variable p
    Set p = ActiveWorkbook.CustomDocumentProperties("mdp")
     
    'Test si la valeur récupérée dans p est vide ou non : si oui, on rentre dans la condition, ce qui signifie alors que c'est la première fois que l'on ouvre le classeur.
    If p Is Nothing Then
     
        Set ws_Page = ActiveWorkbook.Sheets(1)
     
       'Affectation de la valeur du MDP  à la propriété personnalisée (mdp) du classeur
        Set p = ActiveWorkbook.CustomDocumentProperties.Add("mdp", False, msoPropertyTypeString, "azerty")
     
    End If

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour Oliv, merci pour ton aide.

    Pour répondre à ta question, il s'agit de bloquer l'accès à certaines feuilles effectivement, pas à toutes.

    Par ailleurs, merci pour l'idée de la propriété personnalisée, ça pourrait être une solution alternative à mon système initial ! (que je décris juste ci-dessous)

    Cependant j'ai l'impression de ne pas avoir été assez clair, je me permets donc de reformuler/donner plus de précisions sur mon problème

    En fait, tout le système de gestion d'accès aux feuilles je l'ai déjà réalisé. Pour résumer, j'utilise une feuille Administration où l'administrateur du fichier désireux d'en protéger l'accès détermine le statut public ou restreint pour chacune des feuilles. Ensuite, dans une autre partie de la feuille l'administrateur paramètre les logins d'utilisateur et les MDP correspondants ainsi que les droits d'accès pour chaque feuille dont l'accès est restreint (oui/non).

    Ensuite, le dispositif fonctionne grâce à un bouton d'ouverture/fermeture de session qui appelle deux macros "ouverture de session" ou "fermeture de session". La fermeture de session masque en veryhidden toutes les feuilles privées ainsi que la feuille d'administration tandis que l'ouverture de session demande un login et un MDP, vérifie la correspondance dans la feuille administration et démasque les feuilles auxquelles le login spécifié a accès.

    Le hic est le suivant : mon système implique la protection de l'accès au projet VBA pour empêcher d'afficher les feuilles manuellement via l'accès aux propriétés des feuilles. De plus, comme mon dispositif est destiné à être adapté sur divers fichiers dont je n'ai pas a priori la connaissance, je ne serai pas amené moi même à déterminer le mot de passe du projet VBA.
    Or, le risque aujourd'hui est que l'auteur d'un fichier utilisant mon dispositif soit oubli son MDP, soit quitte la société en ne donnant pas le mot de passe bloquant ainsi l'accès au contenu VBA.

    J'ai bien pensé à inclure en dur dans le code une instruction que lirait la textbox d'entrée du login permettant d'afficher toutes les feuilles masquées. Cependant, dans la mesure où ce fichier pourrait également contenir d'autres macros j'aurais aimé inclure un système de déprotection du code VBA.

    D'où ma question que je reformule : est-il possible de déverrouiller un projet VBA protégé par MDP de l'intérieur grâce à un code inclus avant sa protection ? Le dit code pourrait par exemple permettre de 1. soit récupérer le mot de passe (mais j'en doute l'information étant sans doute chiffrée) 2. soit déverrouiller directement le code (j'avais pensé à workbook.unprotect cependant ça ne concerne que le mot de passe d'ouverture du classeur).

  4. #4
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Je confirme ce que j'ai écris, le code VBA dois être protégé par TON mdp.

    et tant que le mdp "feuille" n'a pas été renseigné l'accès est complet.

    Je pense que tu n'auras pas toutes les protections en juste passant les feuilles en veryhiden, par exemple si ton code de changement pour visible se trouve dans un autre classeur lui non protégé.

    si tu veux tu peux m'envoyer en MP un exemple de classeur VERROUILLE je testerai un hackage

    edit: tu peux enlever un mdp parle code mais il faut le connaitre !

Discussions similaires

  1. Mot de passe VBA par code
    Par charliejo dans le forum VBA Access
    Réponses: 6
    Dernier message: 16/09/2008, 00h44
  2. [VBA-E]ajouter un textbox sur un formulaire par code?
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 22/03/2006, 09h33
  3. Définir marge par code VBA
    Par tamyme dans le forum Access
    Réponses: 2
    Dernier message: 10/03/2006, 09h43
  4. Comment faire Copier/Coller par code VBA sur INTERNET...
    Par GESCOM2000 dans le forum Access
    Réponses: 5
    Dernier message: 02/01/2006, 13h19
  5. Réponses: 4
    Dernier message: 13/10/2005, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo