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
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 ?
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
Et pour info voici comment cette partie s'insère dans le code complet (pour l'instant)
Merci d'avance pour votre aide,
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
David
Partager