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 :

Modifier par VBA une macro protégée par MDP [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 129
    Points : 78
    Points
    78
    Par défaut Modifier par VBA une macro protégée par MDP
    Bonjour

    Je pense avoir noté l'essentiel de mon probléme dans le titre.

    Grace au forum et au tuto:, j'arrive a remplacer un module dans un fichier xlsm, grace a du code d'un autre fichier.

    Mon problème, c'est que les 60 fichiers (identiques) on tous leur code VBA protégé par MDP.

    j'essaye de transmettre le mot de passe via un parametre mais cela ne marche pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            Set Wb = Workbooks.Open(Repertoire & "\" & Fichier)
     
            Application.VBE.MainWindow.Visible = True, password="toto"
    'on enleve le module
            With ThisWorkbook.VBProject.VBComponents
                .Remove .Item("Procédures")
            End With
    Merci de vos lumiéres

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    j'utilise des méthodes à base de sendkeys

    éviter d'être dans le VBE quand la macro tourne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mdp = "test"
    Set Application.VBE.ActiveVBProject = Workbooks("test.xlsm").VBProject
    SendKeys mdp & "~~"
    Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
    si quelqu'un a une méthode sans SendKeys ou Message, je suis preneur

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 129
    Points : 78
    Points
    78
    Par défaut
    Merci Joe,
    ton code me permet bien d'ouvrir mon fichier xlsm et d'enlever la protection du VBA, mais lorsque j'essaye de retirer un module via;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Wb.VBProject.VBComponents
                .Remove .Item("Procédures")
            End With
    j'ai toujours le message d'erreur
    Erreur d'exécution '50289';
    Impossible d"'effectuer cette opétaion tant que le projet est protégé.
    , pourtant dans VBE je constate bien que mon code VBA n'est plus protégé par MDP...
    une idée...

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    peux-tu montrer le code complet en ayant intégré ma piste ?

    je pense à un problème de temporisation (ça serait cool et simple) ou la nécessité de décocher "projet verrouillé" dans les propriétés (galère car faut remettre en place à la fermeture du fichier !)

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 129
    Points : 78
    Points
    78
    Par défaut
    Merci ça avance mais...
    Je viens de rajouter une pause (même 2)en effet je n'ai plus de message d'erreur mais par contre ma procédure "Procédures" n'est pas supprimée et je me retrouve avec une deuxième procédure "Procédures1"
    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
    Sub Export_Import_Module()
        Dim Fichier As String, Repertoire As String
        Dim Wb As Workbook
        Dim i As Byte
     
        Application.ScreenUpdating = False
     
        'Adaptez le répertoire des classeurs à modifier
        Repertoire = "O:\Formation"
        'Fichier = Dir(Repertoire & "\*.xlsm")
        Fichier = "Formation_Accueil.xlsm"
     
        'Boucle sur les classeurs du répertoire cible
        Do While Fichier <> ""
            Set Wb = Workbooks.Open(Repertoire & "\" & Fichier)
     
        'on enléve le mdp VBA
            Application.VBE.MainWindow.Visible = True
            mdp = "tyty"
            Set Application.VBE.ActiveVBProject = Wb.VBProject
            SendKeys mdp & "~~"
            Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
     
            'une petite pause..
            Application.Wait Now + TimeValue("0:00:03")
     
        'on enleve le module
            With Wb.VBProject.VBComponents
                .Remove .Item("Procédures")
            End With
     
            'une petite pause..
            Application.Wait Now + TimeValue("0:00:03")
    'on rajoute le module (et les usf...)
            With Wb.VBProject '
                .VBComponents.Import "C:\Users\Desktop\Procédures.bas"
            End With
     
            Wb.Close True
            Fichier = Dir
        Loop
     
        Application.ScreenUpdating = True
     
        MsgBox "Opération terminée."
    End Sub
    pourquoi ?

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Il faut peut être enregistrer le classeur juste après la suppression du module, peut être qu'Excel conserve en cache le module supprimé ?

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 129
    Points : 78
    Points
    78
    Par défaut
    Merci mais en fait le semble ne pas fonctionner, même en enregistrant juste après le remove, et en supprimant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'on rajoute le module (et les usf...)
            With Wb.VBProject '
                .VBComponents.Import "C:\Users\Desktop\Procédures.bas"
            End With
    j'ai toujours ma procédures attaché a mon fichier

  8. #8
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Et si tu ne fais qu'une suppression sans refaire un import, le module reste quand même ?

    j'ai jamais eu de souci de ce type, mais faut dire que j'ai jamais détruit un module.


    EDIT : euh je viens de relire TRES attentivement ton code

    c'est pas plutôt comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'on enleve le module
    With Wb.VBProject
    .VBComponents.Remove .VBComponents("Procédures")
    End With

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 129
    Points : 78
    Points
    78
    Par défaut
    Oui meme si j'enleve l'import le module n'est pas supprimé. pas plus avec ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'on enleve le module
    With Wb.VBProject
    .VBComponents.Remove .VBComponents("Procédures")
    End With
    qu'avec le miens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        'on enleve le module
            With Wb.VBProject.VBComponents
                .Remove .Item("Procédures")
            End With
    Why ???

  10. #10
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Si je me fie à ce que je vois il y a un espace de trop dans la ligne.

    Sinon, tu peux toujours essayer VBA Code Cleaner.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  11. #11
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    tu m'as presque fait douter Clément

    il n'y a pas d'espace supplémentaire

    par acquis de conscience :

    - j'ai crée un nouveau classeur
    - mis un module standard "Procédures"

    lancé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub oo()
    Dim Wb As Workbook
    Set Wb = ThisWorkbook
     
    With Wb.VBProject.VBComponents
        .Remove .Item("Procédures")
    End With
     
    End Sub
    Résultat : module supprimé !


    Résultat identique avec le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub ooBIS()
    Dim Wb As Workbook
    Set Wb = ThisWorkbook
     
    With Wb.VBProject
        .VBComponents.Remove .VBComponents("Procédures")
    End With
     
    End Sub

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 129
    Points : 78
    Points
    78
    Par défaut
    Merci à vous pour votre aide précieuse.

    J'ai compris et résolu mon problème...

    La procédure que j’essayais de supprimer étant appelé dans le Workbook.before close de mon classeur cela se "mordait un peu la queue"...
    Le code final est donc bien celui là avec le rajout du Application.Enable events = false en début et true en fin:
    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
    Sub Export_Import_Module()
        Dim Fichier As String, Repertoire As String
        Dim Wb As Workbook
        Dim i As Byte
     
        Application.ScreenUpdating = False
     
        'Adaptez le répertoire des classeurs à modifier
        Repertoire = "O:\Formation"
        'Fichier = Dir(Repertoire & "\*.xlsm")
        Fichier = "Formation_Accueil.xlsm"
     
        'Boucle sur les classeurs du répertoire cible
        Do While Fichier <> ""
        Application.EnableEvents = False
            Set Wb = Workbooks.Open(Repertoire & "\" & Fichier)
     
        'on enléve le mdp VBA
            Application.VBE.MainWindow.Visible = True
            mdp = "tyty"
            Set Application.VBE.ActiveVBProject = Wb.VBProject
            SendKeys mdp & "~~"
            Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
     
            'une petite pause..
            Application.Wait Now + TimeValue("0:00:03")
     
        'on enleve le module
            With Wb.VBProject.VBComponents
                .Remove .Item("Procédures")
            End With
     
            'une petite pause..
            Application.Wait Now + TimeValue("0:00:03")
    'on rajoute le module (et les usf...)
            With Wb.VBProject '
                .VBComponents.Import "C:\Users\Desktop\Procédures.bas"
            End With
     
            Wb.Close True
            Fichier = Dir
        Loop
        Application.EnableEvents = True
        Application.ScreenUpdating = True
     
        MsgBox "Opération terminée."
    End Sub

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

Discussions similaires

  1. [XL-2007] Modifier une macro complémentaire par macro
    Par jpclabaux dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/07/2012, 11h30
  2. ouvrir automatiquement une macro protégé par mot de passe connu
    Par mapao dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/07/2010, 14h09
  3. [XL-2003] Installer et Désinstaller une macros complémentaire par VBA
    Par amerex dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/04/2010, 00h13
  4. Modifier une condition Where par VBA
    Par totojordi dans le forum VBA Access
    Réponses: 12
    Dernier message: 02/07/2008, 08h50
  5. Récupération du code d'une page protégée par htaccess
    Par Vedlen dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 11/07/2006, 14h37

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