Lancer une macro excel, depuis un fichier word.

MartinBrait Messages postés 2 Date d'inscription samedi 9 septembre 2006 Statut Membre Dernière intervention 21 juin 2008 - 20 juin 2008 à 08:35
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 - 21 juin 2008 à 20:09
Bonjour les pros,

Me voilà bien en peine. J'essaye depuis plusieurs jours de lancer depuis un fichier word, une macro excel enregistrée sous 'MonBeauFichier.xls', sans aucun succès malgré mes nombreuses tentatives.

Attention, j'aimerai lancer cette macro excel 'RouleMaPoule', au mieux, avec l'appli Excel ouverte, et le fichier 'MonBeauFichier.xls ouvert sous la feuille9,
et sinon, si Excel n'était pas lancé, il faudrait ouvrir l'appli Excel, ouvrir un fichier de secours en réseau, portant le nom 'MonBeauFichier.xls' sous la feuille 9.
Il faudrait, dans mon scénario nominal, que word se contente d'activer mon fichier excel 'MonBeauFichier.xls' déjà  ouvert, avant de lancer la macro 'RouleMaPoule' déjà enregistrée sous ce fichier Excel 'MonBeauFichier.xls'

Le scénario nominal, m'interdit d'utiliser le nom du chemin précis allant jusqu'à mon fichier, car je souhaiterai que ce fichier puisse être ouvert par indifférement par des utilisateurs distincts,
qui ont sauvegardé une version de mon fichier, chacun sous leurs chemins préférés, qu'ils ont choisi.

En gestion d'exception, j'adorerai en revanche, que la macro m'ouvre à défaut de mieux, une version de secours de mon fichier Excel, qui est  cette fois ci clairement enregistrée sous un chemin précis que je peux déclarer dans ma macro word.

En résumé:
Je suis sousWindows
Je suis sous Word
j'active les références Microsoft Excel dans un fichier word de départ
Depuis word, je lance une macro 'Sub VersExcel()' qui

1) Si scénario réussit, alors, va sur l'application Excel déjà ouverte, trouve une version perso 'MonBeauFichier.xls' déjà ouverte sur le PC de l'utilisateur.
se met sur le feuillet 'Feuille9' (sur laquelle agit ma
macro 'RouleMaPoule' si seulement c'est utile pour le scénario(?))
run ma macro 'RouleMaPoule' enregistrée

2) Si mon scénario rate, alors, signale à l'utilisateur par MsgBox, qu'il va utiliser une version de secours du fichier 'k://RépertoireEnRéseau/MonBeauFichier.xls',
ouvre Excel
ouvre le fichier k://RépertoireEnRéseau/MonBeauFichier.xls
se met sur le feuillet 'Feuille9' (sur laquelle agit ma
macro 'RouleMaPoule' si seulement c'est utile pour le scénario(?))
run ma macro 'RouleMaPoule', enregistrée sous le fichier de secours 'k://RépertoireEnRéseau/MonBeauFichier.xls'

Voilà ce que j'ai écris.
J'ai manipulé de diverses manière et j'ai obtenu 2 types d'erreur:
1) MsgBox "Excel est fermé"
2) Information de débogage: ArgumentNonFacultatif, curseur positionné sur Sub VersExcel()

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Sub VersExcel()

'Lancer une macro Excel depuis Word
'============================

Dim Appli2 As Excel.Application
'Je n'ai  pas oublié d'activer la référence Microsoft Excel xx.x Object Library

On Error Resume Next 'Cette intruction est laissée pour tester le comportement
Set Appli2 = CreateObject (, "Excel.Application")
Application.Activate 'J'essaie d'activer Excel qui est évalué fermé (pourquoi?)
If Appli2 Is Nothing Then
MsgBox "Excel est fermé" 'Gestion d'exception
Elst
Application.Run "MonBeauFichier.xls!RouleMaPoule"
End If

End Sub

'++++++++++++++++++++++++++++++++++++++++++++++++++++

MERCI POUR LE TEMPS QUE VOUS VOUDREZ BIEN M'ACCORDER.

4 réponses

cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
20 juin 2008 à 09:58
Bonjour,
Si mes souvenirs sont bon, tu doit mettre le nom du module où est la macro.
par exemple..
Application.Run "MonBeauFichier.xls!Module1!RouleMaPoule"
0
MartinBrait Messages postés 2 Date d'inscription samedi 9 septembre 2006 Statut Membre Dernière intervention 21 juin 2008
21 juin 2008 à 15:50
MERCI POUR TON SUIVI RAPIDE, LERMITE 222
Non, l'erreur n'est pas généréé là où tu l'indiques, car toute macro peut se lancer,
sans déclarer le module, car
C'est une méthode de classeur et non une méthode de module elle porte d'ailleurs toujours un nom unique dans un classeur.

ACCEPTES TU DE M'APPORTER TON AIDE POUR LA SUITE DES INVESTIGATIONS
(copier coller dans un fichier word, ne pas oublier d'activer la référence Microsoft Excel xx.x Object Library)

Sub RunExcelMacro()

Dim XL As Object ' Déclare une variable objet de type Application
On Error Resume Next 'Tu risques d'avoir une erreur dans ce qui suit

Set XL = GetObject(, "Excel.application") 'Peut générer une erreur si Excel non ouvert'
        'J'ai placé en remarques ci-dessous ici les instructions que je ne sais pas écrire

        ' si MonBeauFichier.xls ouvert (sans path imposé) alors
        'XL.Run ("HelloMacro") ' Call Run method of Excel's Application object' Remove remark from line to make Excel visible

        'XL.Quit ' Call the Quit method of Excel's Application object' Remove remark from line to make Excel visible
       ' Reset variable to nothing

        Set XL = Nothing

        ' si MonBeauFichier.xls fermé (sans path imposé)alors
        'XL.Workbooks.Open
("k:\RépertoireDeSecours\SousRépertoireDeSecours\MonBeauFichier.xls") '
Ouvre le classeur de secours contenant la macro à exécuter
        ' XL.Visible = True' Remove remark from line to make Excel visible
        'XL.Run ("HelloMacro") ' Call Run method of Excel's Application object
        'XL.Quit ' Call the Quit method of Excel's Application object
       ' Reset variable to nothing
        Set XL = Nothing

If Err.Number <> 0 Then 'alors Excel n'est pas ouvert, je l'ouvre
Err.Clear 'pour effacer la variable
Set XL = New Excel.Application ' Ouvre une nouvelle instance d'Excel et l'assigne à la variable objet
End If

Set XL = New Excel.Application ' Open a new instance of Excel and assign to object variable
XL.Workbooks.Open ("k:\RépertoireDeSecours\SousRépertoireDeSecours\MonBeauFichier.xls") ' Ouvre le classeur de secours contenant la macro à exécuter
' XL.Visible = True' Remove remark from next line to make Excel visible
XL.Run ("HelloMacro") ' Call Run method of Excel's Application object
XL.Quit ' Call the Quit method of Excel's Application object

' Reset variable to nothing
Set XL = Nothing

End Sub
0
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
21 juin 2008 à 19:41
Je n'ai pas ton classeur, donc difficile à suivre mais grosse erreur de mettre ..
On Error Resume Next 'Cette intruction est laissée pour tester le comportement
Sauf au cas ou le classeur n'est pas ouvert; mais dans le cas que tu expose le classeur ne sait pas être ouvert puisque tu crée un objet Excel; ensuite il n'est pas activer en de plus il n'y a pas de classeur ouvert, donc..

Cela interdit de suivre les erreurs pas à pas, met ces lignes en REM et active la macro en pas à pas, ce seras plus explicit et au moins tu bloqueras sur l'erreur.

sans path imposé ??
Soit tu indique où se situe le fichier; soit il est dans le même répertoir que l'appli en cour, mais Windows n'a pas de boule de cristal !!
0
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
21 juin 2008 à 20:09
J'ai plus beaucoup le temps ce soir, mais pour ouvrir une application Excel...
Dim XL as objet
   Set XL = CreateObject("excel.application")
   XL.workbooks.Open  ("Nom du classeur.xls")

tu doit le créer chaque fois que tu vient dans la macro puisqu'en fin de macro tu détruit l'objet, il n'existe donc plus.
0
Rejoignez-nous