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 ;-)

7 réponses

1 2
Avatar
ng
Salut,

Où est défini GestError() ? Et al constance ResumeOut ?

End



Quelle horreur :) !!!
Ne JAMAIS utiliser End ! ;)
Consulte la FAQ pour plus d'infos, c'est tjrs la même chose.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



Laurent Jordi (www.ezlogic.mc) <inf[o]@ezlogic.mc> a écrit :

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
Je n'ai pas de procédure GestError, j'utilise parfois la
gestion d'erreur mais avec on error goto...
De quoi s'agit-il exactement ?

Merci d'avance.
Yann


-----Message d'origine-----
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



Avatar
Yann
Que me conseillez vous à la place du end ?

Je n'ai malheureusement pas accès au site FAQ VB que vous
donnez... (ce site est bloqué par ma boîte...)

Merci d'avance.
Yann



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

Où est défini GestError() ? Et al constance ResumeOut ?

End



Quelle horreur :) !!!
Ne JAMAIS utiliser End ! ;)
Consulte la FAQ pour plus d'infos, c'est tjrs la même


chose.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



Laurent Jordi (www.ezlogic.mc) <inf[o]@ezlogic.mc> a


écrit :

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
Ludovic SOEUR
J'ai essayé de mon côté aussi, ca marche parfaitement si on enlève la ligne
Set appex2 = GetObject(, "excel.Application")

Si ca ne marche pas, c'est que soit le pointeur appex2 soit exl2 est écrasé
ailleurs dans ton code par une commande du genre
Set appex2 ou
Set exl2
Recherhce bien toutes les lignes de ce genre de ton projet, met un point
d'arrêt à chacune et regarde si ton prog passe dans l'une d'elle.
Si oui, ne cherche pas plus loin....ton pointeur est écrasé et donc tu ne
fermes pas ce que tu crois fermer.



"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
Ludovic SOEUR
JAMAIS de End. Cela consiste à tuer ton application de la même façon que par
le stop sous VB. Il n'y a aucune libération de ressource, de connexions, et
j'en passe.
Le End doit être enlevé et tu dois t'arranger à sortir de toutes tes
fonctions/forms en libérant les ressources (par des unload si nécessaire ou
set=nothing)etc....jusqu'à arriver à la form de départ, celle qui a été le
départ de ton appli. Là, et seulement là, tu peux envoyer le signal "close"
pour quitter ton application (ce n'est bien sûr pas nécessaire si
l'utilisateur a cliqué sur la croix).


"Yann" a écrit dans le message de
news: 348401c47ebe$ff04b0c0$
Que me conseillez vous à la place du end ?

Je n'ai malheureusement pas accès au site FAQ VB que vous
donnez... (ce site est bloqué par ma boîte...)

Merci d'avance.
Yann



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

Où est défini GestError() ? Et al constance ResumeOut ?

End



Quelle horreur :) !!!
Ne JAMAIS utiliser End ! ;)
Consulte la FAQ pour plus d'infos, c'est tjrs la même


chose.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



Laurent Jordi (www.ezlogic.mc) <inf[o]@ezlogic.mc> a


écrit :

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\)
C'est un exemple les gars...

Quantà la gestion d'erreur pa proc crée un fichier de log jour par jour et
le met à jour
J'ai également créé un petit calendrier malin qui permet de consulter ces
logs c'est pratique pour savoir ce qui s'est passé quand le prog est déployé
chez l'utilisateur, il suffit qu'il envoie le log par mail...

Je suis désolé de ne pas pouvoir vous développer toute l'appli mais je bosse
aussi...

Je pense sincèrement que je vous ai donné une bonne piste, essayez de
l'adapter à votre besoin...

Fites un effort koi ... s)

@+




"ng" a écrit dans le message de
news:
Salut,

Où est défini GestError() ? Et al constance ResumeOut ?

> End

Quelle horreur :) !!!
Ne JAMAIS utiliser End ! ;)
Consulte la FAQ pour plus d'infos, c'est tjrs la même chose.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



Laurent Jordi (www.ezlogic.mc) <inf[o]@ezlogic.mc> a écrit :

> 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
ng
Voila c'est tt a fait ca !

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



Ludovic SOEUR a écrit :

JAMAIS de End. Cela consiste à tuer ton application de la même façon
que par le stop sous VB. Il n'y a aucune libération de ressource, de
connexions, et j'en passe.
Le End doit être enlevé et tu dois t'arranger à sortir de toutes tes
fonctions/forms en libérant les ressources (par des unload si
nécessaire ou set=nothing)etc....jusqu'à arriver à la form de départ,
celle qui a été le départ de ton appli. Là, et seulement là, tu peux
envoyer le signal "close" pour quitter ton application (ce n'est bien
sûr pas nécessaire si l'utilisateur a cliqué sur la croix).


"Yann" a écrit dans le message
de news: 348401c47ebe$ff04b0c0$
Que me conseillez vous à la place du end ?

Je n'ai malheureusement pas accès au site FAQ VB que vous
donnez... (ce site est bloqué par ma boîte...)

Merci d'avance.
Yann



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

Où est défini GestError() ? Et al constance ResumeOut ?

End



Quelle horreur :) !!!
Ne JAMAIS utiliser End ! ;)
Consulte la FAQ pour plus d'infos, c'est tjrs la même


chose.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



Laurent Jordi (www.ezlogic.mc) <inf[o]@ezlogic.mc> a


écrit :

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