Appel de macro Excel depuis une autre application [Résolu]

Signaler
Messages postés
2
Date d'inscription
mardi 24 juin 2008
Statut
Membre
Dernière intervention
25 juin 2008
-
Messages postés
2
Date d'inscription
mardi 24 juin 2008
Statut
Membre
Dernière intervention
25 juin 2008
-
Bonjour,

je suis confronté au problème suivant:
J'ai une macro, Mamacro, dans un fichier Excel qui doit insérer des lignes dans une feuille.
Si la macro est exécutée directement dans l'environnement Excel, aucun souci.

Maintenant, cette macro est appellée, depuis une autre application Office (Project) via la commande
//après ouverture du fichier Excel contenant la macro
Excel.run "MonfichierExcel.xls!Mamacro()"

L'appel à la macro fonctionne (vérifier par de l'écriture dans des cellules) mais certaines instructions de la macro
ne marchent pas. Entre autre, le copier coller, l'insertion de ligne,
la suppression de ligne... c'est balo me direz vous.

Est ce que quelqu'un saurait m'expliquer pourquoi certaines commandes ne marchent pas.
Y'a t-il un paramétrage quelconque à faire lors de l'ouverture du classeur Excel? Est ce un bug Excel?

Merci

Flagadada

3 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

donne nous le code de ta macro et le code qui te permet de l'executer pour que l'on puisse t'aider... par ce que la... pas simple dans c'est condition !

A+
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
36
thème topic : déplacé de VB6 vers VBA
Messages postés
2
Date d'inscription
mardi 24 juin 2008
Statut
Membre
Dernière intervention
25 juin 2008

Salut,

Bon j'ai planché pour faire un petit exemple simple à votre demande, et oh surprise ca marche...
En fait, l'exemple que je souhaitais vous envoyer était un appel d'une macro d'un fichier Excel à partir d'un autre fichier Excel. Ca a marché. Dans mon problème, l'appel se fait depuis un application MS Project. J'ai alors essayé la même chose avec un exemple project. Et là ca ne marchait pas. J'ai investigué et l'explication est la suivante:
Dans ma macro Project, j'utilisais des application.workbook.open pour ouvrir le fichier Excel, puis des application.run ("Lefichier.xls!mamacro"). En fait, à partir du moment ou je manipulais des fichier Excel, il valait mieux utiliser Excel.workbook.open et Excel.run ("Lefichier.xls!mamacro"). Et là ca marche sans problème.

A titre d'information, voici le code de la macro du fichier Excel appelé La_macro_appellee.xls:
Sub testLocal()
    MacroAppeleeEcriture
    If VBA.StrComp(ActiveWorkbook.Sheets("test").Cells(2, 1).Value, "Texte pour vérifier le décalage", vbTextCompare) <> 0 Then
        appel = MsgBox("L'écriture a échoué", vbApplicationModal + vbInformation + vbOKOnly, "Test macro")
    End If
    MacroAppeleeDecalage
    If VBA.StrComp(ActiveWorkbook.Sheets("test").Cells(3, 1).Value, "Texte pour vérifier le décalage", vbTextCompare) <> 0 Then
        appel = MsgBox("Le décalage a échoué", vbApplicationModal + vbInformation + vbOKOnly, "Test macro")
    End If
    MacroAppeleeCopie
    If VBA.StrComp(ActiveWorkbook.Sheets("test").Cells(4, 1).Value, "Texte pour vérifier le décalage", vbTextCompare) <> 0 Then
        appel = MsgBox("La copie a échoué", vbApplicationModal + vbInformation + vbOKOnly, "Test macro")
    End If

End Sub
Sub MacroAppeleeEcriture()
    ActiveWorkbook.Sheets("test").Cells(2, 1) = "Texte pour vérifier le décalage"
End Sub
Sub MacroAppeleeDecalage()
    ActiveWorkbook.Sheets("test").Rows("2:2").Select
    Selection.Insert Shift:= xlDown
End Sub
Sub MacroAppeleeCopie()
    ActiveWorkbook.Sheets("test").Rows("2:2").Select
    Selection.Copy
    ActiveWorkbook.Sheets("test").Rows("2:2").Select
    Selection.Insert Shift: =xlDown
End Sub

Voici le code de la macro appelante du fichier MS Project
Sub testDeporte()

    Excel.Workbooks.Open ("La_macro_appellee.xls")
   
    Excel.Run ("La_macro_appellee.xls!MacroAppeleeEcriture")
    If VBA.StrComp(Excel.Workbooks("La_macro_appellee.xls").Sheets("test").Cells(2, 1).Value, "Texte pour vérifier le décalage", vbTextCompare) <> 0 Then
        appel = MsgBox("L'écriture a échoué", vbApplicationModal + vbInformation + vbOKOnly, "Test macro")
    End If
    Excel.Run ("La_macro_appellee.xls!MacroAppeleeDecalage")
    If VBA.StrComp(Excel.Workbooks("La_macro_appellee.xls").Sheets("test").Cells(3, 1).Value, "Texte pour vérifier le décalage", vbTextCompare) <> 0 Then
        appel = MsgBox("Le décalage a échoué", vbApplicationModal + vbInformation + vbOKOnly, "Test macro")
    End If
    Excel.Run ("La_macro_appellee.xls!MacroAppeleeCopie")
    If VBA.StrComp(Excel.Workbooks("La_macro_appellee.xls").Sheets("test").Cells(4, 1).Value, "Texte pour vérifier le décalage", vbTextCompare) <> 0 Then
        appel = MsgBox("La copie a échoué", vbApplicationModal + vbInformation + vbOKOnly, "Test macro")
    End If
    Excel.Workbooks("La_macro_appellee.xls").Close SaveChanges: =False
End Sub
Dans cette dernière macro, Si Excel est remplacé par application, les insertion et copie ne marchent pas.

en tout cas, merci pour votre aide indirecte qui m'a fait réfélchir

Flagadada