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 :

Macros en tache de fond


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Iloon
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 70
    Par défaut Macros en tache de fond
    Bonjour à tous,
    Je viens vous demander un conseil car les exécutions de mes macros sont assez longues.
    En effet, pour pouvoir mieux les comprendre et les voir s'exécuter, j'ai toujours écrit mes codes comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Workbooks("Comparaison12_6.xls").Activate
    Workbooks("Comparaison12_6.xls").Sheets(1).Cells(i + 1, 1).Select
    Selection.Copy
    Workbooks("Comparaison126_8.xls").Activate
    Workbooks("Comparaison126_8.xls").Sheets(1).Cells(k + 1, 1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False
    C'était une solution de facilité car j'avais besoin d'exécuter mon code rapidement même si cela prenait plus de temps à l'éxécution et je n'avais pas le temps de trouver un code qui s'exécute plus rapidement.
    Ce que je viens vous demander, c'est si vous connaissez une solution permettant au code, juste en ajoutant quelques lignes et sans changer tout le code, de s'exécuter en tache de fond, sans que les fenetres s'ouvrent réellement et donc sans que l'on puisse voir quoi que ce soit à part le petit sablier nous demandant d'attendre..

    Je crois que j'en demande beaucoup mais vous faites toujours des miracles donc je tente le coup !

    Merci à tous par avance

    Iloon

  2. #2
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    un peu comme ça


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Workbooks("Comparaison12_6.xls").Sheets(1).Cells(i + 1, 1)..Copy
     
    Workbooks("Comparaison126_8.xls").Sheets(1).Cells(k + 1, 1)..PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

  3. #3
    Membre confirmé Avatar de Iloon
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 70
    Par défaut
    bonjour, merci de ta réponse mais en fait cela reviendrait à modifier tout mon code et il y a des centaines de lignes...

    La solution miracle serait de placer une ligne en début de code lui disant de s'exécuter dans son pti coin sans s'afficher... :s

  4. #4
    Expert confirmé
    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
    Par défaut
    Bonjour,

    En désactivant l'affichage, ça ira BEAUCOUP plus vite

    vois du côté de la propriété screenupdating dans l'aide

    cordialement,

    Didier

  5. #5
    Membre confirmé Avatar de Iloon
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 70
    Par défaut
    AH ! Merci beaucoup, ça fonctionne impec' !

    Voilà la preuve que les miracles existent !

    Merci encore à tous, bonne continuation

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut à tous
    mayekeul
    Je crois que ton code comporte une erreur (..)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Application.screenupdating=false
    ....
    Workbooks("Comparaison12_6.xls").Sheets(1).Cells(i + 1, 1).Copy
    Workbooks("Comparaison126_8.xls").Sheets(1).Cells(k + 1, 1).PasteSpecial Paste:=xlPasteValues
    .....
    Application.screenupdatin=true
    Malheureusement, on ne peut pas donner un code qui accélère en ne touchant pas au code lui-même, mais
    tu peux déjà bloquer le screenupdating et après, ce n'est que de la suppression des "Select...Selection." et les lignes activate.

    Une meilleure solution, c'est de prendre le temps au départ d'optimiser son code, ce temps étant toujours remboursé après

    Ne connaissant que le code donné, je ne peux proposer une boucle pour les Classeurs, ce qui me semblerais permettre de réduire les lignes de code répétitives, permettant un code de traitement plus court et plus facilement modifiable.

    Excel n'étant pas multi-tâches, il ne peut exécuter qu'une tâche à la fois et donc ne peut pas faire tourner une macro en te laissant la main, malgrè tout ce qui semble.
    A+

  7. #7
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    mayekeul
    Je crois que ton code comporte une erreur (..)
    oui, je me suis pas relu
    aie aime sorri

    Excel n'étant pas multi-tâches, il ne peut exécuter qu'une tâche à la fois et donc ne peut pas faire tourner une macro en te laissant la main, malgrè tout ce qui semble.
    c'est vrai mais il y a moyen de simuler avec une "bidouille"

  8. #8
    Membre confirmé Avatar de Iloon
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 70
    Par défaut
    Je vous remercie pour vos réponses, c'est vrai que je n'ai pas pris le temps d'optimiser mon code dès le début, mais mon patron voulait des résultats très rapidement, et me considérait comme non productive tant qu'il voyait pas de choses concrètes, alors, je les lui ai données !

    Le fait de désactiver l'affichage me fait gagner beaucoup de temps, ça va me suffir pour mon projet, je n'ai pas besoin qu'il s'exécute en un temps record.

    Je vous remercie donc beaucoup pour tout, à tous !

    Iloon.

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

Discussions similaires

  1. [XL-2010] Macro en tache de fond
    Par boudoula dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/12/2012, 14h45
  2. Réponses: 3
    Dernier message: 07/06/2005, 14h44
  3. [application tache de fond] lancer une application
    Par jean-jacques varvenne dans le forum Général Python
    Réponses: 5
    Dernier message: 25/03/2005, 11h13
  4. executer une page en tache de fond
    Par Invité(e) dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/01/2005, 16h23
  5. [Question] serveur en tache de fond
    Par Nicaisse dans le forum Réseau
    Réponses: 11
    Dernier message: 14/08/2003, 10h47

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