Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vba-excel : Exécuter sur un classeur une macro externe

2 réponses
Avatar
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

Avez-vous une idée?
merci par avance!

2 réponses

Avatar
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
Avatar
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!