Appel de macro Excel depuis une autre application

Résolu
chastada Messages postés 2 Date d'inscription mardi 24 juin 2008 Statut Membre Dernière intervention 25 juin 2008 - 24 juin 2008 à 09:12
chastada Messages postés 2 Date d'inscription mardi 24 juin 2008 Statut Membre Dernière intervention 25 juin 2008 - 25 juin 2008 à 09:23
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

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
24 juin 2008 à 15:15
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+
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 juin 2008 à 15:15
thème topic : déplacé de VB6 vers VBA
3
chastada Messages postés 2 Date d'inscription mardi 24 juin 2008 Statut Membre Dernière intervention 25 juin 2008
25 juin 2008 à 09:23
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
0
Rejoignez-nous