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 une macro complémentaire par macro [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 237
    Par défaut Modifier une macro complémentaire par macro
    Salut,

    J'ai développé une macro complémentaire qui permet, entre autre, de mettre en forme des données issues de source diverses.
    Pour chaque source de données le traitement est différent. Dans ma macro complémentaire j'ai donc un module par source de données.
    Si on ajoute une nouvelle source de données, je développe une nouvelle macro que j'ajoute dans un nouveau module de ma macro complémentaire.
    J'aimerai permettre aux utilisateurs d'ajouter automatiquement ces nouveaux modules dans la macro complémentaire en important le module que je lui envoi ceci afin de m'éviter de repasser sur chaque poste. Pour ça j'ai développé une option de menu pour importer un module. Je suis capable d'importer dans un classeur donné mais pas dans une macro complémentaire.
    Est-ce possible?

    Merci d'avance,
    Jean

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Le code de ton nouveau module dans 1 fichier LeCode.txt situé dans le même repertoire que ta macro complementaire qui s'appelle ModifCodeXLA.xlam

    Les noms de fichier sont a adapter a ta config.

    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
    Sub AjoutCodeXLA()
        Dim i As Integer, LeNom As String, LeFile As String
        For i = 1 To AddIns.Count
            If AddIns(i).Name = "ModifCodeXLA.xlam" Then Exit For
        Next i
        LeNom = AddIns(i).Name
        With Workbooks(LeNom)
            .IsAddin = False
            .Activate
            LeFile = "LeCode.txt"
            Application.ExecuteExcel4Macro ("VBA.INSERT.FILE(""" & LeFile & """)")
            .IsAddin = True
            .Save
        End With
    End Sub
    ctac

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 237
    Par défaut
    Salut ctac_,

    Merci pour ton aide.
    Le code s'exécute bien, un module est créé dans ma macro complémentaire mais il est vide. Il ne semble pas importer le contenu de la du .txt.
    J'ai essayé de remplacer la variable LeFile par le nom du fichier txt mais en faisant ça le module n'est même plus créé.
    As-tu une idée?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Essayer comme ça :

    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
    Sub AjoutCodeXLA()
        Dim LeFile As String
        LeFile = "LeCode.txt"
        If Dir(LeFile) = "" Then
            MsgBox "pas de fichier"
            Exit Sub
        End If
        With Workbooks("ModifCodeXLA.xlam")
            .IsAddin = False
            .Activate
            Application.ExecuteExcel4Macro ("VBA.INSERT.FILE(""" & LeFile & """)")
            .IsAddin = True
            .Save
        End With
    End Sub
    Cordialement

    ctac

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 237
    Par défaut
    Bon, finalement j'ai changé mon fusil d'épaule.
    Je lis un fichier texte qui contient mes lignes de code et je les écris dans mon module. Comme ceci
    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
    Sub insertion_module()
     
        Dim i, nbLig As Integer
        Const ForReading = 1, ForWriting = 2, ForAppending = 3
        Dim fs, f, lecStr As String
     
        For i = 1 To Application.VBE.VBProjects.Count
            If Application.VBE.VBProjects(i).BuildFileName <> "VBAProject.DLL" Then
                    'Modifier le module Préparation_donnees
                    With Application.VBE.VBProjects(i).VBComponents("Preparation_donnnees").CodeModule
                        LiDeb = .CountOfLines + 2
                    End With
                    'Le fichier source
                    Set fs = CreateObject("Scripting.FileSystemObject")
                    Set f = fs.OpenTextFile("C:\Users\Jean\Desktop\macro.txt", ForReading, TristateFalse)
                    nbLig = 1
                    Do While f.AtEndOfStream <> True
                        'Lecture du fichier source et écriture dans le module
                        lecStr = f.ReadLine
                        With Application.VBE.VBProjects(i).VBComponents("Preparation_donnnees").CodeModule
                            .InsertLines LiDeb + nbLig, lecStr
                        End With
                        nbLig = nbLig + 1
                    Loop
                    f.Close
                End If
            End If
        Next
        MsgBox "La nouvelle macro de préparation des données est maintenant intégrée."
     
    End Sub
    Ça marche mais je bloque quand je veux ajouter une option de menu pour appeler cette macro. Pour ajouter une nouvelle option il faut que je connaisse le numéro de la dernière option existante pour prendre le numéro suivant pour ma nouvelle option. Et je ne sais pas comment lire ligne à ligne le contenu d'une macro pour repérer le numéro en question.
    Une suggestion?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 237
    Par défaut
    Je n'ai pas trouvé de solution pour lire les lignes d'une macro.
    J'ai utilisé une astuce pour incrémenter mes numéros d'option. Je prends le nombre de lignes de la macro (CountOfLines) comme ça je suis sûr que mon numéro d'option sera toujours unique.

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

Discussions similaires

  1. [XL-2003] macro pour modifier une cellule déverouillée par mot de passe
    Par jayroom dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 23/04/2012, 11h39
  2. [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
  3. Manipulation des macros complémentaires par macro
    Par EvaristeGaloisBis dans le forum Général VBA
    Réponses: 2
    Dernier message: 25/08/2007, 18h40
  4. Dupliquer une feuille excel par macro
    Par eleve36 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/02/2007, 23h01
  5. [WORD] Inclusion d'une image (.tif) par macro
    Par guejo dans le forum VBA Word
    Réponses: 1
    Dernier message: 08/02/2006, 11h16

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