Tableau de type Array

bonsoir

j'ai une question rapide , je sais que je peux lister des elements dans un tableau de type array comme par exemple

T= array(1,2,3,4,5,6,7,8,6) , ce qui est un tableau en une dimension , existe t il une facon d'ecrire la meme chose en utilisant Array mais en deux dimensions?( sans passer par une boucle via une variable ) ? par exemple avec les associations suivantes :

table --> rouge

chaise --> bleu

velo --> jaune

chemise--> blanche

Merci pour vos reactions

Bonsoir,

je ne suis pas sur :

T = Array("table","chaise","vélo","chemise";"rouge","bleu","jaune","blanche")

L'idée est de séparer chaque "ligne" du tableau par un ";"

Pas essayé

@ bientôt

LouReeD

Bonsoir tout le monde

je m'étais déjà posé la question sans trouvé de solution...

Loureed je viens de faire un essai => erreur de compilation, il attent le séparateur virgule ou fin avec la parenthèse....

donc c'est pas ça... bien tenté...

Fred

T = Array({"table","chaise","vélo","chemise";"rouge","bleu","jaune","blanche"})

Les accolades en plus ?

@ bientôt

LouReeD

Un autre essai qui devrait "mieux" fonctionner, non ?

Dim T() as Variant
T =Array(Array("table","chaise","vélo","chemise"),Array("rouge","bleu","jaune","blanche"))

Toujours pas essayé...

@ bientôt

LouReeD

Re

par LouReeD » il y a 19 minutes

Un autre essai qui devrait "mieux" fonctionner, non ?

CODE : TOUT SÉLECTIONNER

Dim T() as Variant

T =Array(Array("table","chaise","vélo","chemise"),Array("rouge","bleu","jaune","blanche"))

Bah comme ça c'est OK

Merci

Fred

Salut à tous !

Attention !

La fonction Array renvoie un tableau unidimensionnel de base 0 (de même que Split).

Le tableau T obtenu par LouReed ne sera pas un tableau à 2 dimensions, mais un tableau à une dimension de 2 éléments d'indices 0 et 1, chaque élément étant un tableau à une dimension de 4 éléments (0 à 3).

Cordialement.

Bonjour à tous,

bravo LouReeD ! mais tu n'as pas indiqué comment l'utiliser !

au début, j'y suis pas arrivé :

screen

en fait, faut faire comme ça :

Option Explicit

Sub Essai()
  Dim T, i As Byte
  T = Array(Array("table", "chaise", "vélo", "chemise"), Array("rouge", "bleue", "jaune", "blanche"))
  For i = 0 To UBound(T(0))
    MsgBox T(0)(i) & " " & T(1)(i)
  Next i
End Sub

autre possibilité :

Option Explicit

Sub Essai()
  Dim T(1), obj, clr, i As Byte
  obj = Array("table", "chaise", "vélo", "chemise") 'objets
  clr = Array("rouge", "bleue", "jaune", "blanche") 'couleurs
  T(0) = obj: T(1) = clr
  For i = 0 To UBound(obj)
    MsgBox T(0)(i) & " " & T(1)(i)
  Next i
End Sub

@MFerrand

merci d'avoir confirmé, pendant que j'écrivais ce post, que le tableau T de LouReeD n'a rien de surnaturel, puisqu'étant un tableau à 1 dimension de 2 éléments, il est pas sorti tout droit de la 4ème dimension ! mais peut-être qu'un jour, au fil de ses nombreuses expériences bizarres et aléatoires, le programmeur scientifique LouReeD arrivera à créer un tableau Twilight_Zone(), qui sera une porte ouverte sur les dimensions parallèles et inexplorées de l'espace et du temps ? un jour, LouReeD fera mieux que ces 3 héros réunis : le colonel Jack O'Neill (Stargate SG-1), Quinn Mallory (Sliders), et Marty McFly (Retour vers le futur) ! il aura alors le grade de Super-Contributeur Terrien, et sera notre Représentant interplanétaire auprès des autres Galaxies ! vive LouReeD !

dhany

Un grand merci pour vos nombreuses réactions, je me rend compte que ce ne n'est pas tout simplement évident voir possible sans au minimum avoir recours à une petite boucle

Bonjour,

Ne pas confondre les Arrays() 2D et les Arrays() emboîtés.

http://boisgontierjacques.free.fr/pages_site/tableaux.htm#RemplissageTableau2D

Ceuzin

@rocket4

tu a écrit :

... sans au minimum avoir recours à une petite boucle

* désolé, j'avais oublié que dans ton énoncé initial, tu avais précisé : « (sans passer par une boucle via une variable) »

* j'ai trouvé comment faire sans boucle (le code VBA est long uniquement car c'est pour plusieurs exemples)

Option Explicit

Sub Essai()

  Dim Tbl, chose, n&
  Tbl = Array(Array("table", "chaise", "vélo", "chemise"), Array("rouge", "bleue", "jaune", "blanche"))
  n = UBound(Tbl) + 1

  '-------------------------------------------------
  'résultats à lire en colonne
  '-------------------------------------------------

  '1er objet
  chose = Application.Index(Tbl, , 1)
  [A1].Resize(n) = chose

  '2ème objet
  chose = Application.Index(Tbl, , 2)
  [B1].Resize(n) = chose

  '3ème objet
  chose = Application.Index(Tbl, , 3)
  [C1].Resize(n) = chose

  '4ème objet
  chose = Application.Index(Tbl, , 4)
  [D1].Resize(n) = chose

  '-------------------------------------------------
  'résultats à lire en ligne
  '-------------------------------------------------

  '1er objet
  chose = Application.Index(Tbl, , 1)
  [A4].Resize(, n) = Application.Transpose(chose)

  '2ème objet
  chose = Application.Index(Tbl, , 2)
  [A5].Resize(, n) = Application.Transpose(chose)

  '3ème objet
  chose = Application.Index(Tbl, , 3)
  [A6].Resize(, n) = Application.Transpose(chose)

  '4ème objet
  chose = Application.Index(Tbl, , 4)
  [A7].Resize(, n) = Application.Transpose(chose)

End Sub

et voilà : y'a aucune boucle For ! alors, ça te convient ?

(j'espère que oui, car après ça, j'ai rien d'autre à proposer ! )

dhany

Bonjour,

Les exemples de Jacques Boigontier sont des constantes matricielles qu'on peut utiliser dans des formules excel. Les valeurs, au sein d'une matrice doivent être séparées par des virgules et les matrices entre elles par des point-virgules. Petite précision sur la fonction Evaluate(), pour ceux qui ne le sauraient pas, qui justement permet d'évaluer une expression est aussi représentée par les crochets [ ] donc, les deux expressions ci-dessous reviennent au même :

MsgBox Evaluate("A1").Value
MsgBox [A1].Value

Dans ce cas de tableau à deux dimensions, la base est 1 et non 0 :

Sub Test()

    Dim T

    T = [{"A","B","C";1,2,3;"lundi","mardi","mercredi"}]

    'T(Numéro ordinal de la Matrice, numéro ordinal de l'élément de la matrice)
    MsgBox T(1, 3) = "C"
    MsgBox T(2, 3) = 3
    MsgBox T(3, 3) = "mercredi"

End Sub

Bonjour à tous

et dire que j'étais déjà passé il y a quelque temps sur le site de Jacques Boisgontier sans l'avoir vu.....

Fred

Merci à Ceuzin et Theze pour ces éclairages.

Merci à vous tous pour vos solutions , merci a Dhany egalement , si je comprend bien votre solution on part de 2 tableaux

admettons a = array(1,2,3,4) b= array(5,6,7,8) et on peut former un tableau t =array(a,b) tel que par exemple t(1)(2) = 7

, si c'est le cas j'avais deja utilisé cette forme pour resoudre certains problemes .

Dans tout les cas un grand merci à vous

Theze , j'ai repris votre exemple mais j'ai constaté que cela ne marche pas si le nombre d'elements de chaque matrice n'est pas le meme

par exemple avec

    Dim T

    T = [{"A","B","C";1,2,3;"lundi","mardi"}]  'j'ai retiré mercredi

    'T(Numéro ordinal de la Matrice, numéro ordinal de l'élément de la matrice)

    MsgBox T(3, 1) retourne erreur 13

Bonjour,

Tien, ce détail m'avais échappé

Là, il y a une contrainte qui est assez pénalisante !

Sinon, avec un type utilisateur de tableau pour avoir un tableau de tableaux de tableaux

Type Tableau
    Tbl() As Variant
End Type

Sub Test()

    Dim T() As Tableau

    ReDim T(1 To 2)
    ReDim T(1).Tbl(1 To 3)
    ReDim T(2).Tbl(1 To 2, 1 To 2)

    T(1).Tbl(1) = Array("A", "B", "C", "D", "E")
    T(1).Tbl(2) = Array(1, 2, 3, 4)
    T(1).Tbl(3) = Array("lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche")

    T(2).Tbl(1, 1) = Array("janvier", "février", "mars", "avril")
    T(2).Tbl(1, 2) = Array("mai", "juin", "juillet", "août", "septembre")

    T(2).Tbl(2, 1) = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
    T(2).Tbl(2, 2) = Array(10, 11, 12, 13, 14, 15)

    Debug.Print T(1).Tbl(1)(2) '2 retourne C puisque là, en base 0
    Debug.Print T(1).Tbl(2)(0) 'retourne 1
    Debug.Print T(2).Tbl(1, 1)(1) 'retourne février
    Debug.Print T(2).Tbl(2, 2)(5) 'retourne 15

End Sub
Rechercher des sujets similaires à "tableau type array"