Tableau multi dimensionel VBA

Bonsoir à tous,

Je souhaite réaliser des calculs de matrice (3,3), à partir de données demandées à l'utilisateur.

Voici l'exemple de matrice (rigidités)

Dim rigidités = New Integer (3,3) {{(E_L) / (1 - v_LT * v_TL),(E_L * v_LT) / (1 - v_LT * v_TL),0},{(E_L * v_TL) / (1 - v_LT * v_TL,(E_T) / (1 - v_LT * v_TL),0},{0,0,G_LT}}

J'ai un message d'erreur de syntaxe... mais je ne vois pas où.

AUTRE CHOSE: j'aimerais avoir i matrices rigidités (3,3), qui dépendraient de E_L(i), etc. : un truc du genre rigidités (i), pour utiliser par la suite rigidités (i) (3,4), pour appeler la n ème case de la matrice rigidités i

J'ai fait du python avant, mais je ne connais pas bien l'interface VBA pour le moment...

Merci beaucoup !!

Bonsoir,

Effectivement, ta syntaxe hybride ne correspond guère à VBA !

Je suppose que tu veux obtenir un tableau de 3 éléments x 3 éléments...

Tu déclares un tel tableau sous cette forme :

Dim Rig(2, 2)

Pour y affecter des valeurs, c'est élément par élément :

Rig(0, 0) =...
Rig(0, 1) =...
Rig(0, 2) =...
Rig(1, 0) =...
etc.

L'indice minimal est par défaut 0 si tu ne le précises pas (sauf à mettre Option Base 1 en tête du module, et alors ce sera 1 ; je ne conseille pas en général car on peut facilement se mélanger les pieds par la suite et on peut définir l'indice minimal explicitement).

Tablo(1 To 5)

Tablo(10 To 100)

Tablo(-5 To 0)

Rig(1 To 3, 1 To 3)

Pour regrouper plusieurs tableau de l'espèce : un tableau à 3 dimensions :

Dim Rigidités(2, 2, 9)

Pour appeler un élément du tableau i selon ton exemple :

x = Rigidités(1, 0, i)

Cordialement.

Bonjour MFerrand,

Je vous remercie beaucoup ! Je vais essayer cette synthaxe.

Peux tu me confirmer que :

Dim Rig (2,2,1) signifie la 1ère matrice Rig à dimension 3x3

Et que je peux définir Rig (1,1,1)=.... Rig (1,2,1)=...

puis pour la deuxième matrice Rig (1,1,2) Rig (1,2,2)=...

Pour ainsi remplir mes ièmes matrices.

Bonne journée

Bonjour,

Je confirme... ! Mais tu peux regarder aussi le post d'Eric sur ton autre sujet, qui place ton numéro de matrice en première dimension...

Pour VBA, c'est tout à fait équivalent, et c'est selon tes préférences personnelles ou tes habitudes, le seul impératif est que, ayant codifié une organisation, tu t'y tiennes pour la suite ! La meilleure est donc celle qui te vient le plus spontanément, pour laquelle tu auras le moins de risque (voire aucun) d'intervertir des indices.

Cordialement.

Merci beaucoup.

Un problème survient lorsqu'on intègre ces i matrices dans une boucle, ça ne fonctionne pas malheureusement...

Dim nb_mat As integer, matrices ( ) as Single, angle( ) as single

nb_mat=4

Redim matrices (1 to nb_mat,1 to 3, 1 to 3)

for i=nb_mat

angle(i)=Application.InputBox("Donner angle en degré",,Type:=1)

matrices (i,1,1)= angle(i)

matrices(i,1,2)=(angle(i))^2

Lorsque je vais vouloir faire un produit matriciel par exemple, en utilisant ces matrices: je vais devoir appeler matrices (1, 3,3) ou seulement matrice (1) suffit pour appeler la première matrice ?

Ce ne sont pas les boucles qui sont en cause.

Tu déclares angle() en tableau dynamique, mais tu ne le dimensionnes pas avant de lui affecter une valeur... L'élément i n'existant pas dans angle, il ne peut donc recevoir d'affectation.

NB: la boucle aussi : For i = 1 To nb_mat

Etant dans un tableau tridimensionnel, pour pointer un élément, il te faut 3 coordonnées...

On peut imaginer que tu déclares :

Dim nb_mat As Integer, matrice(), matTemp(1 To 3, 1 To 3) As Single, angle() As Single, i As Integer

Et :

    nb_mat = 4
    ReDim matrices(1 To nb_mat)
    ReDim angle(1 To nb_mat)
    For i = 1 To nb_mat
        angle(i) = Application.InputBox("Donner angle en degré", Type:=1)
        matTemp(1, 1) = angle(i)
        matTemp(1, 2) = angle(i) ^ 2
        '...
        matrices(i) = matTemp
        Erase matTemp
    Next i

Dans ce cas matrices est composé d'éléments de type Variant, auquel tu affectes un tableau.

En appelant matrices(1), tu appelles un tableau complet.

Pour pointer un élément ce sera : matrices(1)(1, 2) par exemple.

Je ne crois pas avoir utilisé déjà sous cette forme, mais cela paraît pleinement licite en VBA.

Tu pourrais donc appeler un tableau entier (une matrice) pour l'insérer en tant que tel dans un calcul... Là le problème sera la syntaxe du calcul (à voir ultérieurement).

Cordialement.

Wouha, votre réponse est claire et complète, je vous en remercie beaucoup MFerrand

Bonne continuation dans ce partage de connaissances !

Rechercher des sujets similaires à "tableau multi dimensionel vba"