OVH Cloud OVH Cloud

Arrêter un processus

1 réponse
Avatar
David
Bonjour tout le monde,

Je pilote excel via VB.net

Pour me connecter à Excel, j'utilise ce code :

Dim appexcel As Excel.Application
Dim wbexcel As Excel.Workbook
'Dim erreurnom = MessageBox.Show("Il y'a une différence de nom entre
la table Access et la feuille de données Excel", "Attention !")
appexcel = CreateObject("Excel.application")
wbexcel = appexcel.Workbooks.Open("Z:\file.xls")
'wbexcel.ReadOnly = True
appexcel.Visible = True

Le problème est que le processus (thread) ne se ferme pas et quand je lance
l'applicaton un vingtaine de fois, il prend beaucoup de mémoire.

Ma question est donc de savoir comment supprimer le processus "Excel"
lorsqu'il a terminé d'envoyer les données vers le fichier xls ?

Merci d'avance pour votre aide.
David

1 réponse

Avatar
Patrick Philippot
Bonjour,

Le problème est dû au fait que le garbage collector ne détruit pas les
objets wrapper immédiatement. Les recommandations de Microsoft pour éviter
ce problème sont les suivantes (et valent pour toutes les applications
Office):

1. Chaque objet Office utilisé doit faire l'objet d'une déclaration de
variable séparée. Ce qui est fait dans votre code.

2. Chaque objet doit être fermé (Close) et mis explicitement à Nothing.

3. Il faut utiliser la méthode Quit sur l'objet application: appexcel.Quit.

4. Il faut utiliser la classe Marshal pour provoquer la destruction du
wrapper COM:

Marshal.ReleaseComObject(wbexcel)
Marshal.ReleaseComObject(appexcel)

Le code devrait donc ressembler à ça quand vos opérations sont terminées:

Marshal.ReleaseComObject(wbexcel)
wbexcel = Nothing
appExcel.Quit
Marshal.ReleaseComObject(appexcel)
appexcel = Nothing

Non testé. Il se peut que l'ordre doive être modifié. Il se peut aussi que
cela ne fonctionne pas, ce problème de comptage de référence sur les objets
Office n'ayant jamais été réglé proprement (un des inconvénients du COM qui
disparaît avec .Net :-) )..

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr