Bonjour,
Voilà mon problème : ouvrir, écrire dans une feuille, et fermer un fichier excel pas de soucis.
Seulement là dans une application, je dois écrire dans un fichier déjà ouvert et je bloque complètement.
- Si je fais un GetObject des applications ouvertes, je récupère seulement la première instance Excel. Si l'utilisateur a lancé excel plusieurs fois pour d'autres choses du coup ça ne marche pas.
- Si je fais un GetObject en précisant mon fichier, ça me créé une autre instance de mon fichier...
- J'ai essayé de parcourir les instances Excel mais pas moyen de trouver sur internet. Je peux compter le nombre d'instances mais pas les utiliser. En tout cas je ne sais pas le faire.
Test avec GetObject sur mon fichier
Test de parcours des instances... Mais ça plante sur instance.Workbooks car ce n'est pas des types excel.application donc pas de workbook... logique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 ' Variables Dim oXL As Excel.Application = Nothing Dim oWB As Excel.Workbook = Nothing Dim oSheet As Excel.Worksheet = Nothing Dim Workbook_GSP_export_open As Boolean = False ' Test si fichier d'export déjà ouvert Try oXL = GetObject(Application.StartupPath + "\GSP_Export_Excel.xlsx").Application() For Each Wb In oXL.Workbooks If Wb.Name = "GSP_Export_Excel.xlsx" Then oWB = Wb Exit For End If Next Workbook_GSP_export_open = True Catch ex As Exception End Try
Si vous avez une combine.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Dim strComputer As String Dim objWMIService As Object Dim objList As Object strComputer = "." objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") objList = objWMIService.execquery("select * from win32_process where name='EXCEL.EXE'") Dim espion As Integer = objList.Count For Each instance In objList For Each Wb In instance.Workbooks If Wb.Name = "GSP_Export_Excel.xlsx" Then oWB = Wb Exit For End If Next Next
Merci
Partager