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

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
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
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
Si vous avez une combine.

Merci