[vba-excel] Exécuter sur un classeur une macro externe à ce classeur [Résolu]

didrocks
Messages postés
73
Date d'inscription
samedi 11 janvier 2003
Dernière intervention
17 décembre 2007
- 31 mai 2005 à 16:59 - Dernière réponse : didrocks
Messages postés
73
Date d'inscription
samedi 11 janvier 2003
Dernière intervention
17 décembre 2007
- 1 juin 2005 à 08:51
Bonjour!
Presque tout est dans le titre! J'aimerais exécuter sur une feuille de mon classeur A.xls (donc sur mes champs de A) une macro appartenant à B.xls.
J'essaie ceci :


Code:
,
----

ThisWorkBook.Application.Run "B.xls!test"

mais la macro s'exécute sur ma feuille B et non sur ma feuille A (représentée par ThisWorkBook)

Le code dans B se compose de :


Code:
,
----

Sub test()
ActiveCell.FormulaR1C1 = "coucou"
Range("C9").Select
End Sub

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

6 réponses

Meilleure réponse
galopin01
Messages postés
133
Date d'inscription
lundi 4 octobre 2004
Dernière intervention
14 octobre 2011
- 31 mai 2005 à 22:55
3
Merci
Et puis il faut travailler dans la même instance d'Excel (sauf pour les macros complémentaires qui une fois activées sont disponibles dansx outes les instances)

Merci galopin01 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

galopin01
Messages postés
133
Date d'inscription
lundi 4 octobre 2004
Dernière intervention
14 octobre 2011
- 31 mai 2005 à 18:01
0
Merci
bonjour,
Dans le classeur B créer un nouveau module (ModuleB)
Coller la macro :
Sub test()
ActiveCell.FormulaR1C1 = "coucou"
Range("C9").Select
End Sub

Dans le classeur A créer un nouveaumodule (ModuleA)
Coller la macro :
Sub lancerBtest()
Application.Run "B.xls!test"
End Sub

Vous pouvez maintenant exécuter les macro de ModuleB à partir de ModuleA

A+
didrocks
Messages postés
73
Date d'inscription
samedi 11 janvier 2003
Dernière intervention
17 décembre 2007
- 31 mai 2005 à 19:30
0
Merci
Merci beaocoup, ça fonctionne!

Maintenant, je voulais compliquer un peu et exécuter ce code, qui
permet d'exécuter la macro test de B.xls dans le le fichier C.xls



Sub lancerBtest()

Dim WorkbookC As Workbook

Set WorkbookC = Application.Workbooks.Open("C:\C.xls")

WorkbookC.Application.Run "B.xls!test"

End Sub



Tout fonctionne, mais je voulais faire qqch d'un peu plus "propre" (ne
pas rendre visible les fichiers une fois ouverts) et pour cela je me
suis inspiré des différents postes sur le forum, ce qui donne le code :



Sub lancerBtest()

Dim xlApp As Excel.Application

Set xlApp = New Excel.Application

xlApp.Workbooks.Open "C:\C.xls"

xlApp.Run "B.xls!test"

xlApp.Quit

End Sub



Cependant, celui-ci ne fonctionne pas et me donne l'erreur à la ligne xlApp.Run "B.xls!test" :



Erreur d'exécution '1004':

'B.xls' est introuvable. Vérifier l'orthographe du nom du classeur et la validité de l'emplacement.



De plus, je ne peux plus lancer le premier code qui me retourne alors
la même erreur jusqu'au redémarrage du PC (en m'étant assuré que tous
les "excels" sont bien fermés).

Sauriez-vous pourquoi ce dernier code ne fonctionne pas?

Merci!

@+
didrocks
Messages postés
73
Date d'inscription
samedi 11 janvier 2003
Dernière intervention
17 décembre 2007
- 31 mai 2005 à 19:37
0
Merci
Je précise juste que tous mes fichiers sont dans le même répertoire
galopin01
Messages postés
133
Date d'inscription
lundi 4 octobre 2004
Dernière intervention
14 octobre 2011
- 31 mai 2005 à 22:43
0
Merci
Ben... y faut que B.xls soit ouvert
... ou bien le passer en xla ?
didrocks
Messages postés
73
Date d'inscription
samedi 11 janvier 2003
Dernière intervention
17 décembre 2007
- 1 juin 2005 à 08:51
0
Merci
ok, donc, c'est impossible avec ce code, tant pis, je trouverai comment masquer tout ça, merci!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.