Vba: terminer EXCEL.EXE

Signaler
Messages postés
14
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
30 avril 2007
-
Messages postés
9
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
23 juillet 2009
-
Bonjour à tous,

je suis très embeté par des processus excel qui restent actifs après l'utilisation d'Excel dans un module de Access.
En fait à chaque utilisation dans ma base de données access, d'une fonction excel je crée un processus que je n'arrive pas à tuer. Pourtant à la fin de la fonction je fais: 

        Set xlSheet = Nothing    'Destruction Feuille
       xlBook.Close SaveChanges:=False    'Ferme classeur sans enregistrer chg
       Set xlBook = Nothing    'Destruction Classeur
       xlApp.Quit 'Quit appli XL
       Set xlApp = Nothing    'Destruction application
et même:
      Excel.Application.Quit    'Purger l'application Excel en mémoire

je ne sais plus quoi faire. Mon application n'est pas très propre car je dois à chaque fois supprimer manuellement les processus.
Alors si vous pouvez m'aider, je vous remercie d'avance!

15 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Est tu sur que ce sont la les seules référence que tu fais à Excel, il n'y en aurais pas une cachée quelques part ailleurs

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
14
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
30 avril 2007

En fait, je fais des transfert entre excel et access (importer ou exporter), et dans mes dernières ligne de code pour fermer l'application excel je tape  ce code:
 Set xlSheet = Nothing    'Destruction Feuille
       xlBook.Close SaveChanges:=False    'Ferme classeur sans enregistrer chg
       Set xlBook = Nothing    'Destruction Classeur
       xlApp.Quit 'Quit appli XL
       Set xlApp = Nothing    'Destruction application
et même:
      Excel.Application.Quit    'Purger l'application Excel en mémoire

Mais ça ne marche pas. Alors???
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
As-tu essayé d'unverser tes commandes ?

       xlBook.Close SaveChanges:=False    'Ferme classeur sans enregistrer chg

       xlApp.Quit 'Quit appli XL

       Set xlSheet = Nothing    'Destruction Feuille
       Set xlBook = Nothing    'Destruction Classeur
       Set xlApp = Nothing    'Destruction application

Est-ce que ça aide ?

Autrement, je pense comme jrivet, il y a peut-être 2 instances qui roulent... (?)

MPi
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
IL faudrait que l'on sache comment tu instancies xlApp .
Car peu être que tu passe deux fois a l'endroit ou tu instancie xlApp

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
14
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
30 avril 2007

Voilà un peu comment j'utilise sous access, Excel:


   Dim xlApp As Excel.Application
    Dim xlSheet As Excel.Worksheet
    Dim xlBook As Excel.Workbook

 'Initialisations
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add


    'Ajouter une feuille de calcul
    Set xlSheet = xlBook.Worksheets.Add
     xlSheet.Name = Nom

   'Ensuite je travaille   avec  xlSheet.Cells(i, j)
'si export, je sauvegarde avec xlBook.SaveAs monFichier
  'et pour finir
Set xlSheet = Nothing    'Destruction Feuille
       xlBook.Close SaveChanges:=False    'Ferme classeur sans enregistrer chg
       Set xlBook = Nothing    'Destruction Classeur
       xlApp.Quit 'Quit appli XL
       Set xlApp = Nothing    'Destruction application
et même:
      Excel.Application.Quit    'Purger l'application Excel en mémoire

Et là EXCEL.EXE qui demeure.

merci MPi, j'ai essayé mais ça ne marche pas.

 ça me déprime ça!!!!
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
En mode debug j'ai  le meme problème que toi et si j'enlève la ligne
Excel.Application.Quit   

je n'ai plus de souci. essaie chez toi pour voir?

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
14
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
30 avril 2007

Rien à faire, j'zi toujours le processus EXCEL.EXE dans mon gestionnaire de taches windows.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
 C'est peut-être normal.. (enfin, presque)
Si tu testes et que tu as une erreur dans ton code, avant de fermer l'appli Excel, (et donc l'ayant ouverte auparavent), celle-ci reste.

Bref, moi je ferai ça :

Dim xlApp As NEW Excel.Application
    Dim xlSheet As Excel.Worksheet
    Dim xlBook As Excel.Workbook

 'Initialisations
   <strike>Set xlApp = CreateObject("Excel.Application")
</strike>    Set xlBook = xlApp.Workbooks.Add
    'Ajouter une feuille de calcul
    <strike>Set xlSheet = xlBook.Worksheets.Add</strike>
     ' pas besoin de rejouter des feuilles, y'en a déjà trois. Suffit d'en renommer une.
      Set xlSheet = "Feuil1"
      xlSheet.Name = Nom

   'Ensuite je travaille   avec  xlSheet.Cells(i, j)
'si export, je sauvegarde avec xlBook.SaveAs monFichier
  'et pour finir

<strike>Set xlSheet = Nothing    'Destruction Feuille
</strike>       xlBook.Close SaveChanges:=False
       xlApp.Quit ' déplacé d'une ligne
      Set xlSheet = Nothing 
      Set xlBook = Nothing
       Set xlApp = Nothing 

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Effectivement, comme dit Mortalino, si tu fais des tests et que ça ne se rend pas à ta fin de procédure, Excel restera ouvert.

Tu pourrais donc mettre un ou des On Error Goto Erreur
Et dans cette gestion d'erreur, tu fermes l'application de la même façon dont tu procèdes déjà. Tu aurais donc 2 possibilités de fermeture: une normale selon le code et une s'il y a erreur.

MPi
Messages postés
14
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
30 avril 2007

Salut à vous,

désolé pour mon absence j'ai pris mon wk.

Merci pour vos conseils, je pense que ça devrais marcher maintenant.
Je teste tout ça et je vous tiens au courant.
a+
Messages postés
14
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
30 avril 2007

J'ai réussi à ne plus avoir EXEL.EXE en fin d'utilisation...Tout simplement en suivant vos conseils.
Merci encore.

Une petite chose:
        Set xlsheet = "Feuil1"
ça ne marche pas, je crois qu'il faudrait utiliser une fonction pour selectionner la feuille1 et non faire= ("..." vue comme une chaine de caractère sinon).
Je crois que ce serai bien de savoir comment... si quelqu'un le sait????
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Essaie comme ceci
Set xlSheet = Sheets("Feuil1")

MPi
Messages postés
14
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
30 avril 2007

C'est parfait.


Merci
Messages postés
14
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
30 avril 2007

En fait  Set xlSheet = "Feuil1" utilisé comme Mortalino me la conseillé me donne une erreur:
Le serveur distant n'existe pas ou n'est pas disponible

Je pense que c'est l'instanciation qui ne doit pas être complète.      
Messages postés
9
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
23 juillet 2009

Merci les gars ca m'a servi aussi!


En fait, il restait une instance de EXCEL.exe en mémoire tant que le
prog tournait: j'imagine que l'appel à xlApp.Apllication.Quit laissait un
pointeur quelque part vers xlApp, et le fait de le passer à xlApp = Nothing ne faisait rien... Normal, tant qu'il y a une instance d'une zone mémoire utilisée quelque part, VB la laisse tranquille.

Du coup ça marche bien, EXEL.exe disparait bien de la mémoire (gestionnaire de tâches), pendant l'exécution du prog. Ainsi on peut le lancer et arrêter excel autant de fois qu'on veut dans le même prog sans encombrer la mémoire!
Merci encore,

go gO GO !!