Creer des tableaux dynamiques de facon ietrative En VBA

Signaler
-
Messages postés
9
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
27 avril 2013
-
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

End Sub

10 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Bonjour, Merci pour la réponse,
D'accord pour les remarques, j'y ferai attention la prochaine fois
Merci
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
Demande déplacée dans la section adéquate.


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Merci pour ca,

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

ReDim var_tab(y, x)
var_tab(y, x) = Range(ActiveCell, ActiveCell.Offset(y, x)).Offset(14 * indice_tab, 0)

Next x
Next y
Next indice_tab

End Sub
/code]


Bon, voila j'espere que c'est mieux formulé...Merci de votre aide

Cordialement,
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Voir l'aide de la fonction Redim
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
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

ReDim var_tab(y, x)
var_tab(y, x) = Range(ActiveCell, ActiveCell.Offset(y, x)).Offset(14 * indice_tab, 0)


est à remplacer par

var_tab = Range(ActiveCell, ActiveCell.Offset(y, x)).Offset(14 * indice_tab, 0)


maintenant il nous manque la suite pour être plus précis sur cette réponse !

A+
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Bonjour, oui c'est exactement ca, merci pour ta réponse
Messages postés
9
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
27 avril 2013

cet video et le liens dans ça description pourrais aider ;)
tuto : vb.net ; tableau dynamique ajouter supprimer modifier redimensionner enregistrer.