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 :

code VBA pour password sur VBE [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut code VBA pour password sur VBE
    salut à tous,

    petite question TRES simple pour les spécialistes que vous êtes.

    peut-on, via le code VBA, activer/désactiver un mot de passe sur un projet VBA comme on peut le faire manuellement via l'interface?



    pour l'explication:
    -> je voudrais protéger le code pour éviter que n'importe qui aille y farfouiller au risque de supprimer des trucs et faire planter mon appli...

    -> MAIS, comme je génère du code dynamiquement via des fonctions perso, si je protège directement le projet via l'interface, ça plante étant donné que la génération dynamique de code ne marchera pas!

    -> l'idée: gérer l'activation/désactivation à la demande d'un password directement via le code source:
    * enlever le password AVANT un traitement particulier
    * le remettre une fois terminer

    maintenant il y a peut être aussi une autre solution que celle-ci.

    bref, tout avis sera bon à prendre!

    merci.
    @+

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    J'ai parcouru un peu internet. Apparemment, tu ne peux le faire qu'en utilisant SendKeys. Voici le code que j'ai trouvé (c'est en anglais, fais attention aux références à ajouter) :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    'need reference To VBA Extensibility 
    'need To make sure that the target project Is the active project 
    Sub test() 
        UnprotectVBProject Workbooks("ABook.xls"), "password" 
    End Sub 
     
    Sub UnprotectVBProject(WB As Workbook, ByVal Password As String) 
        ' 
        ' Bill Manville, 29-Jan-2000 
        ' 
        Dim VBP As VBProject, oWin As VBIDE.Window 
        Dim wbActive As Workbook 
        Dim i As Integer 
     
        Set VBP = WB.VBProject 
        Set wbActive = ActiveWorkbook 
     
        If VBP.Protection <> vbext_pp_locked Then Exit Sub 
     
        Application.ScreenUpdating = False 
     
        ' Close any code windows To ensure we hit the right project 
        For Each oWin In VBP.VBE.Windows 
            If InStr(oWin.Caption, "(") > 0 Then oWin.Close 
        Next oWin 
     
        WB.Activate 
        ' now use lovely SendKeys To unprotect 
        Application.OnKey "%{F11}" 
        SendKeys "%{F11}%TE" & Password & "~~%{F11}", True 
     
        If VBP.Protection = vbext_pp_locked Then 
            ' failed - maybe wrong password 
            SendKeys "%{F11}%TE", True 
        End If 
     
        ' leave no evidence of the password 
        Password = "" 
        ' go back To the previously active workbook 
        wbActive.Activate 
     
    End Sub 
     
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    Sub ProtectVBProject(WB As Workbook, ByVal Password As String) 
     
        Dim VBP As VBProject, oWin As VBIDE.Window 
        Dim wbActive As Workbook 
        Dim i As Integer 
     
        Set VBP = WB.VBProject 
        Set wbActive = ActiveWorkbook 
     
        ' Close any code windows To ensure we hit the right project 
        For Each oWin In VBP.VBE.Windows 
            If InStr(oWin.Caption, "(") > 0 Then oWin.Close 
        Next oWin 
     
        WB.Activate 
        ' now use lovely SendKeys To unprotect 
        Application.OnKey "%{F11}" 
        SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & Password & "~" 
        Application.VBE.CommandBars(1).FindControl(Id:=2578, recursive:=True).Execute 
        WB.Save 
    End Sub 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    Super, merci je testerai ça demain.

    J'ai aussi passé beaucoup de temps à chercher, mais sans résultats probants jusque là.

    Dans tous les cas, je mettrai le post à jour, OK ou KO.


  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, voir ici

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    hello!

    ok, grace aux différentes infos trouvées ici, j'ai trouvé quelque chose me convenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub ProtectVBProject(WB As Workbook, ByVal Password As String)
        Dim vbProj As Object
        Set vbProj = WB.VBProject
     
        If vbProj.Protection = 1 Then Exit Sub
        Set Application.VBE.ActiveVBProject = vbProj
     
        Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
        SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & Password & "~", True
     
        WB.Save
    End Sub
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
        Dim vbProj As Object
        Set vbProj = WB.VBProject
     
        If vbProj.Protection <> 1 Then Exit Sub
        Set Application.VBE.ActiveVBProject = vbProj
     
        SendKeys Password & "~~"
        Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
    End Sub
    MAIS, mais mais... ben oui sinon ce ne serait pas drôle...

    1.) pourquoi ProtectVBProject nécessite un save, alors que UnprotectVBProject est efficient immédiatement, sans save?
    -> d'un point de vue logique d'abord
    -> mais surtout aussi parce que le save génère le classique message d'avertissement

    -> pas glop en plein milieu des traitements de mon appli...

    2.) donc peut-on le trapper?
    -> j'ai déjà essayé avec un sendkeys ENTER inefficace (j'ai du me louper dans la syntaxe je suppose!)


  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Est-ce que tu as essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.DisplayAlerts = False
    A remettre à True après usage.

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    nickel pour l'avertissement!

    par contre, si la dé-protection fonctionne bien, je viens de me rendre compte que la re-protection elle nécessite la fermeture du fichier pour être prise en compte....

    pas gagné...

    c'est ça aussi que j'ai du mal à capter, que dans un sens l'effet soit immédiat et pas dans l'autre.....

    je ne peux pas fermer le fichier en plein milieu de mes traitements.

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 535
    Par défaut
    ok, merci pour la modif du code!

    par contre LA question maintenant :
    -> y a-t-il un moyen de prendre en compte la re-protection sans avoir à fermer le classeur (wb.save & wb.close)?

    chaque pas en avant soulève de nouveaux freins/problèmes...

  9. #9
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,
    Citation Envoyé par steph68b Voir le message
    y a-t-il un moyen de prendre en compte la re-protection sans avoir à fermer le classeur (wb.save & wb.close)?
    Non, que tu protèges le projet manuellement ou par code, la protection ne sera effective qu'à la réouverture du classeur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Erreur sur Code VBA pour enregistrement d'un document publiposté word
    Par AudREN dans le forum VBA Access
    Réponses: 3
    Dernier message: 25/09/2014, 13h22
  2. Réponses: 6
    Dernier message: 18/11/2013, 17h48
  3. Code vba pour ouverture en mode calcul sur ordre
    Par ciambe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/05/2013, 13h01
  4. [XL-2010] Code VBA pour trier sur combobox
    Par duplaly dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/04/2011, 17h56
  5. [XL-2007] code vba pour cliquer sur un bouton dans internet explorer
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/01/2011, 20h21

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