Bonsoir,
J'ai modifié le code afin de faire un ReDim Preserve sur le Tablo, pour qu'il s'ajuste aux données récupérées, Il se retrouve inversé, c'est pourquoi l'injection se fait avec Application.Transpose. Ensuite je défini une hauteur de ListBox en fonction du nombre de données, je n'ai pas mis le test de hauteur maximum de cette liste :
Private Sub modl_Change()
'Filtre les véhicules sur la marque et le modéle
Dim i%, x%, ws1 As Worksheet, tb1 As ListObject, tablo()
Application.ScreenUpdating = False
Set ws1 = Sheets("Parc")
Set tb1 = ws1.ListObjects("Park")
x = 0
ReDim tablo(0 To 11, 0 To x)
'efface liste precedente
Me.imats2.Clear
For i = 1 To tb1.ListRows.Count
'si marq et modele, alors en liste (limitée à 10 cols) donc onpasse par un tablo
If tb1.DataBodyRange(i, 2).Value = Me.marq.Value And IsNumeric(tb1.DataBodyRange(i, 3).Value) Then
If tb1.DataBodyRange(i, 3).Value = CSng(Me.modl.Value) Then
tablo(0, x) = tb1.DataBodyRange(i, 1).Value 'immat
tablo(1, x) = tb1.DataBodyRange(i, 2).Value 'marque
tablo(2, x) = CSng(tb1.DataBodyRange(i, 3).Value) 'modele
tablo(3, x) = tb1.DataBodyRange(i, 4).Value 'couleur
tablo(4, x) = tb1.DataBodyRange(i, 6).Value 'type veh
tablo(5, x) = tb1.DataBodyRange(i, 7).Value 'nb places
tablo(6, x) = tb1.DataBodyRange(i, 8).Value 'Bte Vtesse
tablo(7, x) = tb1.DataBodyRange(i, 9).Value 'carburant
tablo(8, x) = tb1.DataBodyRange(i, 10).Value 'fonction/sce
tablo(9, x) = tb1.DataBodyRange(i, 5).Value 'Mise en sce
tablo(10, x) = tb1.DataBodyRange(i, 9).Value 'kit ML
x = x + 1
ReDim Preserve tablo(0 To 11, 0 To x)
End If
End If
Next i
Me.imats2.List = Application.Transpose(tablo())
Me.imats2.Height = (x + 1) * 10 + 10 ' à voir ce que cela donne s'il y a plus de lignes à afficher
If Me.imats2.ListCount <> 0 Then
Me.imats2.ColumnWidths = "50;50;50;50;50;40;40;70;70;55;30;30;30" 'largeur cols listbox
End If
fin:
Application.ScreenUpdating = True
End Sub
@ bientôt
LouReeD