Ok. Reste encore deux ou trois choses
1. Code affiche --> Remplacez-le (c'est d'une longueur...waouh) par celui ci-dessous
Sub Affiche()
Dim i
Dim j As Byte, k As Byte
Dim dchoisis(1 To 16)
For j = 1 To 16
Set dchoisis(j) = CreateObject("Scripting.Dictionary")
For i = 0 To Me.Controls("ChoixListBox" & j).ListCount - 1
If Me.Controls("ChoixListBox" & j).Selected(i) Then dchoisis(j)(Me.Controls("ChoixListBox" & j).List(i, 0)) = ""
Next i
Next j
Dim n
Dim liste()
Dim tmp(1 To 17)
For i = LBound(TblBD) To UBound(TblBD)
tmp(1) = TblBD(i, 5)
tmp(2) = TblBD(i, 6)
For j = 3 To 16
tmp(j) = TblBD(i, j + 7)
Next j
tmp(17) = TblBD(i, 1)
If (dchoisis(1).Exists(tmp(1)) Or dchoisis(1).Count = 0) _
And (dchoisis(2).Exists(tmp(2)) Or dchoisis(2).Count = 0) _
And (dchoisis(3).Exists(tmp(3)) Or dchoisis(3).Count = 0) _
And (dchoisis(4).Exists(tmp(4)) Or dchoisis(4).Count = 0) _
And (dchoisis(5).Exists(tmp(5)) Or dchoisis(5).Count = 0) _
And (dchoisis(6).Exists(tmp(6)) Or dchoisis(6).Count = 0) _
And (dchoisis(7).Exists(tmp(7)) Or dchoisis(7).Count = 0) _
And (dchoisis(8).Exists(tmp(8)) Or dchoisis(8).Count = 0) _
And (dchoisis(9).Exists(tmp(9)) Or dchoisis(9).Count = 0) _
And (dchoisis(10).Exists(tmp(10)) Or dchoisis(10).Count = 0) _
And (dchoisis(11).Exists(tmp(11)) Or dchoisis(11).Count = 0) _
And (dchoisis(12).Exists(tmp(12)) Or dchoisis(12).Count = 0) _
And (dchoisis(13).Exists(tmp(13)) Or dchoisis(13).Count = 0) _
And (dchoisis(14).Exists(tmp(14)) Or dchoisis(14).Count = 0) _
And (dchoisis(15).Exists(tmp(15)) Or dchoisis(15).Count = 0) _
And (dchoisis(16).Exists(tmp(16)) Or dchoisis(16).Count = 0) Then
n = n + 1
ReDim Preserve liste(1 To nbcol + 1, 1 To n)
For k = 1 To nbcol + 1
liste(k, n) = TblBD(i, k)
Next k
End If
Next i
If n > 0 Then Me.ListBox20.Column = liste Else Me.ListBox20.Clear
End Sub
2. Tout au dessus des codes, il y a des variables qui sont déclarées et non utilisées. Remplacez tout par ces lignes :
Option explicit
Dim TblBD()
Dim dchoisis1, dchoisis2, dchoisis3, dchoisis4, dchoisis5, dchoisis6, dchoisis7, dchoisis8, dchoisis9, dchoisis10, dchoisis11, dchoisis12, dchoisis13, dchoisis14, dchoisis15, dchoisis16
Dim nomtableau As String
Dim nbcol As Byte
refaites un test avant que je ne continue