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

VBA Access Discussion :

Gestion des objets Excel.Application dans Access


Sujet :

VBA Access

  1. #1
    Membre actif Avatar de spaiku
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 209
    Points : 293
    Points
    293
    Par défaut Gestion des objets Excel.Application dans Access
    Bonjour,

    après avoir longuement erré sur les forums et fait de multiples tests, j'ai trouvé une solution au problème suivant : j'importe un fichier Excel dans Access (entre autres avec un objet Excel.Application nommé xlApp). Après les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xlApp.Quit
    set xlApp = Nothing
    un processus Excel demeurait dans la liste des gestionnaire de tâches, ce qui occasionnait des plantages plus loin dans le code.

    J'ai constaté que le problème venait de la manière dont était instancié mon objet Application :le problème a été résolu en remplaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim xlApp As New Excel.Application
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim xlApp As Object
    Set xlApp = CreateObject("Excel.Application")
    Je pensais que les deux étaient équivalents. Quelqu'un saurait-il me dire pourquoi il n'en est rien ?

    Merci d'avance.

  2. #2
    Membre actif Avatar de spaiku
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 209
    Points : 293
    Points
    293
    Par défaut
    Au temps pour moi, grosse bêtise : les deux modes d'instanciation ne créent pas de différences sur la gestion des processus.

    M'étant aperçu de cela, j'ai creusé la question, et j'ai constaté que le processus Excel restait actif à partir du moment où j'utilisais un transferSpreadSheet avant de fermer le WorkBook.

    En clair, la séquence :
    1) Ouverture du classeur
    2) TransferSpreadSheet
    3) Fermeture du classeur
    4) Libération des objets
    laisse un processus Excel actif.

    La séquence :
    1) Ouverture du classeur
    2) Fermeture du classeur
    3) TransferSpreadSheet
    4) Libération des objets
    ferme le processus.

    J'espère que cette constatation permettra d'aider d'autres utilisateurs. Quant à moi, il me reste une question : pourquoi ces deux séquences aboutissent-elles à des résultats différents ?

    Si quelqu'un peut éclairer ma lanterne, je lui offrirai... mon éternelle gratitude.

  3. #3
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    pourquoi ouvrir Excel pour faire un transferspreadsheet ?
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Salut,

    Je suis d'accord avec cafeine , ça ne sert à rien d'ouvrir le classeur.

    Par contre, je voudrais supprimer une feuille, quelqu'un aurait une idée?

    Merci

  5. #5
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par cristof56 Voir le message
    Salut,

    Je suis d'accord avec cafeine , ça ne sert à rien d'ouvrir le classeur.

    Par contre, je voudrais supprimer une feuille, quelqu'un aurait une idée?

    Merci
    Tu devrais créer un autre post je pense...
    ou essayer la methode "delete"

  6. #6
    Membre actif Avatar de spaiku
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 209
    Points : 293
    Points
    293
    Par défaut
    Bonjour à tous,

    dans ma fonction, je commence par ouvrir le fichier Excel pour y réaliser un certain nombre de traitements : vérification et modification des informations contenues dans le fichier. Un fois le fichier vérifié, on l'importe.

    On pourrait importer le fichier tel quel et faire toutes les vérifs sur la table importée, mais le but est de conserver les modifications dans le fichier Excel. Je pourrais aussi importer le fichier, faire les modifs et le réexporter ensuite.

    Quoi qu'il en soit, mon problème est résolu, dans la mesure où j'arrive à fermer proprement le processus, mais j'attends un peu pour taguer le sujet de voir si quelqu'un a une idée sur cette histoire de transferspreadsheet et ses conséquences sur les processus.

    Au fait, Cafeine, merci infiniment pour tes diverses contributions sur developpez.com. Je suis un fan

  7. #7
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 222
    Points
    222
    Par défaut
    Salut,
    Lorsque tu exécutes l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim xlApp As New Excel.Application
    tu as dû au paravant créer un lien avec la bibliothèque D'Excel au VBA Access par les menus de l'interface VBA
    • "Outils"
    • "Références"
    Se faisant tu as lié les deux "VBA" entre eux.

    Lorque que tu fais l'intruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim xlApp As Object
    Set xlApp = CreateObject("Excel.Application")
    tu va cherche dans le registre de Windows la bibliothèque d'Excel que tu lies avec le programme que tu exécutes . Lorque tu sors de ce programme, ce lien disparait . Ce n'est pas le cas dans la première écritures ==> D'où les petites dirfférences de comportement.
    La deuxiéme différence c'est que CreateObject crée une nouvelle occurence d'excel , alors que "dim New" exécute l'équivalent de la méthode GetObject qui permet d'obtenir un lien avec l'application appelé si elle est déjà chargé en mémoire; si ce n'est pas le cas "dim New" exécute l 'équivallent de CreateObject.
    Quand tu exécutes directement CreateObject, tu forces l'ouverture d'une nouvelle occurence de l'objet Excel.

    J'espère que mon explication te satisfera.

    De toutes façons, l'utilisation de CreateObject Et Getobject, facilite grandement l'installation de son application sur un autre poste client.

  8. #8
    Membre actif Avatar de spaiku
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 209
    Points : 293
    Points
    293
    Par défaut
    Ok, c'est très clair. Merci pour ces explications.

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

Discussions similaires

  1. Gestion des objets ACCESS
    Par tiyolx dans le forum Modélisation
    Réponses: 5
    Dernier message: 24/05/2008, 23h57
  2. Pb de gestion des objets Excel
    Par tedparker dans le forum Access
    Réponses: 2
    Dernier message: 11/09/2006, 17h13
  3. [FB] Gestion des erreurs et application francophone
    Par Benjamin GAGNEUX dans le forum Installation
    Réponses: 10
    Dernier message: 20/05/2006, 14h54
  4. Réponses: 1
    Dernier message: 11/05/2006, 20h07
  5. Gestion des droits d'accès sur Access 2003
    Par cotmar dans le forum Access
    Réponses: 2
    Dernier message: 04/05/2006, 16h41

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