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 :

Accélerer un compteur Excel/VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    Bonjour,

    J'ai programmé en VBA un compteur qui se décompose sur 3 cellules:

    0000 0000 0000

    H1 H2 H3

    Pour chaque occurrence de ce compteur, je fais des tests dans d'autres cellules, et pour chacun de ces tests, j'affiche V ou F dans d'autres cellules en fonction du résultat.

    Pb: Le compteur met trop de temps, imaginez le temps qu'il me faudrait pour aller à 9999 9999 9999!

    Comment faire pour l'accélérer. L'idéal serait qu'il puisse atteindre la valeur finale (9999 9999 9999) dans la journée. Je pense que c'est de la vitesse du proc que cela dépend, mais plutôt du temps d'éxécution d'Excel!

    Est-ce qu'il faut que je passe à un autre langage? Le truc c'est que je voudrais conserver mon tableau Excel!

    Merci de votre aide

    P.S: Je débute en VBA, si vous pouviez me donner des détails dans votre réponse, je vous remercie!

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    si tu pars ainsi ce n'est pas simplifiable
    il y a 10^12 combinaisons
    ce qui est assez lourd

    deux solutions
    faire monter tes cellules dans un array et travailler sur cet array ce qui sera plus rapide en masquant excel

    mais tu dois pouvoir trouver mieux
    il y a certainement des solutions pour trouver les valeurs correctes par programmation linéaire par exemple

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    Citation Envoyé par random
    si tu pars ainsi ce n'est pas simplifiable
    il y a 10^12 combinaisons
    ce qui est assez lourd
    Merci de ta réponse

    Citation Envoyé par random
    deux solutions
    faire monter tes cellules dans un array et travailler sur cet array ce qui sera plus rapide en masquant excel
    Je suis pas un pro du VBA, comment tu fais pour monter des cellules dans un array?

    Citation Envoyé par random
    mais tu dois pouvoir trouver mieux
    il y a certainement des solutions pour trouver les valeurs correctes par programmation linéaire par exemple
    Tu veux dire importer un objet ActiveX ou autre qui aurait été programmé séparémment?

  4. #4
    Membre averti
    Profil pro
    Consultant finance
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Par défaut re
    Salut Pedro,
    Effectivement la vitesse de l'exécution de ta macro va dépendre de la mémoire de ta machine RAM.
    Je suppose que tu utilises une structure répétitive comme les boucles... Alors tu comprends qu'en changeant simplement d'environnement le problème reste le même car, il s'agit de la machine et non des spécificités d'un langage sur un autre.

    Ciao

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    Citation Envoyé par Blunet
    Salut Pedro,
    Effectivement la vitesse de l'exécution de ta macro va dépendre de la mémoire de ta machine RAM.
    Je suppose que tu utilises une structure répétitive comme les boucles... Alors tu comprends qu'en changeant simplement d'environnement le problème reste le même car, il s'agit de la machine et non des spécificités d'un langage sur un autre.

    Ciao
    En fait j'ai testé le truc sur un bi proc et ça fait la même chose; mais c'est vrai que la machine avait que 512 de RAM. Tu penses que sur une machine qui a 1Go ça peut aller plus vite?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 32
    Par défaut
    Bonjour,

    Je ne sais pas si tu as besoin de voir le chrono évoluer à l'écran ou non si tel n'est pas le cas je te conseille de placer ce code au début de ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.ScreenUpdating = False
    puis à la fin de ta macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.ScreenUpdating = True
    Pour te donner un exemple cette macro met environ 1 seconde contre 10 secondes si je ne bloque pas le rafraichissement de l'écran.

    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
     
    Sub test()
     
     
    Application.ScreenUpdating = False
     
     
    TimeDebut = Time
     
    For l = 1 To 30000
         Range("A1").Value = l
    Next l
     
    TimeFin = Time
     
    [D1] = TimeFin - TimeDebut
     
    Application.ScreenUpdating = True
     
    End Sub
    Geoffray

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    Citation Envoyé par Geoffray
    Bonjour,

    Je ne sais pas si tu as besoin de voir le chrono évoluer à l'écran ou non si tel n'est pas le cas je te conseille de placer ce code au début de ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.ScreenUpdating = False
    puis à la fin de ta macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.ScreenUpdating = True
    Pour te donner un exemple cette macro met environ 1 seconde contre 10 secondes si je ne bloque pas le rafraichissement de l'écran.

    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
     
    Sub test()
     
     
    Application.ScreenUpdating = False
     
     
    TimeDebut = Time
     
    For l = 1 To 30000
         Range("A1").Value = l
    Next l
     
    TimeFin = Time
     
    [D1] = TimeFin - TimeDebut
     
    Application.ScreenUpdating = True
     
    End Sub
    Geoffray

    Merci du truc, je vais tester tout de suite!

  8. #8
    Membre éprouvé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Par défaut
    Avec cette solution tu ne verras pas ton compteur s'incrémenter. d'ailleurs, ton écran sera gelé jusqu'à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = True
    .

    Donc sois bien sûr que ton code fonctionne avant de faire ça.

    Juste au cas où... (plantage?)
    Tu peux faire du "pas à pas" dans ton prog en appuyant sur F8 pour chaque ligne de code à éxécuter. Si ton prog plante utilise F8 sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = True
    pour réactiver le rafraichissement de l'écran.

    Bon courage

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    Citation Envoyé par Commodore_Psykopate
    Avec cette solution tu ne verras pas ton compteur s'incrémenter. d'ailleurs, ton écran sera gelé jusqu'à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = True
    .

    Donc sois bien sûr que ton code fonctionne avant de faire ça.

    Juste au cas où... (plantage?)
    Tu peux faire du "pas à pas" dans ton prog en appuyant sur F8 pour chaque ligne de code à éxécuter. Si ton prog plante utilise F8 sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = True
    pour réactiver le rafraichissement de l'écran.

    Bon courage
    Je vous remercie de vos réponses. J'ai lancé mon compteur avec le contrôle du rafraîchissement de l'écran. Je pense avoir gagné un peu, mais c'est quand même toujours lent. Y a pas un autre truc pour vraiment faire en sorte que le compteur aille super vite?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 32
    Par défaut
    Il faudrait plus d'une vie pour compter jusque là.
    Mais c'est vrai que l'on recherche tous la vitesse

    Le gel de l'écran doit malgé tout te faire gagner un temps fou.

    Peut être que ton fichier est confidentiel ? Si ca n'est pas le cas je t'invite à nous le mettre en lien et à nous donner plus de détail sur le résultat escompté. Tu peux éventuellement falsifier les données.
    Ce que j'ai du mal à comprendre c'est pourquoi 3 compteurs au lieu d'un seul. Je suppose que tu dois avoir plus d'une boucle dans ta macro ce qui doit ralentir le calcul.

    Mon pc (P4 3.4 avec 1 giga de ram) met 1 minute pour compter jusqu'à 1 000 000 avec gel de l'écran, soit dans ton cas (99 999 9999 999) 16 667 heures si je sais encore compter !!

    Geoffray

    Ps: j'aimerai pas être à la place de ton pc, il va y laisser un poumon

  11. #11
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Je ne crois pas que le compteur soit le vrai responsable de cette lenteur...
    Ce seraient plutôt, à mon avis, les calculs qu'il effectue à chaque incrémentation.
    Dire "comment accélérer le compteur" n'est dans de telles conditions pas l'expression qui convient.

    Si tu penses que c'est l'affichage du compteur qu'il convient de reconsidérer, ma foi, il te suffit de ne le mettre à jour (l'affichage), que toutes les n occurences.

    Si par contre les lenteurs sont générées par tes calculs à chaque occurence, le fait de ne pas activer l'affichage pendant les calculs est une bonne chose. Si cela ne suffit pas, il peut être essayé d'agiliser tes calculs (encore faudrait-il voir ce qu'ils sont et comment ils sont faits).

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    Citation Envoyé par jmfmarques
    Je ne crois pas que le compteur soit le vrai responsable de cette lenteur...
    Ce seraient plutôt, à mon avis, les calculs qu'il effectue à chaque incrémentation.
    Dire "comment accélérer le compteur" n'est dans de telles conditions pas l'expression qui convient.

    Si tu penses que c'est l'affichage du compteur qu'il convient de reconsidérer, ma foi, il te suffit de ne le mettre à jour (l'affichage), que toutes les n occurences.

    Si par contre les lenteurs sont générées par tes calculs à chaque occurence, le fait de ne pas activer l'affichage pendant les calculs est une bonne chose. Si cela ne suffit pas, il peut être essayé d'agiliser tes calculs (encore faudrait-il voir ce qu'ils sont et comment ils sont faits).
    C'est cool les gars, merci de vos réponses. Effectivement, je ne peux pas mettre en ligne mon tableau, mais je vais quand même vous mettre un truc factice dans la semaine. Etant donné que je fais pleins de calculs, c'est très possible que ce soit ça qui ralentisse tout, n'empêche que sans rafraîchir automatiquement, je divise par 5 le temps, mais j'ai un autre pb, à savoir que je ne conserve plus les valeurs en mémoire; autrement dit, à chaque fois que j'affiche, j'ai perdu les données précédentes. Je sais pas encore où ça vient...

    Je vous mets en ligne un aperçu de mon tableau.

    Merci à tous!

  13. #13
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 818
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 818
    Par défaut
    Tu as tout plein d'astuces pour gagner en rapidité, du style éviter de faire des select sur des cellules, utiliser des variables pour travailler sur les feuilles plutôt que faire des feuil1.activate... feuil2.activate... , travailler sur des tableaux de valeurs initialisé avec une plage de cellules au lieu d'itérer sur toutes les cellules de la plage, utiliser cells plutôt que range...

    Mais bon, ça reste du vba excel, tu vas y passer un certain temps quand même pour aller au bout de ton compteur...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  14. #14
    Membre éprouvé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Par défaut
    le mieux serait de trouver un algo plus rapide...
    => direction forum algo

  15. #15
    Membre averti
    Profil pro
    Consultant finance
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Par défaut
    Salut le fil, juste pour continuer sur les dernière propositions...
    Peut être faut envisager la ré écriture de l'algo dans ce cas utiliser peut être des variables tableaux. L'inconvénient est qu'il te faudra plus d'espace par contre moins de temps...

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 32
    Par défaut
    ...., utiliser cells plutôt que range...
    Je savais pas. Ca accélère vraiment le code ?

  17. #17
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 818
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 818
    Par défaut
    Citation Envoyé par Geoffray
    Je savais pas. Ca accélère vraiment le code ?

    Oui.
    Je ne saurais te dire de combien, j'avais fait le test il y a quelques temps (suite à une remarque de Bidou dans un autre post), et on gagnait un peu.
    Ca s'apprécie surtout sur les boucles nombreuses, avec l'itération sur la ligne et/ou la colonne du cells... en prime, c'est plus simple à utiliser, ça évite de magouiller un range ou un range + offset !
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    Citation Envoyé par plegat
    Oui.
    Je ne saurais te dire de combien, j'avais fait le test il y a quelques temps (suite à une remarque de Bidou dans un autre post), et on gagnait un peu.
    Ca s'apprécie surtout sur les boucles nombreuses, avec l'itération sur la ligne et/ou la colonne du cells... en prime, c'est plus simple à utiliser, ça évite de magouiller un range ou un range + offset !
    Ca vous dit pas que je vous envoie le fichier du compteur sur un mail pv? Vous pourrez me dire plus facilement ce que vous en pensez?

Discussions similaires

  1. Comment faire un compteur en VBA Excel
    Par pmoge dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 24/01/2019, 15h30
  2. [VBA-E] surveillance avec compteur Excel
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/04/2007, 21h34
  3. compteur ligne vba excel
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/10/2006, 15h43
  4. EXcel VBA analyse de sharpe
    Par vanima dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/02/2005, 13h07
  5. [Excel - VBA] Problème de suppression de lignes...
    Par beholder2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/01/2005, 17h27

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