Exécuter une macro dans un autre classeur

Bonjour à tous,

Le code utilisé fonctionne bien, appart en dernier point, le tableau résultant du traitement sans doublons et trié ne sera pas copié dans la feuille 1 du classeur 1.

Classeur 1 :

Sub MaMacro()

    Dim Wk1 As Workbook, Wk2 As Workbook, LaMacro As String
    Dim DerLg As Long

    On Error Resume Next
    Set Wk1 = ThisWorkbook
    Set Wk2 = Workbooks.Open("C2.xlsm")

    With Wk1.Sheets("Feuil1")
        DerLg = .Cells(.Rows.Count, 1).End(xlUp).Row
        ' Préparation des données le traitement dans le deuxième classeur C2.xlsm
        .Range("A2:B" & DerLg).Copy Wk2.Sheets("Feuil1").Range("A2")
        'faire une sauvegarde du tableau utilisé pour le traitement
        .Range("A2:B" & DerLg).Copy Wk1.Sheets("Feuil2").Range("A2")
    End With
    With Wk2
        LaMacro = .Name & "!Module1.MaMacro"
        .Application.Run LaMacro
        'Ferme le classeur qui a été ouvert
        'et sauvegarde les données

        .Close True
    End With
    MsgBox "Fin de traitement"

End Sub

Classeur 2 :

Sub MaMacro()

    Dim Wk1 As Workbook
    Dim DerLg As Long

    Set Wk1 = Workbooks("C1.xlsm")
    With .Sheets("Feuil1")
        DerLg = .Cells(.Rows.Count, 1).End(xlUp).Row
        With .Range("A1:B" & DerLg)
            .RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
            .Sort Key1:=.Item(1), Order1:=xlAscending, Header:=xlYes
        End With
        DerLg = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range("A2:B" & DerLg).Copy Wk1.Sheets("Feuil1").Range("A2")
    End With
End Sub

Une solution ?

Merci d'avance.

Bonjour,

Manque-t-il des détails ?

Salut,

Je m’étais intéressé à ton problème ce matin, puis - comme ça part un peu dans tous les sens sans que l’on voit vraiment où tu veux en venir - j’ai laissé tomber. Je m’étais quand même abonné à la discussion pour voir les réponses qu’on allait te donner.

Maintenant, très franchement, tu veux résoudre un problème réel – auquel cas ce serait bien que tu nous expliques ce que tu veux obtenir et probablement qu’il y a un moyen plus simple d’y arriver – ou c’est un simple exercice VBA ?

Dans tous les cas tu dois être plus rigoureux et précis dans ta demande. Tu n’as par exemple pas la même macro dans le classeur 1 que la macro présentée sur ton fil.

A te relire.

Bonjour Yvouille,

Bon, j'aimerais, depuis classeur1, exécuter une macro (MaMacro) dans classeur2.

Le traitement spécifié dans les fichiers joints, est mis à titre d'exemple.

Un tableau de données dans la feuille1, classeur1, est copié dans feuille1, classeur2.

Alors la macro (MaMacro) dans C2.xlsm, à pour tache de supprimer les doublons et faire trier le résultat.

Ainsi, le tableau résultant dans C2 est copié à nouveau dans C1.

Cette dernière étape, pour le moment, et pour laquelle j'aimerais trouver une solution, n'est pas exécutée.

Voilà !

25c1.xlsm (18.55 Ko)
28c2.xlsm (16.60 Ko)

Re-bonjour,

Je ne suis pas bien sûr d’avoir pu t’aider, mais essaie quand même de voir mes fichiers. Dans la macro du fichier C1, j’ai remplacé les Set Wk1 et Set Wk2 par le nom des fichiers eux-mêmes, car il me semble qu’à un certain moment, Excel renomme les deux fois Wk1 et Wk2 par Thisworbook et je me demande si ça ne fait pas des confusions.

Puis dans ta macro du fichier C2 (qui s’appelle malheureusement la même chose que celle du fichier C1), il manque une précision dans ta ligne With .Sheets("Feuil1"), j’y ai rajouté la référence au fichier, ce qui donne With Workbooks("C2.xlsm").Sheets("Feuil1").

Chez moi ça passe comme ça, le tableau du fichier C1 Feuil1 est trié selon la colonne A à la fin du code.

Il semble qu'il y ait encore des lignes inutiles, mais ça c'est une autre histoire.

Amicalement.

43c1.xlsm (22.57 Ko)
57c2.xlsm (16.51 Ko)

Bonjour,

En exécutant le code pas à pas, j'ai remarqué que la variable LaMacro reste vide d'ou la non-exécution de la macro dans C2.xlsm.

    With Workbooks("C2.xlsm")
        LaMacro = .Name & "!Module1.MaMacro"
        .Application.Run LaMacro

Merci plutôt à toi de m'avoir répondu

Avec le fichier que je t'ai envoyé, la variable LaMacro (qui s’appelle malheureusement la même chose que celle du fichier C1) est activée.

14 02
Yvouille a écrit :

Dans la macro du fichier C1, j’ai remplacé les Set Wk1 et Set Wk2 par le nom des fichiers eux-mêmes, car il me semble qu’à un certain moment, Excel renomme les deux fois Wk1 et Wk2 par Thisworbook et je me demande si ça ne fait pas des confusions.

As-tu tenu compte de mes remarques ci-dessus ?? Dans la macro du fichier C2, j'avais aussi inscrit le nom du fichier dans le code visible ci-dessus.

Je ne sais pas comment t'aider plus

Bonnes salutations.

Bonjour Yvouille,

J'ai renommé la macro dans C1 en "test", et j'ai laisser l'autre macro dans C2 telle quelle.

J'ai refais le test sur un autre PC, et ça fonctionne.

Demain, je le ferais sur mon PC.

Merci une autre fois de ton précieuse aide.

Bonjour,

Voila les codes qui fonctionnent.

En C1.xlsm :

Sub Test()

    Dim Wk1 As Workbook, Wk2 As Workbook, LaMacro As String
    Dim DerLg As Long

    Workbooks.Open ("C2.xlsm")
    With Workbooks("C1.xlsm").Sheets("Feuil1")
        DerLg = .Cells(.Rows.Count, 1).End(xlUp).Row
        ' Préparation des données le traitement dans le deuxième classeur C2.xlsm
        .Range("A2:B" & DerLg).Copy Workbooks("C2.xlsm").Sheets("Feuil1").Range("A2")
        'faire une sauvegarde du tableau utilisé pour le traitement
        .Range("A2:B" & DerLg).Copy Workbooks("C1.xlsm").Sheets("Feuil2").Range("A2")
        'Pour savoir ce qui sera coller en retour
        .Range("A2:B" & DerLg).ClearContents
    End With
    With Workbooks("C2.xlsm")
        LaMacro = .Name & "!Module1.MaMacro"
        .Application.Run LaMacro

        'Ferme le classeur qui a été ouvert
        'et sauvegarde les données
        .Close True

    End With
    MsgBox "Fin de traitement"

End Sub

En C2.xlsm :

Sub MaMacro()

    Dim Wk1 As Workbook
    Dim DerLg As Long

    Set Wk1 = Workbooks("C1.xlsm")
    With Workbooks("C2.xlsm").Sheets("Feuil1")
        DerLg = .Cells(.Rows.Count, 1).End(xlUp).Row
        With .Range("A1:B" & DerLg)
            '.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
            .RemoveDuplicates Columns:=Array(1, 1), Header:=xlYes
            .Sort Key1:=.Item(1), Order1:=xlAscending, Header:=xlYes
        End With
        DerLg = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range("A2:B" & DerLg).Copy Workbooks("C1.xlsm").Sheets("Feuil1").Range("A2")
    End With
End Sub

Merci.

Salut, Donc tu me remercies pour mon aide ?

Bonjour Yvouille,

Yvouille a écrit :

Salut, Donc tu me remercies pour mon aide ?

apt a écrit :

Merci une autre fois de ton précieuse aide.

Rechercher des sujets similaires à "executer macro classeur"