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 SubClasseur 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 SubUne 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à !
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.
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 LaMacroMerci 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.
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 SubEn 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 SubMerci.
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.