OVH Cloud OVH Cloud

Terminer un processus Excel

17 réponses
Avatar
Fred Del
Bonjour =E0 tous et toutes,

Je d=E9veloppe actuellement un outil, en VB.Net, permettant=20
de g=E9n=E9rer des fichiers excel. J'utilise pour cela l'Excel=20
Application. Je ne peux pas utiliser OWC ou autre=20
composant du meme genre car ils ne m'offrent pas=20
suffisament d'option de mise en page.
Mon probleme est de terminer le processus excel.exe. En=20
effet il reste dans la liste process de la machine alors=20
que mon appli est termin=E9e et que les objets ont =E9t=E9=20
d=E9truits.=20

Si quelqu'un a une solution merci d avance !!!!

Ptit Fr=E9do deviendra grand .... un jour ;-)

10 réponses

1 2
Avatar
Laurent Jordi \(www.ezlogic.mc\)
Salut,

Sauf erreur tu dois invoquer le destructeur en faisant un

MyExcelObj = nothing

Je ne suis pas sur que ca marche en dot net demande confirmation sur
vbdotnet

@+

LJ

journaux
http://www.ezlogic.mc
http://info.mmei.fr
http://www.associationjdouce.com

Sites
www.samfet-group.com
www.artappointment.com
www.mmei.fr
www.universamaman.com
www.emma-antonucci.net
www.hellodito.com
www.crazymaster.com
www.hotelsurleweb.com



"Fred Del" a écrit dans le message de
news:274901c47e10$fa359a90$
Bonjour à tous et toutes,

Je développe actuellement un outil, en VB.Net, permettant
de générer des fichiers excel. J'utilise pour cela l'Excel
Application. Je ne peux pas utiliser OWC ou autre
composant du meme genre car ils ne m'offrent pas
suffisament d'option de mise en page.
Mon probleme est de terminer le processus excel.exe. En
effet il reste dans la liste process de la machine alors
que mon appli est terminée et que les objets ont été
détruits.

Si quelqu'un a une solution merci d avance !!!!

Ptit Frédo deviendra grand .... un jour ;-)
Avatar
Fred Del
Oui oui la commande fonctionne sous VN.Net mais elle est
pas suffisante malheureusement !! et le processus reste
quand meme :( en bref ca tue l objet mais pas le
processus !


-----Message d'origine-----
Salut,

Sauf erreur tu dois invoquer le destructeur en faisant un

MyExcelObj = nothing

Je ne suis pas sur que ca marche en dot net demande


confirmation sur
vbdotnet

@+

LJ

journaux
http://www.ezlogic.mc
http://info.mmei.fr
http://www.associationjdouce.com

Sites
www.samfet-group.com
www.artappointment.com
www.mmei.fr
www.universamaman.com
www.emma-antonucci.net
www.hellodito.com
www.crazymaster.com
www.hotelsurleweb.com



"Fred Del" a écrit dans le message de
news:274901c47e10$fa359a90$
Bonjour à tous et toutes,

Je développe actuellement un outil, en VB.Net, permettant
de générer des fichiers excel. J'utilise pour cela l'Excel
Application. Je ne peux pas utiliser OWC ou autre
composant du meme genre car ils ne m'offrent pas
suffisament d'option de mise en page.
Mon probleme est de terminer le processus excel.exe. En
effet il reste dans la liste process de la machine alors
que mon appli est terminée et que les objets ont été
détruits.

Si quelqu'un a une solution merci d avance !!!!

Ptit Frédo deviendra grand .... un jour ;-)


.



Avatar
Pierre Alexis [MVP]
Salut Fred,

Tu as écrit :

Oui oui la commande fonctionne sous VN.Net mais elle est
pas suffisante malheureusement !! et le processus reste
quand meme :( en bref ca tue l objet mais pas le
processus !



En .Net, mettre la référence de ton object "Excel Application" à Nothing ne
décrémente pas le compteur de références de l'objet COM. Or tant que celui-ci
n'est pas égal à zéro, l'objet COM ne se détruira pas. (avec COM c'est l'objet
qui est responsable de sa durée de vie, il garde donc un compteur de
références interne pour savoir si il y'a encore quelqu'un qui lui accède ; en
.Net on a un Garbage Collector chargé de détruire les objets, plus besoin de
compteur de références, donc quand tu affectes Nothing à une référence, le CLR
ne décrémente pas le compteur de référence, il s'en réfère plutôt au GC chargé
de reprendre l'objet).

La solution à ce problème est de faire sois-même la décrémentation du compteur
de référence. Cela se fait grâce à la méthode partagée suivante :

Marshal.ReleaseComObject(MyComObj)

où MyComObj est ton objet COM :-)

Bonne journée :-p

--
Pierre ALEXIS - MVP Visual Basic Classique
Courriel & messenger :
FAQ Visual Basic : http://faq.vb.free.fr/
Avatar
Laurent Jordi \(www.ezlogic.mc\)
Comm j'aimerais être intel y gens comme ca...


"Pierre Alexis [MVP]" a écrit dans le message de
news:uVZU%
Salut Fred,

Tu as écrit :

> Oui oui la commande fonctionne sous VN.Net mais elle est
> pas suffisante malheureusement !! et le processus reste
> quand meme :( en bref ca tue l objet mais pas le
> processus !

En .Net, mettre la référence de ton object "Excel Application" à Nothing


ne
décrémente pas le compteur de références de l'objet COM. Or tant que


celui-ci
n'est pas égal à zéro, l'objet COM ne se détruira pas. (avec COM c'est


l'objet
qui est responsable de sa durée de vie, il garde donc un compteur de
références interne pour savoir si il y'a encore quelqu'un qui lui accède ;


en
.Net on a un Garbage Collector chargé de détruire les objets, plus besoin


de
compteur de références, donc quand tu affectes Nothing à une référence, le


CLR
ne décrémente pas le compteur de référence, il s'en réfère plutôt au GC


chargé
de reprendre l'objet).

La solution à ce problème est de faire sois-même la décrémentation du


compteur
de référence. Cela se fait grâce à la méthode partagée suivante :

Marshal.ReleaseComObject(MyComObj)

où MyComObj est ton objet COM :-)

Bonne journée :-p

--
Pierre ALEXIS - MVP Visual Basic Classique
Courriel & messenger :
FAQ Visual Basic : http://faq.vb.free.fr/




Avatar
Pierre Alexis [MVP]
Salut Laurent,

Tu as écrit :

Comm j'aimerais être intel y gens comme ca...



Faut pas croire tu sais, je l'ai pas "sucé de mon puce" comme on dit par ici
(ça veut dire que cette explication ne m'est pas venue comme ça). J'ai
simplement lu ça dans un livre .Net et dans la doc de Microsoft... ;-)

--
Pierre ALEXIS - MVP Visual Basic Classique
Courriel & messenger :
FAQ Visual Basic : http://faq.vb.free.fr/
Avatar
Laurent Jordi \(www.ezlogic.mc\)
Moais... donc tu sais lire toa... moi je ne regarde que les zimages dans les
livres d'info...

Lol

Mais bon

Tève de plaisanterie... rebossons...

tou'd'meme

@+

LJ
"Pierre Alexis [MVP]" a écrit dans le message de
news:O%
Salut Laurent,

Tu as écrit :

> Comm j'aimerais être intel y gens comme ca...

Faut pas croire tu sais, je l'ai pas "sucé de mon puce" comme on dit par


ici
(ça veut dire que cette explication ne m'est pas venue comme ça). J'ai
simplement lu ça dans un livre .Net et dans la doc de Microsoft... ;-)

--
Pierre ALEXIS - MVP Visual Basic Classique
Courriel & messenger :
FAQ Visual Basic : http://faq.vb.free.fr/




Avatar
Yann
Bonjour,

J'ai un problème similaire en VB, j'ouvre un fichier excel
pour faire des calculs, mais lorsque je veux fermer la
liaison, le processus ne se termine pas toujours (parfois
ça marche, parfois non) et reste donc dans le gestionnaire
des tâches.


J'ouvre avec :

Set appex2 = CreateObject("excel.Application")
Set exl2 = appex2.Workbooks.Open(nomfich2, 0,
True, , , , , , , , False)


En gros je fais pour fermer :

Set appex2 = GetObject(, "excel.Application")
exl2.Close SaveChanges:úlse
appex2.Quit
Set exl2 = Nothing
Set appex2 = Nothing

Merci d'avance pour votre aide.
Cordialement.
Yann
Avatar
Laurent Jordi \(www.ezlogic.mc\)
Votez pour moa je veux être mvp à la place du mvp...

'********************************************************
Public Sub KillXL()
'********************************************************
On Error GoTo LocalError
Dim PrevInstance As Object
Dim Count As Integer

'**** Si XL est en cours d'utilisation -> Fermeture d'XL
Do
Set PrevInstance = Nothing
On Error Resume Next
Set PrevInstance = GetObject(, "Excel.application")
On Error GoTo LocalError
If Not PrevInstance Is Nothing Then
'MsgBox "Fermeture d'Excel"
Call QuitExcel(PrevInstance)
End If
Count = Count + 1
If Count = 5 Then Exit Do
Loop

DoEvents
Exit Sub
'******************************************
LocalError:
'******************************************
If GestError(Err, Me.Name, "KillXL", Params.PathLog) = ResumeOut Then
Screen.MousePointer = vbNormal: Resume out
Else
End
End If
out:
End Sub
'********************************************************
Public Sub QuitExcel(Instance As Object)
'********************************************************
On Error GoTo LocalError
Dim WB As Workbook
If Not Instance Is Nothing Then
On Error Resume Next
Instance.DisplayAlerts = False
For Each WB In Instance.Workbooks
WB.Close
Next
Instance.Quit
On Error GoTo LocalError
Set WB = Nothing
Set Instance = Nothing
End If
Exit Sub
'******************************************
LocalError:
'******************************************
If GestError(Err, Me.Name, "QuitExcel", Params.PathLog) = ResumeOut Then
Screen.MousePointer = vbNormal: Resume out
Else
End
End If
out:
End Sub


"Yann" a écrit dans le message de
news:33b601c47eae$093fc540$
Bonjour,

J'ai un problème similaire en VB, j'ouvre un fichier excel
pour faire des calculs, mais lorsque je veux fermer la
liaison, le processus ne se termine pas toujours (parfois
ça marche, parfois non) et reste donc dans le gestionnaire
des tâches.


J'ouvre avec :

Set appex2 = CreateObject("excel.Application")
Set exl2 = appex2.Workbooks.Open(nomfich2, 0,
True, , , , , , , , False)


En gros je fais pour fermer :

Set appex2 = GetObject(, "excel.Application")
exl2.Close SaveChanges:úlse
appex2.Quit
Set exl2 = Nothing
Set appex2 = Nothing

Merci d'avance pour votre aide.
Cordialement.
Yann
Avatar
Yann
Merci beaucoup mais il y a un problème, il fait une
erreur "procédure sub ou function non définie" sur :
GestError (idem avec GetError, j'ai supposé que c'était
plutôt ça)

Merci d'avance.
Yann



-----Message d'origine-----
Votez pour moa je veux être mvp à la place du mvp...

'********************************************************
Public Sub KillXL()
'********************************************************
On Error GoTo LocalError
Dim PrevInstance As Object
Dim Count As Integer

'**** Si XL est en cours d'utilisation -> Fermeture


d'XL
Do
Set PrevInstance = Nothing
On Error Resume Next
Set PrevInstance = GetObject


(, "Excel.application")
On Error GoTo LocalError
If Not PrevInstance Is Nothing Then
'MsgBox "Fermeture d'Excel"
Call QuitExcel(PrevInstance)
End If
Count = Count + 1
If Count = 5 Then Exit Do
Loop

DoEvents
Exit Sub
'******************************************
LocalError:
'******************************************
If GestError(Err, Me.Name, "KillXL", Params.PathLog)


= ResumeOut Then
Screen.MousePointer = vbNormal: Resume out
Else
End
End If
out:
End Sub
'********************************************************
Public Sub QuitExcel(Instance As Object)
'********************************************************
On Error GoTo LocalError
Dim WB As Workbook
If Not Instance Is Nothing Then
On Error Resume Next
Instance.DisplayAlerts = False
For Each WB In Instance.Workbooks
WB.Close
Next
Instance.Quit
On Error GoTo LocalError
Set WB = Nothing
Set Instance = Nothing
End If
Exit Sub
'******************************************
LocalError:
'******************************************
If GestError(Err, Me.Name, "QuitExcel",


Params.PathLog) = ResumeOut Then
Screen.MousePointer = vbNormal: Resume out
Else
End
End If
out:
End Sub


"Yann" a écrit dans le message


de
news:33b601c47eae$093fc540$
Bonjour,

J'ai un problème similaire en VB, j'ouvre un fichier excel
pour faire des calculs, mais lorsque je veux fermer la
liaison, le processus ne se termine pas toujours (parfois
ça marche, parfois non) et reste donc dans le gestionnaire
des tâches.


J'ouvre avec :

Set appex2 = CreateObject("excel.Application")
Set exl2 = appex2.Workbooks.Open(nomfich2, 0,
True, , , , , , , , False)


En gros je fais pour fermer :

Set appex2 = GetObject(, "excel.Application")
exl2.Close SaveChanges:úlse
appex2.Quit
Set exl2 = Nothing
Set appex2 = Nothing

Merci d'avance pour votre aide.
Cordialement.
Yann


.



Avatar
Laurent Jordi \(www.ezlogic.mc\)
Normal... Je nje t'ai pas donné la procédure gest error... Tu n'en a pas ?
Tu devrais, remplace la mienne par la tienne ou vire la gestion d'erreur

"Yann" a écrit dans le message de
news:34da01c47eba$78a76670$
Merci beaucoup mais il y a un problème, il fait une
erreur "procédure sub ou function non définie" sur :
GestError (idem avec GetError, j'ai supposé que c'était
plutôt ça)

Merci d'avance.
Yann



-----Message d'origine-----
Votez pour moa je veux être mvp à la place du mvp...

'********************************************************
Public Sub KillXL()
'********************************************************
On Error GoTo LocalError
Dim PrevInstance As Object
Dim Count As Integer

'**** Si XL est en cours d'utilisation -> Fermeture


d'XL
Do
Set PrevInstance = Nothing
On Error Resume Next
Set PrevInstance = GetObject


(, "Excel.application")
On Error GoTo LocalError
If Not PrevInstance Is Nothing Then
'MsgBox "Fermeture d'Excel"
Call QuitExcel(PrevInstance)
End If
Count = Count + 1
If Count = 5 Then Exit Do
Loop

DoEvents
Exit Sub
'******************************************
LocalError:
'******************************************
If GestError(Err, Me.Name, "KillXL", Params.PathLog)


= ResumeOut Then
Screen.MousePointer = vbNormal: Resume out
Else
End
End If
out:
End Sub
'********************************************************
Public Sub QuitExcel(Instance As Object)
'********************************************************
On Error GoTo LocalError
Dim WB As Workbook
If Not Instance Is Nothing Then
On Error Resume Next
Instance.DisplayAlerts = False
For Each WB In Instance.Workbooks
WB.Close
Next
Instance.Quit
On Error GoTo LocalError
Set WB = Nothing
Set Instance = Nothing
End If
Exit Sub
'******************************************
LocalError:
'******************************************
If GestError(Err, Me.Name, "QuitExcel",


Params.PathLog) = ResumeOut Then
Screen.MousePointer = vbNormal: Resume out
Else
End
End If
out:
End Sub


"Yann" a écrit dans le message


de
news:33b601c47eae$093fc540$
Bonjour,

J'ai un problème similaire en VB, j'ouvre un fichier excel
pour faire des calculs, mais lorsque je veux fermer la
liaison, le processus ne se termine pas toujours (parfois
ça marche, parfois non) et reste donc dans le gestionnaire
des tâches.


J'ouvre avec :

Set appex2 = CreateObject("excel.Application")
Set exl2 = appex2.Workbooks.Open(nomfich2, 0,
True, , , , , , , , False)


En gros je fais pour fermer :

Set appex2 = GetObject(, "excel.Application")
exl2.Close SaveChanges:úlse
appex2.Quit
Set exl2 = Nothing
Set appex2 = Nothing

Merci d'avance pour votre aide.
Cordialement.
Yann


.



1 2