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 :

Déprotéger un VBAProject par code pour maj du code


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Par défaut Déprotéger un VBAProject par code pour maj du code
    Bonsoir,

    J'ai besoin de modifier la macro de 200 classeurs, mais je n'arrive pas à déprotéger le VBAProject avec le code ci-dessous.
    le mot de passe est toto
    sinon est-il plus simple de modifier une macro ou le module ?
    MERCI d'avance de vos réponses

    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
    Sub déprotéger()
     
    Dim wbk As Workbook
    Dim wsh As Worksheet
    Dim Fich As String
    Dim Feuille
    Dim vbProj As Object
     
    Application.ScreenUpdating = False
    Fich = Dir("I:\EP\DPT\TEST\*.xls")
    Do While Fich <> ""
        With wsh
            Set wbk = Workbooks.Open("I:\EP\DPT\TEST\" & Fich)
     
        Set vbProj = wbk.VBProject
        If vbProj.Protection <> 1 Then Exit Sub
        Set Application.VBE.ActiveVBProject = vbProj
        SendKeys Password & "toto"
        Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
        'With wbk.VBProject
           '.VBComponents.Import "C:\Documents and Settings\6467\Bureau\Module3.bas"
        'End With
     
        wbk.Save
        wbk.Close False
        Fich = Dir
        Set wbk = Nothing
        End With
    Loop
     
    Set wsh = Nothing
     
    Application.ScreenUpdating = True
     
    MsgBox "TRAITEMENT TERMINE", vbCritical, "Information"
    End Sub

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Par défaut
    Salut PPN83 voila comment je procède

    Dans ton sub général
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    If ProtectedVBProject(MonWorkBook) = True Then
        Dim Pass As String
        Pass = "monMotDePasse"
     
        Call UnprotectVBProject(MonWorkBook)
     
        SendKeys Pass & "~~", True
        End If
    La fonction qui vérifie si il est protégé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Function ProtectedVBProject(ByVal wb As Workbook) As Boolean
    ' returns TRUE if the VB project in the active document is protected
    Dim VBC As Integer
    VBC = -1
    On Error Resume Next
    VBC = wb.VBProject.VBComponents.Count
    On Error GoTo 0
    If VBC = -1 Then
    ProtectedVBProject = True
    Else
    ProtectedVBProject = False
    End If
    End Function
    Le sub qui va enlever la protection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub UnprotectVBProject(wb As Workbook)
      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
    End Sub
    Voilou

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Par défaut
    Bonsoir Bakman

    Merci de ta participation

    Mais ça ne fonctionne pas, j'ai l'erreur d'exécution "impossible d'effectuer cette opération tant que le projet est protégé" à la ligne 7 de la fonction. Si tu as une solution ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Par défaut
    Ok! tu peut poster le code please?
    à la ligne 7 je sais pas ce qu'il y a

    sinon rajoute ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendKeys Pass & "~~", True
    a la derniere ligne de la fonciton UnprotectVBProject

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Par défaut
    Bonjour,

    la ligne 7 de la fonction est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VBC = wb.VBProject.VBComponents.Count
    j'ai inséré ta dernière phrase
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendKeys Pass & "~~", True
    dans la macro UnprotectVBProject mais j'ai le même problème; toujours à la ligne 7 de la fonction.

    Merci

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Par défaut
    Alors là je comprend pas ca fonctionne bien chez moi essaye de ne pas passer par la fonction qui vérifie si le projet est protégé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim Pass As String
        Pass = "monMotDePasse"
     
        Call UnprotectVBProject(MonWorkBook, Pass)
     
        SendKeys Pass & "~~", True
        End If
    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, pass 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 Pass & "~~", True
    End Sub
    Je pense à un truc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.DisplayAlerts = False
    Il devrais ne plus t'afficher le message du coup la fonction qui vérifie le si le projet est protégé devrait foncitonner

Discussions similaires

  1. [AC-2007] besoin d'aide pour comprendre un code pour FTP trouvé sur le forum
    Par tibofo dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/04/2010, 20h03
  2. Aide pour compiler du code pour DOS/XP
    Par jkepler dans le forum Fortran
    Réponses: 1
    Dernier message: 22/11/2007, 10h42
  3. Réponses: 2
    Dernier message: 27/04/2006, 16h45
  4. Paramètre de requete par le code pour état
    Par electrosat03 dans le forum Access
    Réponses: 6
    Dernier message: 17/03/2006, 17h39
  5. Réponses: 2
    Dernier message: 18/10/2003, 14h42

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