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 :

Excel depuis Access : problème de performance


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 154
    Points : 76
    Points
    76
    Par défaut Excel depuis Access : problème de performance
    bonjour
    j'ai une fonction VBA ACCESS qui ouvre un classeur excel pour exécuter une
    macro.
    Le code pour ouvrir le classeur excel est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Dim appExcel As Object
        Set appExcel = CreateObject("Excel.Application")
        appExcel.Visible = True
        With appExcel
            .Workbooks.Open (Chemin_fichiers_base & "Mef BDC 2010.xls")
            .Run ("Module1.mef_bdc")
        End With
        appExcel.Quit
        Set appExcel = Nothing
    Si je mets appExcel.Visible = True , aucun problème, excel s'ouvre et ma macro tourne très rapidement.

    Mais si je mets appExcel.Visible = False , Excel ne s'ouvre pas, ce qui est normal, la macro s'exécute mais trèèès lentement.
    (30 min pour générer un fichier au lieu de qq secondes)

    Voyez vous un moyen de remédier à cela ?

    merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 324
    Points : 470
    Points
    470
    Par défaut
    Je ne sais pas ce qu'il y a exactement en plus dans ton code mais essaie ceci en ajoutant la référence "Microsoft Excel X.0 Object Library" (Outils -> Références):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Dim appExcel As Excel.Application, classeur as Excel.Workbook
        Set appExcel = CreateObject("Excel.Application")
        set classeur= appExcel.Workbooks.Open(Chemin_fichiers_base & "Mef BDC 2010.xls")
     
        classeur.Close False
        appExcel.Quit
        Set classeur= Nothing
        Set appExcel = Nothing
    C'est plus propre comme ça...

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 640
    Points : 34 350
    Points
    34 350
    Par défaut
    salut,
    cette solution a-t-elle porter ses fruits ?

    autre approche, laisse le Visible sur True, mais placer en amont et en aval un ScreenUpdating me parait etre une possibilite.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 154
    Points : 76
    Points
    76
    Par défaut
    Bonjour,
    çà fait pareil avec la solution proposée, toujours aussi lent...
    mais rapide si je mets appexcel.visible = true ...

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 640
    Points : 34 350
    Points
    34 350
    Par défaut
    et la fonction en question, elle fait quoi dans ton fichier ?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 154
    Points : 76
    Points
    76
    Par défaut
    C'est une macro assez grosse qui met en forme des bons de commande à partir de fichiers de données "brutes" (aussi en excel)
    mais je ne peux pas poster le code ..

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 640
    Points : 34 350
    Points
    34 350
    Par défaut
    Ok,
    on va pas pouvoir faire trop de propositions

    et le mode avec visible a true ne te convient pas ?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 154
    Points : 76
    Points
    76
    Par défaut
    disons que pour l'instant je le laisse comme çà... Merci pour votre aide en tout cas.

  9. #9
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Bonjour,

    Ca s'execute lentement peut-être parce que l'application Excel n'a pas "la main" quand elle s'ouvre avec Visible = false.

    Je ne sais pas si c'est possible même en donnant des ordres aux processus (dans ce cas le processus Excel)

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 154
    Points : 76
    Points
    76
    Par défaut
    c'est une bonne piste, mais qu'entends tu exactement par "n'a pas la main" ?
    quand je regarde la ram allouée au processus EXCEL.EXE , c'est le même niveau que je sois en mode visible ou caché ...

  11. #11
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Tout à fait, le processus est chargé en mémoire.
    Avoir la main signifie être actif pour executer quelquechose.

    Par exemple Access execute un programme il ouvre Excel (avec visible = true), Pour que l'application Excel s'affiche elle "prends la main" c'est a dire que Access arrête l'execution en cours pour laisser Excel s'afficher (c'est le processus excel qui se charge de son affichage - Au sens tres large du terme -)

    Par définition, tous les processus ouvert s'execute en même temps => Cela fait appel à l'ordonancement des systèmes d'exploitation. Mais dans certains cas les processus peuvent se mettre en attente d'une ressource ce qui a pour effet que l'on a l'impression qu'ils sont comme bloqués. Après il y a différents niveaux de blocages et si le processus est très bloqué par exemple il passe en "Le programme ne réponds plus".

    Du coup il est possible que l'ordonancement ne soit pas correcte (allocation faible du processeur à un processus => lenteur d'execution - dans notre cas Excel) ou attente de ressource - le processus excel atend une ressource et n'execute pas le code tant qu'il ne la possède pas.

    Sur les applications Offices il existe un évènement Activate qui active l'application et les sous éléments d'application, peut être est ce cet évènement non déclenché ou déclenché plus tard qui ralenti l'éxécution.

    Je pense a ca parce que cet évènement se déclenche quand une application est visible (visible = true) mais probablement pas quand l'application est invisible.

    Je ne sais absolument pas si c'est la solution ou la cause de ton problème mais c'est une explication plausible.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/09/2012, 17h35
  2. Réponses: 2
    Dernier message: 07/12/2005, 12h05
  3. comment fermer un fichier Excel depuis Access?
    Par audrey_desgres dans le forum Access
    Réponses: 14
    Dernier message: 21/06/2005, 12h43
  4. Ouvrir un fichier excel depuis access
    Par ptitegrenouille dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 03/05/2005, 11h47
  5. imprimer feuille excel depuis access
    Par Jean Bonnisme dans le forum Access
    Réponses: 3
    Dernier message: 18/11/2004, 08h46

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