Voici comment j'ai résolu mon problème pour le moment. Cela fonctionne mais ce n'est pas du tout optimisé.....
Set f = Sheets("Données")
Set d = CreateObject("Scripting.Dictionary")
lst_nom_vpc.ColumnCount = 4
lst_nom_vpc.ColumnWidths = "0;50;80;50"
a = f.Range("A2:Y" & f.[D65000].End(xlUp).Row).Value
For i = LBound(a) To UBound(a)
If a(i, 16) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 17) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 18) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 19) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 20) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 21) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 22) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 23) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 24) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
If a(i, 16) <> "Manque" And a(i, 25) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
Next i
n = d.Count
If n > 0 Then
Dim Tbl: Tbl = Application.Transpose(d.items)
ReDim Preserve Tbl(1 To 4, 1 To n + 1)
Me.lst_nom.List = Application.Transpose(Tbl)
Me.lst_nom.RemoveItem n
End If