VBA - Créer une matrice à partir d'une ListBox Multiple

VBA - Créer une matrice à partir d'une ListBox Multiple - VB/VBA/VBS - Programmation

Marsh Posté le 21-03-2011 à 21:29:48    

Salut à vous,
 
Je sèche actuellement sur un problème VBA qui ne devrait pourtant être difficile à résoudre :
 
J'ai un tableau avec dans la première ligne des libellés, et dans toutes les lignes suivantes des valeurs.
 
J'ai créé une ListBox Multiple avec tous les libellés, et ce que je souhaite c'est qu'en sélectionnant les noms de colonnes dans la LisBox, je puisse créer une matrice ne contenant que ces colonnes là (sans les libellés de préférence, mais le souci n'est pas là).
 
Alors autant je suis capable de repérer quelles sont les colonnes sélectionnées, mais pour créer la matrice  :??: :p
 
Sachant que j'ai mon tableau initial stocké sous le nom 'Prix', je tente des combinaisons à base de :

Code :
  1. Dim Selection_a() As Variant
  2. J = 0
  3. For i = 0 To ListBox1.ListCount - 1
  4.     If ListBox1.Selected(i) Then
  5.           J = J + 1
  6.           Selection_a.Columns(J) = Prix.Columns(i)
  7.     End If
  8. Next i


 
qui ne marche pas et me renvoie une "Erreur de compilation : Qualificateur Incorrect".
 
J'ai également essyé de la faire à partir de "Union", mais je suis infoutu de faire quelque chose d'utilisable, la combinaison

Code :
  1. a = Union(Columns(2), Columns(3)).Value

est semblable à ce que je veux faire, mais elle me sélectionne toute la colonne (pas que celle de "Prix" ), et je n'arrive pas à la rendre dynamique.
 
Une idée quelqu'un ?  
 
Merci  :hello:  

Reply

Marsh Posté le 21-03-2011 à 21:29:48   

Reply

Marsh Posté le 22-03-2011 à 09:56:30    

Il faut dimensionner ton tableau.
Regarde du coté de : ReDim Preserve Selection_a(1 To J)
 
Ensuite, tu ne peux (a ma connaissance) pas ajouter directement une colonne.
Il faut te positionner sur chaque valeur de la colonne (donc sur chaque ligne de la colonne) et l'ajouter a ton tableau.
 
Pour résumer il te faut un tableau a plusieurs dimensions où Dimensions = Nb de colonne.
Dans chaque dimension tu vas ajouter les valeurs de chaque colonne.
 
Tu as donc besoin de deux boucles. Une pour boucler sur les colonnes a partir de ta listbox, une autre pour boucler sur les lignes de chaques colonnes pour ajouter les valeurs au tableau.
 
 
Edit : un peu de lecture ne fera pas de mal :jap:


Message édité par SuppotDeSaTante le 22-03-2011 à 09:58:56

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-03-2011 à 11:10:26    

Merci beaucoup, j'avais vraiment mal intégré le fonctionnement des tableaux, et developpez.com a bien aidé...  :o  
 
Maintenant ça donne ça :  

Code :
  1. nLig = UBound(Prix)
  2. nCol = 0
  3. For i = 0 To ListBox1.ListCount - 1
  4.     If ListBox1.Selected(i) Then
  5.        nCol = nCol + 1
  6.     End If
  7. Next i
  8. ReDim Selection_a(nLig, nCol)
  9. nCol = 0
  10. For i = 0 To ListBox1.ListCount - 1
  11.     If ListBox1.Selected(i) Then
  12.        nCol = nCol + 1
  13.        For l = 1 To nLig
  14.         Selection_a(l, nCol) = Prix(l, i)
  15.        Next r
  16.     End If
  17. Next i


 
Ce qui semble fonctionner, donc merci beaucoup ! Ceci dit, j'ai plus d'expérience avec Matlab, et faire quelque qui ressemblerait à

Code :
  1. nCol = 0
  2. For i = 0:ListBox1.ListCount - 1
  3.     If ListBox1.Selected(i) Then
  4.        nCol = nCol + 1
  5.        Selection_a(:, nCol) = Prix(:, i)
  6.      End If
  7. Next i


 
N'est donc pas (trivialement) possible sous VBA ? C'est tout de même dommage, mais bon.
 
En tout cas merci  :hello:  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed