Stocker une sélection Multiple de ListBox dans un tableau dynamique (Dim, Redim, Preserve Redim)
Bonjour à tous,
malgré la lecture de cet article https://silkyroad.developpez.com/vba/tableaux/ et autres tutos ainsi que plusieurs heures de galère, je n'arrive toujours pas à stocker une sélection multiple issue d'une Listbox dans un tableau.
J'ai l'impression que malgré l'instruction "Redim Preserve" mon tableau est vidé à chaque tour de boucle.
Voici la dernière version de mon code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
Dim nbIsoTotal As Integer
Dim nbIsoSel As Integer
Dim TabOnglets() As Variant
nbIsoTotal = UserForm1.ListBox1.ListCount ' nombre de selections possibles
nbIsoSel = 0 'nombre de selections effectives initialisé à 0
ReDim TabOnglets(1)
For i = 0 To nbIsoTotal - 1
If UserForm1.ListBox1.Selected(i) = True Then
nbIsoSel = nbIsoSel + 1 'comptage des selections effectives
ReDim Preserve TabOnglets(nbIsoSel) ' Redimensionnement tu tableau en fonction du nombre de sélections à stocker
MsgBox TabOnglets(nbIsoSel) 'les MsgBox sont tous vides
TabOnglets(nbIsoSel - 1) = UserForm1.ListBox1.List(i) 'nbIsoSel -1 est l'index du tableau qui commence à 0
' A la fin de la boucle il reste la dernière entrée puisque tous les autres sembles avoir été vidées
End If
Next i |
Ma question est donc comment faire pour stocker ces sélections dans un tableau dont on ne connait pas la dimension au départ ? ou plus précisément comment faire pour le redimensionner à chaque fois qu'en ajoute une entrée sans vider les entrées précédentes ?
Et pour info voici comment cette partie s'insère dans le code complet (pour l'instant)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
Dim ws As Worksheet
Dim NouvelleFeuille As Worksheet
Dim Onglets As String
Dim Onglet As Variant 'une variable for each poru les tableaux doit être de type variant
Dim nbIsoTotal As Integer
Dim nbIsoSel As Integer
Dim TabOnglets() As Variant
nbIsoTotal = UserForm1.ListBox1.ListCount
nbIsoSel = 0
ReDim TabOnglets(1)
For i = 0 To nbIsoTotal - 1
If UserForm1.ListBox1.Selected(i) = True Then
nbIsoSel = nbIsoSel + 1
ReDim Preserve TabOnglets(nbIsoSel)
MsgBox TabOnglets(nbIsoSel)
TabOnglets(nbIsoSel - 1) = UserForm1.ListBox1.List(i)
End If
Next i
'à adapter
Set FeuilleMoy = ClasseurMacro.Worksheets.Add
FeuilleMoy.Name = "Feuille Moyenne"
Dim j As Integer
Dim dl As Integer
j = 1
For Each Onglet In TabOnglets()
Set FeuilleOng = ClasseurKSV.Worksheets(Onglet)
dl = FeuilleOng.Range("G" & Rows.Count).End(xlUp).Row 'dernière ligne de la colonne Aire
ClasseurKSV.Worksheets(Onglet).Range("G1:H" & dl).Copy Destination:=FeuilleMoy.Range(Cells(2, j), Cells(dl, j + 1)) ' a vérifier
j = j + 2
Next |
Merci d'avance pour votre aide,
David