Sub b()
Dim TabValeursUniques
TabValeursUniques = TabVDicoUniquesColonneTS(ActiveSheet.ListObjects(1), 1, True) 'rien que les filtrés
MsgBox "Filtré : " & vbCrLf & Join(TabValeursUniques, "|")
TabValeursUniques = TabVDicoUniquesColonneTS(ActiveSheet.ListObjects(1), 1)
MsgBox "sans les Filtre : " & vbCrLf & Join(TabValeursUniques, "|")
End Sub
Function TabVDicoUniquesColonneTS(TS As ListObject, index, Optional filter As Boolean = False)
Dim dic As Object, RnG As Range
Set dico = CreateObject("Scripting.Dictionary")
If filter Then
Set RnG = TS.DataBodyRange.Columns(index).SpecialCells(xlCellTypeVisible)
Else
Set RnG = TS.DataBodyRange.Columns(index)
End If
With RnG
If filter Then
For Each area In .Areas
For Each Cel In area.Cells
dico(Cel.Value) = ""
Next
Next
TabVDicoUniquesColonneTS = dico.keys
Else
If Val(Application.Version) < 16 Then
Dim T, I&
T = RnG.Value
For I = 1 To UBound(T): dico(T(I, 1)) = "": Next
TabVDicoUniquesColonneTS = dico.keys
Else
T = WorksheetFunction.Unique(RnG)
ReDim t2(1 To UBound(T))
For I = 1 To UBound(T): t2(I) = T(I, 1): Next
TabVDicoUniquesColonneTS = t2
End If
End If
End With
End Function