VBA - tableau à partir d'1 table TROP LENT

heriss

XLDnaute Junior
Bonsoir le forum,

J'ai un fichier qui recupere des donnés d'une base de donnée externe sous forme de table (onglet PivotData) et je cherche à creer un tableau à partir de celles-ci.

J'ai sur un onglet un TCD (pas sur le fichier joint pour cause de taille) qui me permet de faire l'analyse rapide des données et de générer des graphes.
Ayant besoin d'éditer des rapports standardisés j'ai besoin d'autre chose qu'un TCD qui n'est pas toujours facile à paginer/manipuler.
J'ai donc une macro qui utilise les données pour recréer un autre tableau (la largeur et la hauteur du tableau varie en fonction des parametres selectionnés) et je cherche un moyen d'accélérer la macro car lorsque j'ai les 2000 lignes de données cela tourne pendant des heures. (dans le fichier joint c'est rapide du fait du nombre réduit de ligne).

J'ai essayé avec des sommeprod et ce n'est pas l'extase non plus...

Pourriez-vous s'il vous plait jeter un oeil sur le code et m'aider à finir mon projet? (au passage j'ai du mal à gérer les totaux par catégorie alors si vous voulez vous lacher ne vous genez pas)

Merci d'avance,
Heriss
 

Pièces jointes

  • Bridging_TEST.zip
    42.2 KB · Affichages: 34

myDearFriend!

XLDnaute Barbatruc
Re : VBA - tableau à partir d'1 table TROP LENT

Bonsoir heriss, le Forum,

Pas tout compris dans ce classeur...
Cela dit, tu trouveras ci-joint l'exemple modifié qu'il convient de tester. Je pense avoir réduit un peu le temps de traitement (d'après mes tests, je passe d'un rapport de 6 à 1,5).

Je ne peux t'expliquer en détail l'ensemble des modifications effectuées (voir module mDF), je te laisse comparer le code avec ta version originale.

Quelques remarques toutefois :
  • Code:
    [SIZE=2][COLOR=NAVY]Dim[/COLOR] i, j, k [COLOR=NAVY]As Integer[/COLOR][/SIZE]
    Si tu veux que i, j et k soient déclarées Integer, alors il te faut noter :
    Code:
    [SIZE=2][COLOR=NAVY]Dim[/COLOR] i [COLOR=NAVY]As Integer[/COLOR], j [COLOR=NAVY]As Integer[/COLOR], k [COLOR=NAVY]As Integer[/COLOR][/SIZE]
    sinon i et j seront considérés comme Variant (par défaut).
  • Pour optimiser ton code, il te faut éviter autant que possible les longues phrases du genre :
    Code:
    [SIZE=2]Sheets("StaticReport").range(Sheets("StaticReport").range("A7").Offset(0, i).Address & ":" & Sheets("StaticReport").range("A7").Offset(0, i + 2).Address).ColumnWidth = 13[/SIZE]
    . Ces longues instructions demandent beaucoup de temps pour être interprétées lors du traitement.
  • N'hésite pas à user, abuser des blocs d'instructions With / End With plutot que répéter les noms d'objets (Sheets("blablabla...")
  • Il est toujours préférable de faire référence à des variables objet (range) définies en début de procédure que de répéter l'adresse complète d'un range tout au long du code (tu l'avais déjà fait pour PlageAccount par exemple).
Espérant t'avoir un peu aidé.

Cordialement,

PS : pourquoi avoir préféré l'évènement Lostfocus() à l'évènement Click() ou Change() pour DivisionMenu et ReportMenu ?
 

Pièces jointes

  • mDF_Bridging_TEST.zip
    47.4 KB · Affichages: 29

heriss

XLDnaute Junior
Re : VBA - tableau à partir d'1 table TROP LENT

Bonjour Didier, bonjour le forum,

Merci pour ton fichier et tes remarques. Ton post ma permis de faire quelque mises au clair bien nécessaire.

J'ai teste sur les données réelles et je passe de 25"32 à 11"75 pour le plus petit des rapport... C'est nettement mieux mais pour l'un des rapports les plus lourds il faut toujours plus de 72"51 meme avec ta méthode. Y a-t-il une autre approche du probleme qui pourrait me permettre de rester dans des temps raisonnables?

Sinon, pourquoi Lostfocus au lieu de change? Par ce que la macro semble tourner en boucle si j'utilise change et plutot que de perdre du temps à en chercher la raison j'ai prefere continuer sur le projet en lui meme.
Je vais tester avec click.


Ciao,
Heriss
 
Dernière édition:

heriss

XLDnaute Junior
Re : VBA - tableau à partir d'1 table TROP LENT

Bonjour le Forum, Bonjour My dear Friend,

Ok j'ai bien relu les conseils de laurent longre sur l'optimisation du code VBA et du coup le temps de traitement est sacrement reduit.

Pour les memes operations (hors formatage) je passe de 72" à environ 5".

Il n'y a pas photo, comparer des tableaux entre eux est extremement plus rapide que de comparer un tableau et une cellule excel.
Ci-joint la version actuelle du fichier.

ciao et encore merci de l'aide

Heriss
 

Pièces jointes

  • ## TEST Bridging 0.1 ##.zip
    45.4 KB · Affichages: 42

Discussions similaires

Réponses
13
Affichages
389

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib