Macro Excel travaillant sur plusieurs instances

  • Auteur de la discussion JulienG92
  • Date de début

JulienG92

Nouveau membre
Bonjour tout le monde,

Je travaille actuellement sur une macro Excel qui me permet d'importer et traiter toute une série d'information provenant d'une autre feuille excel. Jusque là rien de bien sorcier. La partie traitement tourne sans problème.

Le problème c'est que le fichier excel contenant les données à traiter est ouvert par un programme qui à chaque fois, démarre une nouvelle instance excel.
Du coup, je ne sais pas comment faire. A mon avis il faut passer par du VB "pur" mais je n'ai pas les connaissances pour et, après 3 heures à chercher, je n'y arrive pas...

Quelques questions du coup :
- est-ce qu'on peut détecter, recenser et manipuler plusieurs instances excel simultanément, sans conflit ? si oui, comment ?
- est-ce que les objets workbooks et worksheets sont "distingables" entre les différentes instances ? si oui, comment ?

Je suis preneur de quelques pistes pour m'orienter dans ma recherche de solution :)

Merci d'avance pour votre aide,

Julien
 

zeb

Modérateur
Eh eh. Classique. Demande à Darkspoil. ;)

est-ce qu'on peut détecter, recenser et manipuler plusieurs instances excel simultanément, sans conflit ?
Oui.
si oui, comment ?
En VB "pur". A ma connaissance, il n'existe pas de collections des instances d'Excel.

est-ce que les objets workbooks et worksheets sont "distingables" entre les différentes instances ?
Oui.
si oui, comment ?
Oui. Si on connaît ces instances, pas de problème.

L'instance d'Excel en cours est pointée par l'objet Excel.Application.
Un classeur est un élément de la collection Excel.Application.Workbooks.
Un classeur connaît son application : thisWorkbook.Application.

Soit tu connais le nom du fichier XLS ouvert, et là, reporte-toi à ce sujet :

Soit tu ne connais pas ce nom. Et là, c'est du VB "pur".
Utilise EnumWindows pour récupérer le handle des instances d'Excel. Puis utilise AccessibleObjectFromWindow pour en faire des objets utilisables en VB.
 

FanOfSpringsteen

Nouveau membre
Bonjour,

On peut manipuler plusieurs applications excel à partir d'une seule macro directement par le biais du VBA.

Sub GetExcel0()
Dim MyXL1, MyXL2 As Object ' Variable devant contenir la
' référence à Microsoft Excel.
'MyXL1 est un workbook et MyXL2 est l'application excel que je recherche

' Je n'ai pas traité ici les erreurs en supposant que le fichier TEST2.excel est présent en mémoire dans une instance séparée d'excel

Set MyXL1 = GetObject("c:\Documents and Settings\Mon_ID\Bureau\test2.xls")
Set MyXL2 = MyXL1.Parent 'Récupération de l'application qui gère actuellement test 2


MyXL2.Application.Visible = False On verra l'application excel portant test2 disparaître de la liste des tâches
MyXL2.Application.Visible = True On verra l'application excel réapparaître (c'est bien la bonne)


Msgbox (MyXL2.cells (1,1))
End sub


Et voilà pour créer une deuxième instance d'excel (à inclure dans le fichier test1.xls)

Sub EXCEL_New()
Dim ExcelApp1 As Object

' Création de l'application Excel hébergeant "Test2.XLS"

Set ExcelApp1 = CreateObject("Excel.Application")
ExcelApp1.Workbooks.Open Filename:="c:\Documents and Settings\Mon_ID\Bureau\test2.xls", UpdateLinks:=0, ReadOnly:=False

End sub

Jean-Pierre
 

zeb

Modérateur
Salut,

Que tu débarques pour donner une solution qui a déjà été donnée (as-tu suivi le lien proposé 3 ans, 3 mois, 20 jours, 19 secondes avant toi ?), passe encore. Comme tu donnes un code très détaillé, pourquoi pas ?

Mais que tu le fasses en dépit du respect du règlement, il n'en est pas question.

----------------

Si tu te sens l'âme d'un bon samaritain, sois le bienvenu.
Les questions sur le VB en général et en particulier et sur le VBA sont nombreuses, ici.
Mais d'abord, va lire le règlement et applique-le : toute pièce de code doit être présentée avec la balise
Code:
.

----------------

Le mutawa veuille :grrr:
.
.
.
:lol:
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 084
Membres
1 586 286
Dernier membre
petitangebleu1977
Partager cette page
Haut