IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Lors de la fermeture d'Excel le processus reste actif [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 39
    Points : 20
    Points
    20
    Par défaut Lors de la fermeture d'Excel le processus reste actif
    Bonjour à tous,

    J'ai écrit un programme en VBA sous Access (2007) pour ouvrir et fermer des document en Excel (2007), je constate que quand je ferme le fichier en le sauvegardant soir avec l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xlBook.Save
    xlApp.Quit
    ou bien avec l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xlBook.Close True
    xlApp.Quit
    alors il enregistre bien, se ferme MAIS il reste toujours un processus Excel sur le gestionnaire de tâche.

    En revanche, lorsque je ferme le fichier en Excel (2007) sans l'enregistrer avec l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xlBook.Saved = True
    xlApp.Quit
    alors il n'y a pas de processus "résiduel".

    Comment faire pour avoir la même chose au niveau de la fermeture avec enregistrement (pour qu'il n'y ait plus de processus résiduel).

    Merci d'avance !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Points : 14 363
    Points
    14 363
    Par défaut
    Bonjour,

    Qu'est-ce qui se passe si tu mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xlBook.Save
    xlBook.Saved = True
    xlApp.Quit

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    J'ai déjà essayé.
    Il me mets la même chose que si je n'avais pas mis la deuxième des 3 lignes !

  4. #4
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    vérification de base :

    si tu mets un point d'arrêt avant ton code final et que tu regardes le gestionnaire, tu as combien d'instances Excel ouvertes ?

    cordialement,

    Didier

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Dans les deux cas : fermeture avec enregistrement ou sans enregistrer,
    il y a un processus Excel créé
    et dans le cas de "avec enregistrement", il n'est jamais "tué" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    xlBook.Save
    xlApp.Quit
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
    dans le cas des sans enregistrement, il est "tué" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    xlBook.Saved = True
    xlApp.Quit
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
    !!

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Points : 14 363
    Points
    14 363
    Par défaut
    Peut-être, ajoute un :

    avant

    pour lui laisser le temps d'enregistrer.

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Je n'ai pas la propriété DoEvents sur xlApp !

    J'avais essayé une avant
    ...

    Sinon, au départ, j'ai fait ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Dim xlApp As Excel.Application
        Dim xlSheet As Excel.Worksheet
        Dim xlBook As Excel.Workbook
     
        'J'initialise mes variables
        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Open("D:\projet.xlsm")
        Set xlSheet = xlBook.Worksheets("root")

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Points : 14 363
    Points
    14 363
    Par défaut
    Est-ce que tu peux créer une macro dans Excel avec la fonction :
    comme ligne de code. Tu appellerais cette macro avant le Quit.

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    J'ai fait une fonction avec cette instruction et je l'ai appelé juste avant le quit, mais ça ne marche pas (je sais pas comment appeler une macro pendant mon code mais ça doit être la même chose)

    Un élément qui est intéressant, c'est que si j'ouvre le fichier Excel (de manière classique en double cliquant dessus et en le refermant), le processus est "tué"
    Par contre, purement par programme programme, il me créé beaucoup de processus Excel !!

  10. #10
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Points : 14 363
    Points
    14 363
    Par défaut
    A tout hasard, avant le "Quit" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Ça aurait pu ! mais non !
    Si je mets avant, ça bug à l'instruction quit vu que l'objet n'existe plus,
    Si je zappe le quit, ça revient au même !!

    N'y aurait-il pas un moyen de supprimer les processus Excel par programme ?!

    Merci encore !

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Points : 14 363
    Points
    14 363
    Par défaut
    N'y aurait-il pas un moyen de supprimer les processus Excel par programme ?!
    Il me semble que c'est possible, mais c'est trois crans au-dessus de mon niveau
    Si c'est de créer de multiples instances d'Excel, pourquoi vouloir la fermer et pourquoi ne pas utiliser "GetObject" pour se réapproprier l'instance ouverte ?

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Je pourrais, mais je ne sais pas quel objet je récupère, il se peut que ça soit un fichier excel ouvert autrement...

  14. #14
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Citation Envoyé par Daniel.C Voir le message
    Si c'est de créer de multiples instances d'Excel, pourquoi vouloir la fermer
    Non, Il vaut mieux toujours faire le ménage dans ce genre de choses, sauf volonté contraire délibérée en pleine connaissance et maîtrise de choses ?

    @ courriervirtuel

    Pour ton instance Excel, tu travailles en instance visible ou cachée ?

    Sinon, il y a de très forte chance qu'il y ait une référence à un objet qui n'est pas supprimée et ton appli reste en l'air...

    voir si tu as bien libéré toutes tes variables objet et si tu ne crées pas de références implicites ( cqvd : donc il faut écrire ton code de façon explicite)

    cordialement,

    Didier

  15. #15
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Merci pour la réponse,

    Je travail en instance cachée...
    J'ai libéré tous les objets en relation avec l'ouverture de mon fichier Excel.

    En plus, ça marche avec mais pas avec et pas non plus avec qui sont les deux possible pour quitter avec enregistrement !

    J'y comprends rien !

  16. #16
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Points : 14 363
    Points
    14 363
    Par défaut
    Non, Il vaut mieux toujours faire le ménage dans ce genre de choses, sauf volonté contraire délibérée en pleine connaissance et maîtrise de choses ?
    Oui , bien sûr, mais à défaut ?

  17. #17
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Citation Envoyé par Daniel.C Voir le message
    Oui , bien sûr, mais à défaut ?
    à défaut, il faut chercher pourquoi, sinon ça te retombera dessus à un moment donné

    Citation Envoyé par courriervirtuel
    J'y comprends rien !
    Bon, j'ai déjà fait à partir d'Excel, Powerpoint ou Word et pas eu de souci, je pense qu'il faut que tu passes en méthode empirique, tu fait un exemple minimaliste avec juste ce qu'il faut (Visible ou non = pas de souci, c'est simplement que si tu as une instance Excel visible à côté, on peut se mélanger dans les pointages), et tu testes, si pas de souci, c'est qu'il n'y a pas de phénomène, mais que c'est dans le reste de ton code que tu invoques un truc qui reste en suspend...

    Le processus sinon disparaît au déchargement de la variable objet (pointage).
    Voici un code exemple OK (sous Word, mais bon)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Option Explicit
    Public ApExc As New Excel.Application
    Public wkbMonBook As Workbook
     
    Sub Demarreur()
    Dim gvStrChemS0 As String
    Dim gvStrChemS1 As String
     
    gvStrChemS0 = "D:\"
    gvStrChemS1 = "+ Codes Postaux DGGGGGGGGGGG.xlsx"
    Set wkbMonBook = ApExc.Workbooks.Open(gvStrChemS0 & gvStrChemS1)
    ApExc.Visible = True 'False ne change pas la donne
    End Sub
     
    Sub Liquidateur()
     
    wkbMonBook.Close savechanges:=True  'OK pour False aussi
    Set wkbMonBook = Nothing
    ApExc.Quit
    Set ApExc = Nothing
    End Sub
    à partir d'un truc du genre qui te montre que ce n'est pas ce niveau le fautif, tu rajoutes ce que tu soupçonnes en premier...etc..


    cordialement,

    Didier

  18. #18
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    En y allant vraiment pas à pas, j'ai remarqué que dès que je rajoute une instruction qui modifie une cellule, le processus n'est pas "tué", même si l'instruction de modification est de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlSheet.Cells(1, 1) = 1
    !!

    En résumé, sans aucune modification, si je ferme avec enregistrement (pas d'intérêt, mais bon), le processus est "tué",
    Si, j'utilise une instruction telle que celle que j'ai mise en haut, le processus n'est pas "tué" !!

  19. #19
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Points : 14 363
    Points
    14 363
    Par défaut
    @Ormonth :

    à défaut, il faut chercher pourquoi, sinon ça te retombera dessus à un moment donné
    Parfois, c'est un bug ou c'est "by design" et il faut chercher un contournement.

  20. #20
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Citation Envoyé par Daniel.C Voir le message
    @Ormonth :
    Parfois, c'est un bug
    Oui, mais sur des pratiques courantes, ils sont souvent référencés (utilité des forums ) même si pas toujours faciles à retrouver.

    Sinon, on peut monter un échelon et publier 'un nouveau bug"...

    Je n'ai pas l'impression qu'on soit dans ce cas, de toutes façons, il faut avant tout en identifier la cause.

    Si identifié, le contournement est OK, sinon c'est reculer pour mieux sauter..

    cordialement,

    Didier

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Archivage et mise a zero lors de la fermeture d'excel
    Par jojo6691 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/06/2012, 18h08
  2. [XL-2007] Processus Excel.exe qui reste actif
    Par Neowile dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 16/02/2012, 16h50
  3. Processus Excel.exe qui reste actif
    Par siuol dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 18/04/2011, 20h26
  4. [AC-2000] Création fichier Excel et processus toujours actif
    Par moustika dans le forum VBA Access
    Réponses: 6
    Dernier message: 22/02/2011, 05h18
  5. Pb lors de la fermeture d'une feuille excel
    Par justin92330 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/07/2008, 13h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo