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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 41
    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 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 ?

  10. #10
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    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 817
    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

  11. #11
    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