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 :

Mot de passe mais pas de protection


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 25
    Par défaut Mot de passe mais pas de protection
    Bonjour à tous !

    Voilà, je travaille sur un projet avec mot de passe mais au lancement de mon fichier, je veux importer un module de l´extérieur donc je désactive la protection, j´importe puis je la réactive, voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Workbook_Open()
        'Désactive la protection
        UnprotectVBProject ThisWorkbook, "pass"
        DoEvents
        'on Importe
        ImportModul
        'On réactive la protection
        ProtectVBProject ThisWorkbook, "pass"
        DoEvents   
    End Sub
    Les fonctions d´activation et de désactivation sont ici :
    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
    Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
      Dim vbProj As Object
     
      Set vbProj = WB.VBProject
     
      'can't do it if already unlocked!
      If vbProj.Protection <> 1 Then Exit Sub
     
      Set Application.VBE.ActiveVBProject = vbProj
     
      ' now use lovely SendKeys to quote the project password
      SendKeys Password & "~~"
      Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
    End Sub
    Sub ProtectVBProject(WB As Workbook, ByVal Password As String)
      Dim vbProj As Object
     
      Set vbProj = WB.VBProject
     
      'can't do it if already locked!
      If vbProj.Protection = 1 Then Exit Sub
      Set Application.VBE.ActiveVBProject = vbProj
     
      ' now use  SendKeys to set the project password
      SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & _
    Password & "~"
     
      Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
    End Sub
    Tout semble bien marcher mais le problème c´est qu´après ces procédures, je fais ALT + F11 et je peux accéder au code sans rentrer de mot de passe ! Pourtant quand je regarde les propriétés du projet, il y a bien un mot de passe. (les fonctions ont bien marché). Mais vu qu´il s´est déjà ouvert avec le mot de passe, il pense que c´est bon alors que je voudrais qu´il me le demande
    Quelqu´un a-t-il une solution à mon problème ?

    Merci d´avance de votre aide
    @ +

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Si je savais, je mettrais ta question dans les "trucs et astuces" avec comme sujet : "Comment afficher un code protégé par mot de passe ?"
    As-tu essayé de fermer ton classeur et de le ré-ouvrir ?
    A+

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonjour,

    Dans un module standard:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Sub ReOpen()
        Application.EnableEvents = True
    End Sub
    Dans le module ThisWorkbook:

    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
     
    Private Sub Workbook_Open()
        'Désactive la protection
        UnprotectVBProject ThisWorkbook, "pass"
        DoEvents
        'on Importe
        ImportModul
        'On réactive la protection
        'ProtectVBProject ThisWorkbook, "pass" 'On enleve cette ligne
        'DoEvents'On enleve cette ligne
    'On ajoute ces lignes    
        With Application
            .EnableEvents = False    '++++
            .OnTime Now + TimeValue("00:00:01"), "ReOpen" '+++++
        End With
        Me.Close True '+++++
    End Sub
    Inconvénient, il faut activer deux fois les macros (sauf si le niveau de securite est faible).

    Un risque, si on ne les active pas la deuxieme fois le classeur ne se réouvre pas et EnableEvents reste False.

    A tester donc.

    Cordialement,

    Tirex28/

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 25
    Par défaut
    Merci tirex28! En gros, c´est ce que je cherchais (sans qu´on demande 2 fois d´activer les macros, c´est un inconvénient..)
    je vais mettre le post en résolu meme si ce serait mieux de ne pas réactiver les macros 2 fois :p
    Si quelqu´un saurait comment faire ca, ce serait sympa
    merci

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonjour,

    Ceci devrait etre plus adapté.

    Dans ThisWorkbook:
    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
     
    Private Sub Workbook_Open()
        Const NomModule As String = "ModExport" 'Doit renvoyer le nom de ce module
        Dim NomFichierModule As String, TempWB As Workbook
        UnprotectVBProject ThisWorkbook, "pass"
        DoEvents
        ImportModul
        'Exporte le module "ModExport"
        With ThisWorkbook
            NomFichierModule = .Path & "\" & NomModule & ".bas"
            .VBProject.VBComponents(NomModule).Export NomFichierModule
        End With
       'Ajoute un classeur temporaire
        With Application
            .ScreenUpdating = False
            .StatusBar = "Veuillez patienter .."
            .Cursor = xlWait
            .EnableEvents = False
        End With
        Set TempWB = Workbooks.Add
        ActiveWindow.Visible = False
        'Copie ModExport dans le classeur temporaire
        TempWB.VBProject.VBComponents.Import NomFichierModule
        'Supprime le fichier ModExport.bas
        Kill NomFichierModule
        'Programme la procedure de reouverture
        Application.Run TempWB.Name & "!" & "Attendre", ThisWorkbook.FullName
        'Ferme ce classeur en l'enregistrant avec le nouveau module
        ThisWorkbook.Close True
    End Sub
    Dans un module nommé ModExport:
    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
     
    Public Sub Attendre(WbFullName As String)
        Application.OnTime Now + TimeValue("00:00:03"), "'OuvrirClasseur """ & WbFullName & """'"
    End Sub
     
    Public Sub OuvrirClasseur(WbFullName As String)
        Workbooks.Open WbFullName
        With Application
            .EnableEvents = True
            .Cursor = xlDefault
            .StatusBar = False
        End With
        'Ferme le classeur temporaire
        ThisWorkbook.Close False
    End Sub

    Cordialement,

    Tirex28/

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 25
    Par défaut
    Bonjour,

    voilà c'est ca que je voulais merci mais par contre depuis que j'ai mis en place ce bout de code, j'ai un autre problème que je ne comprends pas.

    En fait j'ai simplifié les choses plus haut, j'avais mis que j'importais un module.
    En fait ce que je fais c'est mettre à jour le module par le fichier .bas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     'Je renomme l'ancienne version du module
    ThisWorkbook.VBProject.VBComponents(NomModule).Name = "alt" 
    'Je supprime l'ancienne version du module
    With ThisWorkbook.VBProject.VBComponents
              .Remove .Item("alt")
    End With
    'Msgbox(ModuleExists("alt"))
    'J'importe la nouvelle version depuis le .bas
    ThisWorkbook.VBProject.VBComponents.Import (Chemim & NomModule & ".bas")
    Avant de mettre le bout de code, cette partie marchait très bien (sans mot de passe).
    Vous allez me dire pourquoi renommer avant de supprimer ? aucune idée mais sans ce renommage, il ne le supprimait pas et en important le module, on se retrouvait avec un "Nom_Module" suivi d'un 1.

    Mon problème actuel est un peu l'ancien dans le sens où le module "alt" ne veut pas se supprimer et je ne comprend pas pourquoi..J'ai testé avec une fonction qui indique si un module existe et il m'affiche False (la msgbox) juste après la ligne de commande (pourtant le bout de code pour la suppression marche si je l'execute tout seul séparemment)

    Qu'est ce qui se passe ?

    Merci encore d'avance

    @ +

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/03/2011, 12h09
  2. Réponses: 4
    Dernier message: 15/12/2009, 13h59
  3. Réponses: 5
    Dernier message: 31/03/2008, 17h07
  4. Mot de passe réseau pas enregistré
    Par tomlev dans le forum Windows Vista
    Réponses: 4
    Dernier message: 15/10/2007, 11h14
  5. Réponses: 5
    Dernier message: 13/08/2007, 12h44

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