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

VB 6 et antérieur Discussion :

Comment fermer proprement une instance d'Excel ouvert avec VB ?


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Mai 2008
    Messages : 137
    Points : 80
    Points
    80
    Par défaut Comment fermer proprement une instance d'Excel ouvert avec VB ?
    Bonjour,
    Dans mon pgr VB j'ouvre un fichier Excel de la maniere suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public objExcel As Excel.Application
    Public objDocumentE As Excel.Workbook
    Public FeuilleExcel As Excel.Worksheet 
     
    Set objExcel = CreateObject("Excel.Application")
    Set objDocumentE = objExcel(L).Workbooks.Open(monfichierExcel)
    objExcel.DisplayAlerts = wdAlertsNone 
    Set FeuilleExcel = objDocumentE.Sheets(1)
    En controlant dans le "Gestionnaire des taches de Windows" (Ctrl + Alt + Suppr) s'ajoute alors un processus 'EXCEL' (faisant 2400k).

    Apres avoir utilise le fichier, n'en n'ayant plus l'utilite, je le ferme de la maniere suivante (dans la meme fontion ou je l'ai ouvert):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    objExcel.DisplayAlerts = True 
    objDocumentE.Close True   
    objExcel.Quit  
    Set FeuilleExcel = Nothing
    Set objDocumentE = Nothing
    Set objExcel = Nothing
    Mais la quand je regarde dans le "Gestionnaire des taches de Windows" je constate que le processus est toujours la !!! (il a simplement un peu diminue de taille).
    Est-ce la procedure que j'utilise pour fermer Excel qui n'est pas fonctionnelle ou est-ce normal ?

    En revanche, quand je ferme mon progarmme VB, la procedure Excel disparaît bien !!!! (sans code particulier ???)

    Auriez-vous une explication ?

  2. #2
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Bonjour,
    Un erreur de désinstanciation est typique d'une erreur non gérée dans le code qui empêchera une destruction de l'object en cours.
    Par curiosité, crée un formulaire avec un bouton pour l'instanciation et un bouton pour la désinstanciation sans code intermédiaire
    et tu constateras que l'instance Excel est bien détruite ...

    ... enfin, en supposant que tu corriges déjà l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objDocumentE = objExcel(L).Workbooks.Open(monfichierExcel)
    Dans tous les cas de figure :
    1/ gérer les erreurs directes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if typename(objExcel)<>"Nothing" then ...
    2/ utiliser systématiquement des gestionnaires d'erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    On Error goto errxxxx 'etc.
    Voir tutoriel en rapport

  3. #3
    Membre régulier
    Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Mai 2008
    Messages : 137
    Points : 80
    Points
    80
    Par défaut
    Merci DarkVader pour cette reponse.
    En faite, j'ai cerné ou est l'erreur (mais je ne me l'explique pas).
    Apres avoir ouvert mon fichier excel, je vais chercher le nb de ligne renseignees en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Nbenreg = Range("A65536").End(xlUp).Row
    Puis j'alimente un tableau avec les donnees du fichier en faisant une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i = 1 To Nbenreg
     
    next
    Et a la fin de la boucle, je ferme mon fichier
    Ecrit tel quel, la fermeture du fichier ne marche. En revanche, si je remplace
    Nbenreg = Range("A65536").End(xlUp).Row par Nbenreg = 2 par exemple, alors la ca marche bien !!!
    Evidemment cela ne fait pas ce que je souhaiterai (lire toutes les lignes renseignees) mais la fermeture elle se passe bien. Cela veut donc dire que l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Nbenreg = Range("A65536").End(xlUp).Row
    'bloque' le fichier en utilisation ? comment faire autrement si je veux boucler sur un nombre de ligne non connu a l'avance ?

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A65536").End(xlUp).Row
    est une erreur de conception :
    à quel parent penses-tu que l'object Range est attaché ?

  5. #5
    Membre régulier
    Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Mai 2008
    Messages : 137
    Points : 80
    Points
    80
    Par défaut
    Ok, j'ai change ma boucle et ca marche
    thanks

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment fermer proprement une application avec map
    Par alex8276 dans le forum Android
    Réponses: 4
    Dernier message: 30/04/2015, 16h09
  2. Réponses: 10
    Dernier message: 25/02/2014, 10h21
  3. Réponses: 0
    Dernier message: 10/09/2010, 17h30
  4. Comment fermer proprement une fenetre?
    Par dams95190 dans le forum VBA Access
    Réponses: 13
    Dernier message: 12/10/2007, 13h45
  5. [wxPython][wxFrame]Comment fermer proprement une frame ?
    Par Screameur dans le forum wxPython
    Réponses: 4
    Dernier message: 12/05/2005, 19h49

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