VBA ralenti par de "gros" (1, 3 et 9 Mo) fichiers ouverts. Excel 2010 ? Autres idées?

Charly88

XLDnaute Occasionnel
Bonjour à tous, je pensais venir vers vous prochainement pour réfléchir à l'optimisation d'une appli en fin de développement pour sa beta mais je me retrouve dors et déjà à moitié piégé depuis que je la teste avec des fichiers remplis de données.
L'appli atteint jusque là tous ses objectifs et ceci en grande partie grâce à toutes les bonnes volontés du net et de ce forum en particulier, via vos réponses à mes messages alambiqués ou le plus souvent par des réponses à d'autres posts.


L'appli est constituée d'un fichier "moteur" et de 3 fichiers bases de données. J'ai circonscrit les calculs au fichier moteur et, théoriquement, je ne perds du temps avec les Bdds qu'au moment de l'import-export. Je comptais d'ailleurs étudier ensuite les possibilités de travailler avec des fichiers Bdd fermées... Je ne me doutais absolument pas qu'avoir de gros fichiers ouverts à côté pouvait ralentir drastiquement celui en cours.
D'autant plus que j'utilise l'Appplication.ScreenUpdating=false à chaque macro de calcul.

Lorsque je veux modifier des infos primaires d'un élément d'une Bdd, je les copie sur mon fichier moteur, les modifie, calcule des données secondaires déterminées par les primaires et lorsque tout est fini et validé, je renvoie le tout dans la Bdd qui calcule tout de même certaines données via des formules relativement simples (somme si).
J'effectue aussi des calculs intermédiaires de contrôle des modifications, les lenteurs se manifestent donc tout le long du processus.


Depuis que j'ai rempli mes 3 Bdd, l'une atteignant 9 Mo, toute l'application s'est fortement ralentie et s'approche d'un niveau handicapant.
Les mêmes calculs entre Bdd légères et pleines prennent des multiples de *2 à *4, une bête macro de filtrage de Listview qui réagissait en 0,5 sec met le double-triple... Le confort utilisateur est en train de passer du jour à la nuit noire.

Quelqu'un a-t-il des pistes, suggestions ? Excel 2010 aurait-il des atouts connus dans ce domaine ?
A court terme, je racle les fonds de tiroirs : j'ai enlevé toute mise en forme de mes bdd, volets débloqués, etc. Je chronomètre mes boucles pour voir où optimiser mais je doute d'avoir une marge conséquente, peut-être juste assez pour atteindre un niveau acceptable temporairement.
 

Charly88

XLDnaute Occasionnel
Re : VBA ralenti par de "gros" (1, 3 et 9 Mo) fichiers ouverts. Excel 2010 ? Autres i

Je précise que bien entendu je continue mes recherches sur le forum et le net (comme ce fil par ex : https://www.excel-downloads.com/threads/programme-vba-lent-solutions.169475/) mais je tenais à faire ce post pour cibler un problème bien précis : du vba travaillant sur un fichier et ralenti par la simple présence d'autres gros fichiers ouverts à côté mais non-sollicités.
 

MJ13

XLDnaute Barbatruc
Re : VBA ralenti par de "gros" (1, 3 et 9 Mo) fichiers ouverts. Excel 2010 ? Autres i

Bonjour Charly, Chris

Il n'y a pas de secrets. Si tu as beaucoup de formules avec des filtres, tu peux ralentir :confused:.

Pas contre des que tu as un ralentissement, il faut en général changer de méthodes :).

En plus , je vois listview. La, ça me fait un peu peur :eek:.

Après, Excel n'est peut-être pas adapté à ton problème. Voir du côté des SGBD (Chris connaît bien :)).
 

Charly88

XLDnaute Occasionnel
Re : VBA ralenti par de "gros" (1, 3 et 9 Mo) fichiers ouverts. Excel 2010 ? Autres i

Salut Chris, MJ13,
Oui sur le fond je suis aussi tout à fait convaincu que malgré tous mes efforts, gérer des bases de données dans des feuilles excel est le handicap génétique majeur.Je n'avais pas pleinement conscience de cet aspect au démarrage.


Je chronomètre mes boucles pour voir où optimiser mais je doute d'avoir une marge conséquente...

Ô arrogance ennemie,
Forcément comme il s'agissait d'une partie de code qui donnait satisfaction jusque là, en y regardant sérieusement je m'aperçois que des améliorations sont possibles.
Pour l'instant, en améliorant uniquement la logique des boucles, j'ai gratté 30-40%, ce qui est bien sans être encore suffisant.
Je vais continuer à réviser mes gammes et en combinant stockage en tableau vb & transfert en bloc, passage en constantes de certaines variables et d'autres pistes telles que la désactivation du calcul auto, je pense encore gagner.
Mention spéciale à ma boucle de 49 itérations pour copier de 2 plages de cellules de dimension identique...
Faut pas coder fatigué.
CQFD :p


P.S : Personne pour un avis sur les perf de Excel 2010 en général et sur ce point en particulier ? Si je peux, j'essaierai de vous faire un retour, je dois avoir moyen de tester ça.
 

MJ13

XLDnaute Barbatruc
Re : VBA ralenti par de "gros" (1, 3 et 9 Mo) fichiers ouverts. Excel 2010 ? Autres i

Re

gérer des bases de données dans des feuilles excel est le handicap génétique majeur

On peut facilement faire des extractions de bases de données avec Excel (voir ODBC). Mais pour modifier des données, la, c'est plus délicat :(.

Après cela dépend du nombre de données que tu as à traiter, car pour l'instant on est un peu dans le flou sur ton application :confused:.
 

Paritec

XLDnaute Barbatruc
Re : VBA ralenti par de "gros" (1, 3 et 9 Mo) fichiers ouverts. Excel 2010 ? Autres i

Bonsoir Michel:), Charly88 le forum
concernant ton fichier, je ne sais pas ce que tu traites mais si tu as des formules partout tu n'y arriveras pas.
Par contre si maintenant tu passes par des tableaux là tu vas diviser par 20 le temps de travail sur ton fichier
n'ayant pas ton fichier, je te laisse faire tout seul, mais des boucles sur des feuilles c'est long et si il y a des formules encore plus long.
Maintenant pour traiter un fichier de 20 colonnes et 15000 lignes avec des tableaux cela va pas durer plus de 1 à 2 secondes, en fonction de ton PC
a+
papou:)
 

Misange

XLDnaute Barbatruc
Re : VBA ralenti par de "gros" (1, 3 et 9 Mo) fichiers ouverts. Excel 2010 ? Autres i

Bonjour

Je plussoie avec la réflexion de Paritec.
Au lieu de travailler avec des boucles qui réinjectent des données dans la feuille au fur et à mesure, il est extraordinairement plus efficace de travailler avec des arrays.
J'ai "commis" quelques 8 pages de tutos sur ce sujet et tu trouveras dans la première un petit exemple qui illustre le gain énorme de temps qu'on y trouve (beaucoup plus que x20 de mon expérience).
Ca demande souvent de reprendre pas mal le code mais ça vaut la peine. J'avais un énorme tableau alimenté par plusieurs autres qui au fil du temps était devenu ingérable (même le temps d'aller prendre le café et il n'avait pas terminé !). Aujourd'hui il ne met même pas une poignée de secondes à se mettre à jour.
Ce lien n'existe plus (et les 7 pages suivantes).
Tu combines ça avec un mode de calcul manuel en début de macro et ça devrait beaucoup changer ton problème.
 

Discussions similaires

Statistiques des forums

Discussions
314 647
Messages
2 111 533
Membres
111 193
dernier inscrit
Raf'