Creer des tableaux dynamiques de facon ietrative En VBA

Beyssac - 5 sept. 2012 à 11:24
zakariaz35 Messages postés 9 Date d'inscription jeudi 29 novembre 2012 Statut Membre Dernière intervention 27 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

End Sub

10 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
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
0
Bonjour, Merci pour la réponse,
D'accord pour les remarques, j'y ferai attention la prochaine fois
Merci
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
5 sept. 2012 à 13:49
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...
0
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,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
5 sept. 2012 à 16:14
Voir l'aide de la fonction Redim
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
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

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+
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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
0
Bonjour, oui c'est exactement ca, merci pour ta réponse
0
zakariaz35 Messages postés 9 Date d'inscription jeudi 29 novembre 2012 Statut Membre Dernière intervention 27 avril 2013
4 oct. 2012 à 02:13
cet video et le liens dans ça description pourrais aider ;)
tuto : vb.net ; tableau dynamique ajouter supprimer modifier redimensionner enregistrer.
0
Rejoignez-nous