XL 2016 Quelle méthode serait la plus rapide ?

Pouet26

XLDnaute Nouveau
Bonjour le forum,

Je dois réaliser une macro qui va permettre de :
- Ouvrir successivement plusieurs classeurs (des listes d'articles issues d'extractions informatiques)
- Retraiter / supprimer quelques lignes, rajouter quelques informations
- Importer et concaténer les données des différents fichiers dans mon classeur d'origine.

Mon soucis est que je vais avoir un nombre grandissant de fichiers à traiter et que la macro basique que j'ai déjà réalisée montre des performances relativement faibles.

Je me demandais donc qu'elle serait la méthode la plus rapide pour arriver à avoir un système le plus performant possible ?

Je ne demande pas une macro toute faite, mais juste une piste sur la méthode à employer (variables tableau, module de classe etc.....)

En vous remerciant par avance,
 

Dranreb

XLDnaute Barbatruc
Bounjour.
D'une façon générale l’accès, des milliers de fois, à une seule cellule chaque fois est à proscrire complètement. Il vaut beaucoup mieux charger carrément toute la UsedRange de la feuille dans un tableau VBA et travailler à partir de celui ci. Pareil dans l'autre sens: tout préparer dans un tableau et le décharger intégralement en une seule instruction tout à la fin.
 

Pouet26

XLDnaute Nouveau
Bonjour Dranreb et merci pour ta réponse,

Donc d'après toi ça serait la méthode à base de variable tableau qui serait la plus rapide ?
Je savais bien que l'accès répété à des cellules ralentissait considérablement la procédure. Je me disais que les charger les uns après les autres dans une variable tableau, y faire mes retraitements puis recopier la variable dans mon classeur serait le plus rapide.

Mais je ne vois pas comment charger mes classeurs les uns après les autres dans ma variable (sans passer par une boucle qui fasse ça cellule après cellule).

Pour charger le premier tableau il y a ce type de méthode :
VB:
VarTab = Range("A1:C10").Value

Mais pour les suivants ???
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Pour charger les suivants vous pouvez utiliser le même tableau. Je l'appelle habituellement Te (avec e comme entrée)
Je ne compte plus les procédure que j'ai écrites, commençant par Dim Te(), Le&, Ce&, Ts(), Ls&, Cs&
Les boucles sur les éléments de tableaux ne sont pas longues, contrairement à celles sur les cellules.
 

TooFatBoy

XLDnaute Barbatruc
Je m'incruste dans ce fil de discussion qui m'intéresse beaucoup car je trouve toujours que mes macros sont trop lentes.

J'ai une feuille de calcul dont les colonnes B et C comportent actuellement environ 700 000 lignes de texte, mais je devrais bientôt atteindre voire dépasser le million de lignes.
J'ai une macro qui lit chacune des cellules de la colonne C et copie ces données par "groupes" (selon certains critères) dans un autre onglet pour au final avoir les mêmes données sous une autre mise en page.

Malgré la mise sur off du calcul automatique et du rafraîchissement de la feuille de calcul, ma macro est très lente puisqu'elle tourne environ 50 minutes.
Est-il possible de l'accélérer en mettant toutes les données de la colonne C dans un tableau et en suite travailler sur ce tableau ?
 

Discussions similaires