OVH Cloud OVH Cloud

automation, quitter vraiment excel

15 réponses
Avatar
Bonjour,

bon déja je vous réitere mes remerciements pour vos précédentes réponses mon
module d'export vers excel est fini et j'en suis trés content :-)

J'ai quand meme néanmoins un petit souci : a la fn de mon code le
"appexcel.Quit" laisse à désirer car si excel se ferme en apparence, je
constate en faisant un Ctrl Alt Suppr que le process EXCEL.EXE est toujours
la...
ce qui est assez génant car je peux me retrouver a vec x process excel...
mon code est du style :

Set appexcel = CreateObject("Excel.Application")
appexcel.Visible = True
Set wbexcel = appexcel.Workbooks.Open(XLpath & "Modeles Export.xlt")
.. blalblabla
appexcel.Quit
(+ les Set Nothing)

Si je ne met pas le appexcel.Quit et que je ferme "manuellement", pas de
souci, le process est libéré.

Comment ça se fait ?

Merci pour vos avis et conseils.

10 réponses

1 2
Avatar
Gafish
Bonjour,

camille wrote:
J'ai quand meme néanmoins un petit souci : a la fn de mon code le
"appexcel.Quit" laisse à désirer car si excel se ferme en apparence,
je constate en faisant un Ctrl Alt Suppr que le process EXCEL.EXE est
toujours la...



Essaie plutôt de faire un
appexcel.Application.Quit

Arnaud

--
Charte du forum : http://users.skynet.be/mpfa/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
j'essaie...
ben non ça marche pas
... dommage :-)
j'ai rajouté un appexcel.ActiveWorkbook.close avant a tout hasard avant le
.Quit sans résultat non plus... (pas étonant)

Gafish wrote:
Bonjour,

camille wrote:
J'ai quand meme néanmoins un petit souci : a la fn de mon code le
"appexcel.Quit" laisse à désirer car si excel se ferme en apparence,
je constate en faisant un Ctrl Alt Suppr que le process EXCEL.EXE est
toujours la...



Essaie plutôt de faire un
appexcel.Application.Quit

Arnaud



Avatar
Bon ben a mon avis la fonction .quit est tout simplement buggée.
je viens de faire un petit test, me disant que peut etre ma fonction aurait
une co*ille qqpart, j'ai pris la fonction test toute simple qui se trouve
ici ( http://officesystem.access.free.fr/vba/export_recordset.htm )en la
simplifiant, (supression des lignes faisant reference au recordset) ce qui
donne
----------------------------------------------
Function quit_marche_pas()
Dim XL_App As Object
Set XL_App = CreateObject("Excel.Application")
Dim XL_classeur As Object
Dim XL_feuille As Object
With XL_App
.Visible = True
Set XL_classeur = .Workbooks.Open("D:Mes Documentsmodeles
export.xls")
Set XL_feuille = XL_classeur.Sheets("style texte")

.ActiveWorkbook.Save
.ActiveWorkbook.Close
.Quit
End With
Set XL_App = Nothing
Set XL_classeur = Nothing
Set XL_feuille = Nothing
End Function
------------------------------------------------------
et bien a l'issue de l'execution je vous le donne en mille, le process
EXCEL.EXE est toujours la.
ça donne quoi chez vous ?
ça sentirait pas un peu le * bug * ? ....
Avatar
Gilbert
Bonjour,

J'ai déjà eu ce problème il y a quelques temps.
J'avais dans ma procédure des commandes de mise en forme du classeur Excel
qui utilisent "Selection" comme
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With

C'était ça qui coinçait
Je les ai supprimées et mises dans une macro de mon fichier Excel. Tout
fonctionne normalement et le process Excel est bien supprimé.

--
Gilbert


<camille> a écrit dans le message de news:
42a02ea5$0$3880$
Bon ben a mon avis la fonction .quit est tout simplement buggée.
je viens de faire un petit test, me disant que peut etre ma fonction
aurait
une co*ille qqpart, j'ai pris la fonction test toute simple qui se trouve
ici ( http://officesystem.access.free.fr/vba/export_recordset.htm )en la
simplifiant, (supression des lignes faisant reference au recordset) ce qui
donne
----------------------------------------------
Function quit_marche_pas()
Dim XL_App As Object
Set XL_App = CreateObject("Excel.Application")
Dim XL_classeur As Object
Dim XL_feuille As Object
With XL_App
.Visible = True
Set XL_classeur = .Workbooks.Open("D:Mes Documentsmodeles
export.xls")
Set XL_feuille = XL_classeur.Sheets("style texte")

.ActiveWorkbook.Save
.ActiveWorkbook.Close
.Quit
End With
Set XL_App = Nothing
Set XL_classeur = Nothing
Set XL_feuille = Nothing
End Function
------------------------------------------------------
et bien a l'issue de l'execution je vous le donne en mille, le process
EXCEL.EXE est toujours la.
ça donne quoi chez vous ?
ça sentirait pas un peu le * bug * ? ....





Avatar
Ton experience est trés interessante, mais... tu remarqueras que dans l'exp
que je viens de donner, il n'y a aucune procédure tarabiscotée de mise en
forme ou autre... et le process est toujours la a la fin de l'execution
(correcte) de celle ci
tu pourrais tester ma fonction exemple et vérifier l'existence ou non du
process par Ctrl Alt Suppr, pour voir ?


Gilbert wrote:
Bonjour,

J'ai déjà eu ce problème il y a quelques temps.
J'avais dans ma procédure des commandes de mise en forme du classeur
Excel qui utilisent "Selection" comme
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With

C'était ça qui coinçait
Je les ai supprimées et mises dans une macro de mon fichier Excel.
Tout fonctionne normalement et le process Excel est bien supprimé.


<camille> a écrit dans le message de news:
42a02ea5$0$3880$
Bon ben a mon avis la fonction .quit est tout simplement buggée.
je viens de faire un petit test, me disant que peut etre ma fonction
aurait
une co*ille qqpart, j'ai pris la fonction test toute simple qui se
trouve ici (
http://officesystem.access.free.fr/vba/export_recordset.htm )en la
simplifiant, (supression des lignes faisant reference au recordset)
ce qui donne ----------------------------------------------
Function quit_marche_pas()
Dim XL_App As Object
Set XL_App = CreateObject("Excel.Application")
Dim XL_classeur As Object
Dim XL_feuille As Object
With XL_App
.Visible = True
Set XL_classeur = .Workbooks.Open("D:Mes Documentsmodeles
export.xls")
Set XL_feuille = XL_classeur.Sheets("style texte")

.ActiveWorkbook.Save
.ActiveWorkbook.Close
.Quit
End With
Set XL_App = Nothing
Set XL_classeur = Nothing
Set XL_feuille = Nothing
End Function
------------------------------------------------------
et bien a l'issue de l'execution je vous le donne en mille, le
process EXCEL.EXE est toujours la.
ça donne quoi chez vous ?
ça sentirait pas un peu le * bug * ? ....




Avatar
Gilbert
Je viens d'essayer ta fonction (en ne changeant que le nom du fichier et de
la feuille) et ça fonctionne normalement.
Le fichier s'ouvre puis la fenêtre disparait et aucun process Excel n'existe
ensuite.


--
Gilbert


<camille> a écrit dans le message de news:
42a03780$0$3873$
Ton experience est trés interessante, mais... tu remarqueras que dans
l'exp que je viens de donner, il n'y a aucune procédure tarabiscotée de
mise en forme ou autre... et le process est toujours la a la fin de
l'execution (correcte) de celle ci
tu pourrais tester ma fonction exemple et vérifier l'existence ou non du
process par Ctrl Alt Suppr, pour voir ?


Gilbert wrote:
Bonjour,

J'ai déjà eu ce problème il y a quelques temps.
J'avais dans ma procédure des commandes de mise en forme du classeur
Excel qui utilisent "Selection" comme
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With

C'était ça qui coinçait
Je les ai supprimées et mises dans une macro de mon fichier Excel.
Tout fonctionne normalement et le process Excel est bien supprimé.


<camille> a écrit dans le message de news:
42a02ea5$0$3880$
Bon ben a mon avis la fonction .quit est tout simplement buggée.
je viens de faire un petit test, me disant que peut etre ma fonction
aurait
une co*ille qqpart, j'ai pris la fonction test toute simple qui se
trouve ici (
http://officesystem.access.free.fr/vba/export_recordset.htm )en la
simplifiant, (supression des lignes faisant reference au recordset)
ce qui donne ----------------------------------------------
Function quit_marche_pas()
Dim XL_App As Object
Set XL_App = CreateObject("Excel.Application")
Dim XL_classeur As Object
Dim XL_feuille As Object
With XL_App
.Visible = True
Set XL_classeur = .Workbooks.Open("D:Mes Documentsmodeles
export.xls")
Set XL_feuille = XL_classeur.Sheets("style texte")

.ActiveWorkbook.Save
.ActiveWorkbook.Close
.Quit
End With
Set XL_App = Nothing
Set XL_classeur = Nothing
Set XL_feuille = Nothing
End Function
------------------------------------------------------
et bien a l'issue de l'execution je vous le donne en mille, le
process EXCEL.EXE est toujours la.
ça donne quoi chez vous ?
ça sentirait pas un peu le * bug * ? ....








Avatar
Gafish
camille wrote:
Ton experience est trés interessante, mais... tu remarqueras que dans
l'exp que je viens de donner, il n'y a aucune procédure tarabiscotée
de mise en forme ou autre... et le process est toujours la a la fin
de l'execution (correcte) de celle ci
tu pourrais tester ma fonction exemple et vérifier l'existence ou non
du process par Ctrl Alt Suppr, pour voir ?

J'ai été confronté au même problème et j'ai un code qui fonctionne, essaie

peut etre :

Private Sub Commande1_Click()
Dim objXL As Object
Dim strWhat As String, boolXL As Boolean

If fIsAppRunning("Excel") Then
Set objXL = GetObject(, "Excel.Application")
boolXL = False
Else
Set objXL = CreateObject("Excel.Application")
boolXL = True
End If

objXL.Workbooks.Open ("C:mes documentsTutuTestAuto.xls")
objXL.Range("F2").Select
objXL.ActiveCell.Value = "hello to world"
objXL.ActiveWorkbook.Close savechanges:=True

If boolXL Then objXL.Application.Quit

Set objXL = Nothing

End Sub


qui utilise la fonction fIsAppRunning que tu trouveras ici :
http://www.mvps.org/accessfr/apis/api0007.htm

Arnaud
--
Charte du forum : http://users.skynet.be/mpfa/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
quand j'essaie de tester ta fonction j'ai direct un erreur "sub ou fonction
non définie" sur fIsAppRunning
il me manque une référence,... une api ?
merci

Gafish wrote:
camille wrote:
Ton experience est trés interessante, mais... tu remarqueras que dans
l'exp que je viens de donner, il n'y a aucune procédure tarabiscotée
de mise en forme ou autre... et le process est toujours la a la fin
de l'execution (correcte) de celle ci
tu pourrais tester ma fonction exemple et vérifier l'existence ou non
du process par Ctrl Alt Suppr, pour voir ?

J'ai été confronté au même problème et j'ai un code qui fonctionne,

essaie peut etre :

Private Sub Commande1_Click()
Dim objXL As Object
Dim strWhat As String, boolXL As Boolean

If fIsAppRunning("Excel") Then
Set objXL = GetObject(, "Excel.Application")
boolXL = False
Else
Set objXL = CreateObject("Excel.Application")
boolXL = True
End If

objXL.Workbooks.Open ("C:mes documentsTutuTestAuto.xls")
objXL.Range("F2").Select
objXL.ActiveCell.Value = "hello to world"
objXL.ActiveWorkbook.Close savechanges:=True

If boolXL Then objXL.Application.Quit

Set objXL = Nothing

End Sub


qui utilise la fonction fIsAppRunning que tu trouveras ici :
http://www.mvps.org/accessfr/apis/api0007.htm

Arnaud



Avatar
Gafish
camille wrote:
quand j'essaie de tester ta fonction j'ai direct un erreur "sub ou
fonction non définie" sur fIsAppRunning
il me manque une référence,... une api ?



Non, il te manque la fonction fIsAppRunning, il fallait lire jusqu'au bout
:)) :

qui utilise la fonction fIsAppRunning que tu trouveras ici :
http://www.mvps.org/accessfr/apis/api0007.htm



Tu la mets dans un module de ta base et ca roule :)

Arnaud
--
Charte du forum : http://users.skynet.be/mpfa/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr


Avatar
oui excuses moi... depuis j'ai copié la fonction et je fais des tests...
assez peu concluants... :-(
Gafish wrote:
camille wrote:
quand j'essaie de tester ta fonction j'ai direct un erreur "sub ou
fonction non définie" sur fIsAppRunning
il me manque une référence,... une api ?



Non, il te manque la fonction fIsAppRunning, il fallait lire jusqu'au
bout :)) :

qui utilise la fonction fIsAppRunning que tu trouveras ici :
http://www.mvps.org/accessfr/apis/api0007.htm



Tu la mets dans un module de ta base et ca roule :)

Arnaud




1 2