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 :

[VBA] Optimisation de l'utilisation d'arrays


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Développeuse VBA
    Inscrit en
    Mars 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse VBA

    Informations forums :
    Inscription : Mars 2023
    Messages : 5
    Par défaut [VBA] Optimisation de l'utilisation d'arrays
    Bonjour,

    j'ai des problèmes de temps d'exécution de programme sur divers fichiers que je crée.

    Globalement, j'ai des données en entrée (15000 à 30 000 lignes, une trentaine de de colonnes). Je dois traiter ces données pour créer des tableaux avec un nombre de colonnes réduit et des données retravaillées (remplacées, concaténées, comparées). Des tableaux de paramétrage sont utilisés pour ces traitements.
    Je travaille toutes mes données en array, récupérant les données en entrée, pour les recoller une fois toutes les lignes traitées. Les tableaux de paramétrage sont également mis dans des arrays.

    Au cours du traitement, je dois régulièrement trouver parcourir les tableaux de paramétrage pour trouver les valeurs correspondant à la donnée en cours. Plusieurs fois par ligne traitée, j'utilise la fonction :
    Application.WorksheetFunction.Match(valeur, Application.Index(MonArray, , numeroDeColonne), 0)

    Je pense que ce sont ces nombreuses recherches qui ralentissent le traitement.

    Auriez-vous des idées pour améliorer les performances de mes programmes ?

    Je vous en remercie d'avance.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Salut,

    Je résume ta demande:
    "J'ai un gros truc qui rame, est-ce que vous savez d'où ca vient ?"

    Désolé, mais ma boule de cristal étant en panne , il va te falloir être plus précis.

    PS: As-tu étudié des solutions Power Query ?

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Développeuse VBA
    Inscrit en
    Mars 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse VBA

    Informations forums :
    Inscription : Mars 2023
    Messages : 5
    Par défaut
    Je suis désolée, si ne n'ai pas apporté assez de précisions.

    Au delà de la boule de cristal, est-ce que je suis la seule à ne pas trouver totalement satisfaisante la solution de travailler sur les arrays pour optimiser ?
    Y'a-t-il plus rapide que les arrays pour rechercher des valeurs dans des tableaux de paramétrages contenant plusieurs colonnes ?

    Je ne sais pas si Power Query pourrait répondre à mes besoins (le travail sur les données est très spécifique), mais je vais regarder. Merci pour la réponse.

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 228
    Par défaut
    Hello,
    D'après cette page de blog c'est bien le Match qui est le plus rapide pour faire des recherches. Sinon difficile de te répondre sans voir le code et sans savoir la nature des tableaux de paramétrage et savoir ce qui est cherché. Cela m'a l'air complexe et donc conduit peut-être à une usine à gaz.


    Ami calmant, J.P

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Développeuse VBA
    Inscrit en
    Mars 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse VBA

    Informations forums :
    Inscription : Mars 2023
    Messages : 5
    Par défaut
    Je reviens après un bon moment pour clore cette discussion. Mieux vaut tard que jamais.

    J'ai pris en compte vos réponses et conclu que mon code lui-même ne pouvait pas être optimisé (array + match étant bien le traitement le plus rapide).

    J'ai donc déporté une partie des traitements vers des formules, via un onglet supplémentaire de calculs opérant lors du chargement des données.

    Si j'avais jusque-là évité de passer par les formules, c'est que les calculs alourdissaient trop le fichier.
    Pour contourner cette difficulté, je fais en sorte que le calcul s'opère durant le traitement par macro, puis soit effacé une fois que le résultat est récupéré en valeur.
    J'utilise donc la macro pour :
    1/ étendre les formules sur la hauteur du tableau de calcul,
    2/ récupérer les résultats dans un array,
    3/ effacer les formules de l'onglet de calcul, en ne gardant que la première ligne pour le traitement suivant.

    Je garde en pur code tout le reste : récupération des données, exploitation du contenu de l'array issu des formules, traitements spécifiques de données, mise à jour des onglets de restitution, application de la mise en forme, application du format conditionnel.
    Cette solution mixte a bien fait ses preuves, chaque type de traitement (formule/code) se modulant en fonction de ce qui est le plus efficace.

    Merci pour votre écoute.

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

Discussions similaires

  1. [XL-2003] Reecriture de code VBA utilisant 1D-Array en 2D array
    Par jeo13 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/03/2011, 12h58
  2. Comment utiliser un array of TImage ?
    Par poussinphp dans le forum Langage
    Réponses: 23
    Dernier message: 19/09/2005, 09h24
  3. Utilisation des Array en javascript serveur
    Par clisson dans le forum XMLRAD
    Réponses: 4
    Dernier message: 13/06/2005, 15h46
  4. [Optimisation] Comment bien utiliser le StringBuffer?
    Par mathieu dans le forum Langage
    Réponses: 4
    Dernier message: 17/05/2004, 14h22
  5. [Stratégie][GC] Optimiser la mémoire utiliser
    Par Piolet dans le forum Général Java
    Réponses: 12
    Dernier message: 05/05/2004, 10h51

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