Creer des tableaux dynamiques de facon ietrative En VBA
Beyssac
-
5 sept. 2012 à 11:24
zakariaz35
Messages postés9Date d'inscriptionjeudi 29 novembre 2012StatutMembreDernière intervention27 avril 2013
-
4 oct. 2012 à 02:13
Bonjour, j'ai des donnees source réparties en 6 tableaux de meme taille dans une feuille excel. Je voudrais affecter ces données à des tableaux dynamiques, de facon iterative (j'affecte un premier tableau de données à un premier tableau dynamique, meme opération avec le deuxieme tableau de données à affecter à un deuxieme tableau dynamique, etc). Et il faut que chaque tableau dynamique conserve ses données qui seront exploitées par la suite du programme.
Voici ce que j'ai fait, mais je pense que ca ne marche pas...(j'ai inclus l'indice d'itération des tableaux dynamiques en tant que variable de tableau, pas sur que ca soit la bonne facon de faire, mais pas d'autre idée...), merci de votre aide,
Sub inp_cost_baob()
'declaration des variations de i et j
Dim x As Integer 'nb de colonnes max du tableau source
Dim y As Integer 'nb de lignes max du tableau source
Dim tab_donneesource As Variant
Dim indice_tab As Integer
Dim var_tab() As Variant
For indice_tab = 0 To 5
Sheets("baob").Activate
Range(Cells(2, 14), Cells(2, 14)).Offset(14 * i, 0).Select
Range(Cells(2, 14), Cells(2, 14)).Offset(14 * i, 0).Activate
Range(ActiveCell, ActiveCell.End(xlToRight)).Select
x = Selection.Columns.Count
Range(ActiveCell, ActiveCell.End(xlDown)).Select
y = Selection.Rows.Count
tab_donneesource = Range(ActiveCell, ActiveCell.Offset(y, x)).Offset(14 * indice_tab, 0).Select
'allocation vers tableau
For y = 0 To Selection.Rows.Count
For x = 0 To Selection.Columns.Count
ReDim var_tab(indice_tab, y, x)
var_tab(indice_tab, y, x) = Range(ActiveCell, ActiveCell.Offset(y, x)).Offset(14 * indice_tab, 0)
Next x
Next y
Next indice_tab
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 5 sept. 2012 à 11:46
Bonjour,
Peux-tu s'il te plait veiller à ouvrir tes dicussions dans la section correspondant à ton langage de développement ?
La présente discussion aurait dû être ouverte dans la section : Langages dérivés > VBAMerci de prendre ce soin.
Veille égfalement à présenter tes bouts de code entre balises code (3ème icône en partant de la droite).
Il est lourd, lent et maladroit de travailler à coups de select, activate, etc ...
Sous VBA, on traite directement les objets Excel.
Un tableau dynamique peut directement être constitué à partir d'une plage, sous VBA.
Ainsi (exemple) :
dim toto
toto = Range("A2:C3")
te constituera un tableau à 3 dimensions contenant les valeurs de ta plage.
Dans un tel tableau, le premier index de ligne est 1 et le premier index de colonne est également 1
Ainsi : toto(1,1) contient la valeur de la cellule A2
Voilà . tu devrais en savoir maintenant suffisamment pour travailler dans l'esprit de VBA.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Je reviens sur ma question car je l'ai mal exprimée. En fait je veux trouver un moyen pour créer des tableaux dynamiques de facon iterative, par une boucle. J'ai en fait 6 tableaux de données que je veux stocker dans ces tableaux dynamiques. Il faut que les données stockées y soient conservées lorsque je passe au tableau dynamique suivant (donc je pense que le nom du tableau dynamique doit changer à chaque pas de la boucle, et c'est ce que je n'arrive pas a faire...)
Ci dessous, le code que j'ai fait et qui ne marche pas (car le nom du tableau ne change pas en fonction de l'iteration)
[Sub inp_cost_baob()
Dim x As Integer 'nb de colonnes max du tableau source
Dim y As Integer 'nb de lignes max du tableau source
Dim tab_donneesource As Variant
Dim indice_tab As Integer
Dim var_tab() As Variant
For indice_tab = 0 To 5
Sheets("baob").Activate
Range(Cells(2, 14), Cells(2, 14)).Offset(14 * i, 0).Select
Range(Cells(2, 14), Cells(2, 14)).Offset(14 * i, 0).Activate
Range(ActiveCell, ActiveCell.End(xlToRight)).Select
x = Selection.Columns.Count
Range(ActiveCell, ActiveCell.End(xlDown)).Select
y = Selection.Rows.Count
tab_donneesource = Range(ActiveCell, ActiveCell.Offset(y, x)).Offset(14 * indice_tab, 0).Select
'allocation vers tableau
For y = 0 To Selection.Rows.Count
For x = 0 To Selection.Columns.Count
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 5 sept. 2012 à 15:55
1) je t'ai dit l'essentiel et tu n'en tiens aucun compte
2) tu ontinues à travailler à coups de activate et select.
Jde te laisse là, personnellement.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 6 sept. 2012 à 09:31
Salut,
pour étayer la remarque de ucfoutu voici un exemple :
ceci :
Sheets("baob").Activate
Range(Cells(2, 14), Cells(2, 14)).Offset(14 * i, 0).Select
Range(Cells(2, 14), Cells(2, 14)).Offset(14 * i, 0).Activate
Range(ActiveCell, ActiveCell.End(xlToRight)).Select
x = Selection.Columns.Count
sera avantageusement remplacé par :
With Cells(2, 14)
x = Range(.Offset(14 * i, 0), .Offset(14 * i, 0).End(xlToRight)).Columns.Count
End With
Par expérience on sait tous ici que les select et autre activate sont source d'erreurs, de lenteur, d’épilepsie et rendent le code incompréhensible d’où la remarque de Ucfoutu.
D'autre part ucfoutu a déjà repondu à ta question car
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 7 sept. 2012 à 17:34
Je ne suis pas certain de bien comprendre, mais je pense que tu veux stocker tes données de manière dynamique dans des tableaux de différents noms sans devoir créer une série de tableaux fixes...
Peut-être pourrais-tu utiliser des tableaux à 3 dimensions, dont une servirait de "nom" de tableau et les 2 autres pour stocker tes données.
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI