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 :

Optimisation de la Fonction Find()


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 11
    Par défaut Optimisation de la Fonction Find()
    Salut les gars,

    dans le cadre de mon travaille j'utilise pas mal les calculs dans Excel pour cela j'utilise pas mal de macros, le plus grand problème que j'en ai dans ce temps c'est la fonction Find() dans Vba ça marche nickel mais son problème que ça prend énormément de temps d'exécution (on a des milliers de valeurs dans chaque feuille Excel et ça prend des heures pour pouvoir exécuter une macro), donc je voulais savoir s'il y en a un moyens de réduire ce temps en la remplaçant par d'autre fonctions ou par un petit Code.

    Merci pour votre aide

  2. #2
    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 pierre008 et le forum
    Pour conseiller l'optimisation d'un code, il faut avoir une idée de ce qu'est le code. La méthode Find() étant très rapide, pour en trouver une meilleure, il faut déjà connaitre le fonctionnement attendu et avoir le code de départ.
    A+

  3. #3
    Membre habitué
    Inscrit en
    Février 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 11
    Par défaut
    Merci pour t'a réponse
    Le problème que l'utilisation de Find est très varié ça dépend de chaque calcul qu'on fait, le plus grand problème dont on est affronté c'est le très grand nombre de valeurs à calculer, ça peut aller parfois à plusieur milliers de valeurs dans une seul feuille et ça prend des heures l'exécution de chaque macro, j'ai essayé de remplacer Find par une fonction qui parcourt toute la feuille colonne par colonne, évidamenent si la valeur était au début c'est bien plus rapide que Find sinon c'est beaucoup plus pire.

    Alors ce que je recherche c'est d'avoir un remplacant de Find ou une fonction Find optimiser pour pouvoir gagner un peu de temps, si je gagne 5 min par heure de calcul c'est énorme.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 242
    Par défaut
    Bonjour,

    Je ne suis pas certain que le temps d'exécution vienne uniquemement du FIND, mais aussi du parcours de plages de cellules et de boucles répétitives.

    Une première idée à creuser est non pas de balayer les cellules mais de balayer des tableaux que tu auras au préalable alimentés avec le contenu de tes cellules (instruction du type monTableau = maPlageABalayer)
    Tu verras que la manipulation de tableaux est nettement plus rapide que le balayage de cellules.
    Pareil, pour la mise à jour des résultats, tu peux également travailler sur un tableau que tu viens mettre à la fin dans ta plage de destination (instruction du type maPlageResultat = monTableauResultat).

    Pour le FIND, il est possible d'utiliser un objet dictionnaire (rajouter la référence à Microsoft Scripting Runtime dans ton projet VBA) que tu initialises en une seule passe. Ensuite, dans ta boucle, tu utilises les propriétés EXISTS et ITEM du dictionnaire pour faire tes recherches.

    Tout ceci n'a d'intérêt que dans le cas où tu dois balayer de nombreuses cellules pour lesquelles tu répètes le même traitement. Et attention, avec des tableaux, tu ne peux travailler que sur la valeur des cellules et pas sur leur format.

    Le mieux, c'est que tu donnes un exemple de traitement que tu voudrais optimiser, ce serait plus pratique.

  5. #5
    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 pierre008 et le forum
    Dialogue de sourd!!!
    Tu crois que ton code est tellement bon que tu préfères le tenir secret ?
    Si tu ne veux pas d'aide, m'encombre pas le forum ! Pour être plus clair : la méthode Find() est en général la plus rapide.
    Si elle est trop lente, c'est que :
    - soit c'est son utilisation n'est pas comprise
    - soit l'algorithme de la macro est à revoir
    - soit ce n'est pas la méthode à employer.
    Dans les trois cas, il faut le code. Ou alors aller sur un site comme devins.com ou Cartomanciennes.net

    Vu ce que je viens d'écrire, je crois que cette question n'est pas pour moi. Il n'y a que dans les films que ça reste intéressant de devoir arracher les informations top secret.
    A+

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Juste pour essayer, car tout comme Gorfael, j'ai du mal à tout comprendre.

    Vous avez écrit :
    Le problème que l'utilisation de Find est très varié ça dépend de chaque calcul qu'on fait, le plus grand problème dont on est affronté c'est le très grand nombre de valeurs à calculer, ça peut aller parfois à plusieur milliers de valeurs dans une seul feuille et ça prend des heures l'exécution de chaque macro,
    Voulez-vous dire que lorsque la valeur recherchée est trouvée vous faites de nombreux calculs ?

    Si oui, comment : en utilisant des fonctions Excel ?

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/06/2007, 16h44
  2. [C++ .NET] Comment utiliser fonction Find ?
    Par thecrax dans le forum Framework .NET
    Réponses: 3
    Dernier message: 17/08/2006, 09h02
  3. [VBA-E]Problème avec la fonction Find
    Par Mirx1 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 27/04/2006, 18h43
  4. [VBA-E]Fonction .find
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/01/2006, 11h03
  5. [VBA-E] Fonction "FIND"
    Par cinc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/09/2005, 11h16

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