Re : application.sum et variable tableau
re à vous
Alors comme je vois que rien de nouveau n'a été proposé, voici ma solution. En fait, je vous en mets deux pour le prix d'une : la première est celle que j'avais développée avant que je m'aperçoive que les fonctions de feuilles de calcul ne fonctionnaient pas sur des tableaux de 100000 lignes. Cela n'empêche qu'on peut tout de même boucler sur une colonne pour en faire la somme très rapidement. Son avantage est qu'elle reste simple de conception.
Mais comme je voulais pouvoir utiliser tout de même ces fonctions de feuille de calcul, j'ai utilisé une sorte de chaînage par tranches de 50 000 lignes sur chaque colonne. J'admets qu'on se retrouve vite avec une usine à gaz qui ne se justifie peut-être que pour le plaisir du test, mais bon, ça marche et c'est même un poil plus rapide que ma version 1 (ce qui est l'essentiel).
Résultat des courses :
Lecture du fichier et somme des éléments d'une colonne :
Solution de Didier avec des Split (que je déteste car pas du tout optimisés -les Split, pas Didier) : 96 sec.
Ma solution v1 = 10 à 11 sec.
ma solution v2 = 9,5 secondes
Evidemment, ce qui prend le plus de temps là-dedans, c'est la lecture du fichier texte, on voit que quand on passe par un Split, ça rame beaucoup (mais bon, je n'accorde aucune confiance à Didier qui ne sait pas reconnaître une
jolie petite voiture. - private joke). Heureusement on ne le lit qu'une fois, ensuite, même un bouclage sur une colonne entière sera quasi immédiat.
Une remarque : d'une façon générale, quand on travaille sur de très longues chaînes de textes, on peut, selon la façon dont on s'y prend, perdre (ou gagner, c'est selon) beaucoup de temps. En particulier, VB n'aime pas quand on lui dit par ex : S = S & "xxx". Voyez la macro que j'ai faite pour créer le fichier de test, j'ai gagné du temps en travaillant avec une chaîne intermédiaire plus courte que la chaîne principale, mais j'aurais pu en gagner beaucoup plus en utilisant certaines autres astuces que je n'ai pas pris la peine de mettre en oeuvre ici.
Il faudrait que je fasse un petit point là-dessus un de ces jours si j'en ai le courage...