Fusion de variable tableau et/ou ajout de données d'une listbox via X plages

listerla

XLDnaute Nouveau
Bonjour,

Actuellement j'ai une listbox à 2 colonnes qui se remplie via le calcul d'une plage spécifique (définies par plusieurs conditions et qui possède 2 colonnes et un nombre variant de lignes) dans une base de données à x lignes et y colonnes via la code suivant :

listbox1.list()=range(ma_plage1).value


Dans certains cas j'aimerais que cette même listbox, ajoute le contenue d'une autre plage variable à la suite de la liste déja creer. (donc en conservant les éléments de la liste). Et si possible en évitant les doublons.

Et c'est la que je bloque :

J'arrive à bien définir mes plages, mais je n'arrive qu'à afficher les données d'une seule plage et pas les deux en même temps (et donc encore moins en évitant les doublons)

Si j'ecris :
listbox1.list()=range(ma_plage2).value
cela supprime les valeurs de ma_plage1 par celle de ma_plage2.

Du coup je me suis penché vers les tableaux (en pensant que ca m'aiderais à supprimer les doublons par la suite)
j'ai essayé de récuperer les infos de ma_plage1 et de ma_plage2 dans des variables tableaux à 2 colonnes via la code suivant :
dim tbl1(), tbl2()
tbl1 = listbox1.list()
tbl2 = range(ma_plage2).value

Mais je n'arrive pas à "fusionner" le tableau1 et le tableau2 pour avoir un tableau3 à 2 colonnes :
En gros avoir tbl1 + tbl2 = tbl3 et ainsi écrire après : lisbox1.list() = tbl3

J'ai essayé le code suivant :

ar = array(tbl1,tbl2)
listbox1.list() = ar

mais cela m'affiche 2 lignes blanches dans ma listbox et non le contenue des 2 tableaux ^^"

Du coup je suis completement dans l'impasse.

Pour résumer, je cherche le code permettant de fussioner deux tableaux en 1 ou bien d'ajouter à une listbox à 2 colonne contenant déjà des informations, des données d'une plages à 2 colonne et x lignes.

En vous remerciant pour votre aide.

Cdlt,
 

Pierrot93

XLDnaute Barbatruc
Re : Fusion de variable tableau et/ou ajout de données d'une listbox via X plages

Bonjour,

pas testé, ne connaissant pas les différentes dimensions et initialisations.... mais essaye peut être ceci :
Code:
listbox1.List() = Union(Range(ma_plage2), Range(ma_plage1)).Value
bonne soirée
@+
 

Dranreb

XLDnaute Barbatruc
Re : Fusion de variable tableau et/ou ajout de données d'une listbox via X plages

Pierrot93, bonjour.
je viens d'essayer cette fonction perso dans une plage matricielle:
VB:
Function Test(Plg1 As Range, Plg2 As Range) As Variant
Test = Union(Plg1, Plg2).Value
End Function
Comme je m'y attendais, ça ne renvoie chez moi que les valeurs de l'Areas(1) du Range résultant de la fusion, donc de la 1ère plage seulement.

Cette procédure récupère correctement les valeurs d'une plage multizone particuilière: la partie visible d'une plage filtrée:
VB:
Sub ValoriserFiltre(TSorti() As Variant, ByVal F As Worksheet)
Dim PlgF As Range, LMax As Long, CMax As Long, Zone As Range, TEntré() As Variant, L As Long, C As Long
Set PlgF = F.AutoFilter.Range ' L'initialise à l'unique plage possible de la feuille couverte par un filtre auto.
Set PlgF = PlgF.Rows(2).Resize(PlgF.Rows.Count - 1) ' La réinitialise de façon à en sauter les entêtes.
Set PlgF = PlgF.SpecialCells(xlCellTypeVisible) ' La réinitialise de façon à n'en prendre que les cellules visibles.
       Rem. Ceci aboutit dans le cas général à une plage multi-zones, tout comme une union ou une sélection multiple.
LMax = 0: CMax = PlgF.Columns.Count ' Nombre de lignes de sortie à 0, et nombre de colonnes de la plage filtrée noté.
For Each Zone In PlgF.Areas ' Pour chaque zone:
   LMax = LMax + Zone.Rows.Count ' Ajoute au nombre de lignes total celui de la zone.
   Next Zone
ReDim TSorti(1 To LMax, 1 To CMax) As Variant ' Redimensionne convenablement le tableau à produire.
LMax = 0 ' Numéro de ligne de sortie courant remis à 0.
For Each Zone In PlgF.Areas ' Pour chaque zone:
   TEntré = Zone.Value ' en récupère l'intégralité des valeurs.
   For L = 1 To UBound(TEntré, 1): LMax = LMax + 1 ' Pour chacune des lignes, le N° de ligne de sortie est incrémenté
      For C = 1 To CMax: TSorti(LMax, C) = TEntré(L, C): Next C ' et on y copie la valeur de chaque colonne.
      Next L
   Next Zone
End Sub
Vous pouvez vous en inspirer pour récupérer le tableau unique en vous basant sur les plages à assembler rangées dans un tableau au lieu des Areas d'un Range unique mais multizone.
À +
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Fusion de variable tableau et/ou ajout de données d'une listbox via X plages

Re, bonsoir Bernard :

ce code fonctionne chez moi...
Code:
Dim p As Range, p2 As Range
Set p = Range("A1:A5"): Set p2 = Range("A6:A10")
ListBox1.List = Union(p, p2).Value
 

listerla

XLDnaute Nouveau
Re : Fusion de variable tableau et/ou ajout de données d'une listbox via X plages

Bonsoir Pierrot93,

votre code marche effectivement car les 2 ranges sont "collés".

Si j'essaye :
Dim p As Range, p2 As Range
Set p = eq.Range("A1:B5"): Set p2 = eq.Range("A7:B10")
ListBox1.List = Union(p, p2).Value

Cela ne marche pas. Seul le premier range apparait.

Bonjour Bernard,
Je vous remercie pour votre code. Je l'étudierais à tête reposé.

Je vous remercie de votre aide.
 

Discussions similaires

Statistiques des forums

Discussions
314 629
Messages
2 111 345
Membres
111 109
dernier inscrit
djameldel