Tableau pour une boucle For

Bonjour,

J'ai essayé plusieurs conseils donnés dans différents forums, mais je n'arrive pas à trouver une solution... J'ai une grande base de donnée sur laquelle je dois faire plusieurs opérations avec vba et je fais aussi appel à des fonctions dans mon code. Je voudrais mettre les données initiales de ma base de donnée dans un tableau sur vba afin d'accélérer le temps d'exécution de la macro qui est très long. Je joins un fichier Excel que j'ai fait pour représenter mon problème avec un début de code vba. En réalité, mon fichier contient beaucoup plus de données et de colonnes et les fonctions dans le code sont plus complexes.

Le nombre de lignes de ma feuille Excel peut varier alors je voudrais que le tableau s'adapte...

Je voudrais également être en mesure de réutiliser le tableau dans une autre boucle.

94tableau.xlsm (29.70 Ko)

Merci d'avance!

bonjour,

une proposition

101tableau.xlsm (30.48 Ko)

Bonjour,

pas compris l'intérêt des tableaux , pour faire quoi ?

On construit 3 tableaux que l'on initialise par une boucle sur une plage de donnée , et à chaque itération on initialise la variable Area par un appel à la fonction Area(!!?). Cette variable est "écrasée" par l'itération suivante. et de toutes façon on ne fait rien de cette variable....

Sans connaitre le but de la manip, on peut mettre l'ensemble des données utiles dans un seule tableau en une seule fois, puis dans une boucle sur ce tableau , initialiser un autre tableau avec le résultat du calcul , puis coller ce tableau dans la feuille

Dim FL1 As Worksheet
Set FL1 = Worksheets("data")
Dim Line As Long
Dim last As Long
Dim T ' tableau global
Dim TT 'tableau pour collecter les résultats

last = Sheets("data").Range("A3").End(xlDown).Row  'last line with data

T = FL1.Range("A3:C" & last) ' création du tableau de l'intégralité des données
ReDim TT(1 To UBound(T, 1)) ' redimentionnement comme le tableau T

For Line = LBound(T, 1) To UBound(T, 1) initilisation du tableau résultat
       TT(Line) = T(Line, 1) * T(Line, 2) / 2
Next Line

FL1.Range("D3").Resize(UBound(TT, 1), 1) = Application.Transpose(TT) ' copie du tableau dans la feuille

A+

edit : bonjour H2SO4

Bonjour,

h2so4:

Merci pour le code! Par contre, Je ne suis pas certaine de bien comprendre ce que font ces deux lignes:

1. tablo = Sheets("data").Range("A3:D" & last).Value

SI je comprends bien, on créer un tableau avec les colonnes A à D de la ligne 3 à last?

2. Sheets("data").Range("A3").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo

Je ne comprends pas cette ligne-là...

AlgoPlus:

Merci pour la réponse! En fait, la fonction je ne fais rien avec parce que c'était simplement un exemple pour utiliser une fonction parce que dans mon vrai code je dois en utiliser plusieurs.

Bonjour,

h2so4:

Merci pour le code! Par contre, Je ne suis pas certaine de bien comprendre ce que font ces deux lignes:

1. tablo = Sheets("data").Range("A3:D" & last).Value

SI je comprends bien, on crée un tableau avec les colonnes A à D de la ligne 3 à last?

en effet

2. Sheets("data").Range("A3").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo

Je ne comprends pas cette ligne-là...

l'opération inverse de la précédente, on remet le tableau dans les colonnes A à D à partir de la ligne 3

Rechercher des sujets similaires à "tableau boucle"