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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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