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 :

Modification massive d'une macro


Sujet :

Macros et VBA Excel

Vue hybride

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 31
    Par défaut Modification massive d'une macro
    Bonjour,

    j'ai des centaines de fichiers possédant tous les mêmes macros.
    Est-il possible de créer un fichier Excel renfermant une macro permettant de modifier en automatique
    cette macro dans tous les fichiers ?
    Procédure envisagée : dérouler les fichiers
    - ouvrir le fichier
    - supprimer la macro N
    - ajouter la macro N1
    ou alors supprimer le module renfermant la macro et ajouter un nouveau module renfermant la nouvelle macro.

    Merci pour une éventuelle réponse.
    Cdt.

    Dadu

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Par défaut
    Boujour,

    oui c'est possible mais si ce sont les mêmes fichiers avec la même structure il serait peu être plus simple d'avoir un fichier "modele" qui contient les macros.
    Puis tu viendrais lui coller le contenu de chaque fichier suivit d'un enregistrer sous.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 31
    Par défaut
    Citation Envoyé par Phil Free Voir le message
    Boujour,

    oui c'est possible mais si ce sont les mêmes fichiers avec la même structure il serait peu être plus simple d'avoir un fichier "modele" qui contient les macros.
    Puis tu viendrais lui coller le contenu de chaque fichier suivit d'un enregistrer sous.
    Bonjour,

    réaction tardive de ma part, n'ayant pas reçu de post sur ma messagerie perso.
    Je dois absolument modifier la macro X de chaque fichier via une macro externe,
    car les fichiers sont en exploitation chez un client.

    Ma routine ne fonctionne tjs pas.
    Cordialement
    Dadu

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une piste à bien adapter et construire la boucle pour l'ouverture des différents classeurs (voir la fonction Dir() ) :
    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
     
    Sub ExportImportModule()
     
        Dim VBPMod As Object
        Dim NomModule As String
        Dim Chemin As String
     
        'nom du module
        NomModule = "Module1"
     
        On Error Resume Next
        Set VBPMod = ThisWorkbook.VBProject.VBComponents(NomModule)
     
        If Err <> 0 Then
     
            MsgBox "Le module '" & NomModule & _
            "' n'existe pas dans ce classeur !", , "Module."
            Exit Sub
     
        End If
     
        On Error GoTo 0
     
        Chemin = ThisWorkbook.Path & "\" & NomModule & ".bas"
     
        'exporte le module corrigé dans le dossier du classeur
        VBPMod.Export Chemin
     
        '-------ici une boucle pour ouvrir tous les classeurs...
     
            'suppression du module...(les noms de l'ancien module et du nouveau étant sencé être le même, adapter sinon)
            '"Classeur en cours" est juste un nom bidon qui repésente le classeur qui vient d'être ouvert dans la boucle pour modif
            'pour la boucle, voir la fonction Dir() !
            With Workbooks("Classeur en cours").VBProject
     
                .VBComponents.Remove .VBComponents(NomModule)
     
                'puis import du nouveau module
                .VBComponents.Import Chemin
     
            End With
     
        '------fin de boucle !
     
        'supprimer le module si nécessaire
        'Kill Chemin
     
    End Sub

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 31
    Par défaut
    Merci pour cette solution qui adaptée fonctionne super, sauf lorsque le projet VBA du fichier à modifier est verrouillé par MDP connu !
    Après diverses recherches, je n'arrive pas à déverrouiller le projet VBA de chaque fichier excel à modifier.
    J'ai trouvé ce code mais n'arrive pas à le mettre au point.
    Je suis sous excel 2010 et "Accès approuvé au modèle d'objet du projet VBA" est coché
    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
    Function UnprotectVBProject(Cls As Workbook, ByVal Password As String) As Boolean
    '==========================================================================
    '     Déverrouillage du projet VBA du classeur en traitement
    '==========================================================================
     
    Dim vbProj As Object
     
        Set vbProj = Cls.VBProject
     
    'Inutile si le projet est déjà déprotégé
        If vbProj.Protection <> 1 Then
            UnprotectVBProject = True
            Exit Function
        Else
            Set Application.VBE.ActiveVBProject = vbProj
            'Saisie du mot de passe avec SendKeys, {ESC} sort de la fenêtre de saisie du mot de passe
            SendKeys Password & "~~~" & "{ESC}" & "NUMLOCK"
     
            Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
     
            If vbProj.Protection <> 1 Then
                SendKeys "{ENTER}" & "{NUMLOCK}"
                UnprotectVBProject = True
            Else
                'Password n'est pas le bon
                UnprotectVBProject = False
                SendKeys "%{F11}", True
            End If
        End If
     
    End Function
    Avez-vous une idée ?
    Je bloque depuis 2 jours.
    Cdt
    Dadu

  6. #6
    Inactif  

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Excel 2010 a un paquet de mesures de sécurité qui peuvent entraver l'action des macros étrangères. Regarde dans le centre de gestion de la donfidentialité.

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par dadu35 Voir le message
    Procédure envisagée : dérouler les fichiers
    - ouvrir le fichier
    - supprimer la macro N
    - ajouter la macro N1
    ou alors supprimer le module renfermant la macro et ajouter un nouveau module renfermant la nouvelle macro.
    Une procédure qui me semble plus judicieuse :
    - Mettre N1 dans un fichier xlam qui se charge automatiquement à l'ouverture d'Excel
    - Si la macro est lancée par un bouton se trouvant sur une feuille des fichiers en question, faire une macro qui ouvre les fichiers et modifie la macro associée à ce bouton (beaucoup plus simple que d'aller tripatouiller le VBE).

    Mais si tu persiste dans la voie que tu as choisie, voici un point de départ :
    https://msdn.microsoft.com/library/e...ice.15%29.aspx

Discussions similaires

  1. [XL-2010] Modif code d'une macro avec une autre macro?
    Par Master_x_99 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/11/2015, 07h51
  2. Lancement d'une macro à la modification d'une cellule
    Par popsmelove dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 10/06/2008, 15h08
  3. Modifer des liens avec une macro
    Par NemKa dans le forum VBA Word
    Réponses: 4
    Dernier message: 25/06/2007, 11h45
  4. declencher une macro suite a une modification d une feuille Excel
    Par chamus dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 11/01/2007, 09h50
  5. Lancer une macro lors de la modif d'une case excel
    Par frevale dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/08/2006, 12h19

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