vba-excel : Exécuter sur un classeur une macro externe
2 réponses
Didier Roche
Bonjour!
Presque tout est dans le titre! J'aimerais éxecuter sur une feuille de mon
classeur A.xls (donc sur mes champs de A) une macro appartenant à B.xls.
J'essaie ceci:
ThisWorkBook.Application.Run "B.xls!test"
Mais la macro s'exécute sur ma feuille B et non sur ma feuille A
Ce code dans B se compose de :
Sub test()
ActiveCell.FormulaR1C1 = "coucou"
Range("C9").Select
End Sub
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred
Dans le message:, Didier Roche écrit :
Bonjour! Presque tout est dans le titre! J'aimerais éxecuter sur une feuille de mon classeur A.xls (donc sur mes champs de A) une macro appartenant à B.xls. J'essaie ceci:
ThisWorkBook.Application.Run "B.xls!test"
Mais la macro s'exécute sur ma feuille B et non sur ma feuille A
Ce code dans B se compose de : Sub test() ActiveCell.FormulaR1C1 = "coucou" Range("C9").Select End Sub
Avez-vous une idée? merci par avance!
Bonjour, Il faut jouer avec les composants : référence Micrososft VBA extensibility Je te joins un bout de code édulcoré que j'avais écrit :
8<--------------------- Dim oVBComponent As VBComponent For Each oVBComponent In oDoc.VBProject.VBComponents If oVBComponent.Name = "MesMacros" Then oDoc.VBProject.VBComponents.Remove oVBComponent End If Next With oDoc.VBProject.VBComponents ModulePath = "bla bla blaMacros.bas" Set oVBComponent = .Import(ModulePath) oVBComponent.Name = "MesMacros" End With 8<--------------------------------
oDoc est mon document actif (c'était sous Word) Cette macro met à jour un module avec un fichier .bas externe.
Partant sur cette base, tu peux exporter un module de ton fichier B et l'importer dans A.
-- Fred
Dans le message:A0DF09B9-D51F-4523-B55A-E47D186B95CC@microsoft.com,
Didier Roche écrit :
Bonjour!
Presque tout est dans le titre! J'aimerais éxecuter sur une feuille
de mon classeur A.xls (donc sur mes champs de A) une macro
appartenant à B.xls. J'essaie ceci:
ThisWorkBook.Application.Run "B.xls!test"
Mais la macro s'exécute sur ma feuille B et non sur ma feuille A
Ce code dans B se compose de :
Sub test()
ActiveCell.FormulaR1C1 = "coucou"
Range("C9").Select
End Sub
Avez-vous une idée?
merci par avance!
Bonjour,
Il faut jouer avec les composants : référence Micrososft VBA extensibility
Je te joins un bout de code édulcoré que j'avais écrit :
8<---------------------
Dim oVBComponent As VBComponent
For Each oVBComponent In oDoc.VBProject.VBComponents
If oVBComponent.Name = "MesMacros" Then
oDoc.VBProject.VBComponents.Remove oVBComponent
End If
Next
With oDoc.VBProject.VBComponents
ModulePath = "bla bla blaMacros.bas"
Set oVBComponent = .Import(ModulePath)
oVBComponent.Name = "MesMacros"
End With
8<--------------------------------
oDoc est mon document actif (c'était sous Word)
Cette macro met à jour un module avec un fichier .bas externe.
Partant sur cette base, tu peux exporter un module de ton fichier B et
l'importer dans A.
Bonjour! Presque tout est dans le titre! J'aimerais éxecuter sur une feuille de mon classeur A.xls (donc sur mes champs de A) une macro appartenant à B.xls. J'essaie ceci:
ThisWorkBook.Application.Run "B.xls!test"
Mais la macro s'exécute sur ma feuille B et non sur ma feuille A
Ce code dans B se compose de : Sub test() ActiveCell.FormulaR1C1 = "coucou" Range("C9").Select End Sub
Avez-vous une idée? merci par avance!
Bonjour, Il faut jouer avec les composants : référence Micrososft VBA extensibility Je te joins un bout de code édulcoré que j'avais écrit :
8<--------------------- Dim oVBComponent As VBComponent For Each oVBComponent In oDoc.VBProject.VBComponents If oVBComponent.Name = "MesMacros" Then oDoc.VBProject.VBComponents.Remove oVBComponent End If Next With oDoc.VBProject.VBComponents ModulePath = "bla bla blaMacros.bas" Set oVBComponent = .Import(ModulePath) oVBComponent.Name = "MesMacros" End With 8<--------------------------------
oDoc est mon document actif (c'était sous Word) Cette macro met à jour un module avec un fichier .bas externe.
Partant sur cette base, tu peux exporter un module de ton fichier B et l'importer dans A.
-- Fred
Gloops
Bonjour,
En règle générale, si une macro est conçue pour s'exécuter sur la feuille active, elle doit faire référence à ActiveSheet.
Voici un exemple : Public Sub TestAff() MsgBox ActiveSheet.Cells(2, 2) End Sub
affiche le contenu de la cellule B2 de la feuille active, qu'elle soit ou non dans le même classeur que la macro.
Un autre exemple :
Public Sub Transfert With ActiveSheet .Cells(3, 2) = .Cells(2, 3) End With End Sub
copie le contenu de C2 vers la cellule B3 (toujours de la feuille courante). L'emplacement de la macro ne joue dans ce cas aucun rôle.
Je n'ai mis qu'une ligne, mais entre With et End With on peut en mettre des tartines. (à toi de gérer de quel côté tu mets le beurre ;) ) ___________________________________________ Didier Roche a écrit, le 31/05/2005 14:54 :
Bonjour! Presque tout est dans le titre! J'aimerais éxecuter sur une feuille de mon classeur A.xls (donc sur mes champs de A) une macro appartenant à B.xls. J'essaie ceci:
ThisWorkBook.Application.Run "B.xls!test"
Mais la macro s'exécute sur ma feuille B et non sur ma feuille A
Ce code dans B se compose de : Sub test() ActiveCell.FormulaR1C1 = "coucou" Range("C9").Select End Sub
Avez-vous une idée? merci par avance!
Bonjour,
En règle générale, si une macro est conçue pour s'exécuter sur la
feuille active, elle doit faire référence à ActiveSheet.
Voici un exemple :
Public Sub TestAff()
MsgBox ActiveSheet.Cells(2, 2)
End Sub
affiche le contenu de la cellule B2 de la feuille active, qu'elle soit
ou non dans le même classeur que la macro.
Un autre exemple :
Public Sub Transfert
With ActiveSheet
.Cells(3, 2) = .Cells(2, 3)
End With
End Sub
copie le contenu de C2 vers la cellule B3 (toujours de la feuille
courante). L'emplacement de la macro ne joue dans ce cas aucun rôle.
Je n'ai mis qu'une ligne, mais entre With et End With on peut en mettre
des tartines. (à toi de gérer de quel côté tu mets le beurre ;) )
___________________________________________
Didier Roche a écrit, le 31/05/2005 14:54 :
Bonjour!
Presque tout est dans le titre! J'aimerais éxecuter sur une feuille de mon
classeur A.xls (donc sur mes champs de A) une macro appartenant à B.xls.
J'essaie ceci:
ThisWorkBook.Application.Run "B.xls!test"
Mais la macro s'exécute sur ma feuille B et non sur ma feuille A
Ce code dans B se compose de :
Sub test()
ActiveCell.FormulaR1C1 = "coucou"
Range("C9").Select
End Sub
En règle générale, si une macro est conçue pour s'exécuter sur la feuille active, elle doit faire référence à ActiveSheet.
Voici un exemple : Public Sub TestAff() MsgBox ActiveSheet.Cells(2, 2) End Sub
affiche le contenu de la cellule B2 de la feuille active, qu'elle soit ou non dans le même classeur que la macro.
Un autre exemple :
Public Sub Transfert With ActiveSheet .Cells(3, 2) = .Cells(2, 3) End With End Sub
copie le contenu de C2 vers la cellule B3 (toujours de la feuille courante). L'emplacement de la macro ne joue dans ce cas aucun rôle.
Je n'ai mis qu'une ligne, mais entre With et End With on peut en mettre des tartines. (à toi de gérer de quel côté tu mets le beurre ;) ) ___________________________________________ Didier Roche a écrit, le 31/05/2005 14:54 :
Bonjour! Presque tout est dans le titre! J'aimerais éxecuter sur une feuille de mon classeur A.xls (donc sur mes champs de A) une macro appartenant à B.xls. J'essaie ceci:
ThisWorkBook.Application.Run "B.xls!test"
Mais la macro s'exécute sur ma feuille B et non sur ma feuille A
Ce code dans B se compose de : Sub test() ActiveCell.FormulaR1C1 = "coucou" Range("C9").Select End Sub