Sub a()
Dim TabValeursUniques() As Variant
TabValeursUniques = TabValeursUniquesColonneTS(ActiveSheet.ListObjects(1), 2)
MsgBox Join(TabValeursUniques, "|")
End Sub
Sub b()
Dim TabValeursUniques
TabValeursUniques = TabVDicoUniquesColonneTS(ActiveSheet.ListObjects(1), 1)
MsgBox Join(TabValeursUniques, "|")
End Sub
Function TabVDicoUniquesColonneTS(TS As ListObject, index)
Dim t, dic
Set dico = CreateObject("Scripting.Dictionary")
With TS
t = .DataBodyRange
For i = 1 To UBound(t)
dico(t(i, 1)) = ""
Next
TabVDicoUniquesColonneTS = dico.keys
End With
End Function
Function TabValeursUniquesColonneTS(Tbl As ListObject, TblNoColonne As Integer) As Variant()
Dim SlicerItem As SlicerItem
Dim Segment As Object
Dim TabValeursUniques() As Variant
Dim Workbook As Workbook
Dim Worksheet As Worksheet
Dim NomColonne As String
Dim NomSegment As String
Dim WorkbookSaved As Boolean
Dim i As Long
With Tbl
Set Workbook = .Parent.Parent
Set Worksheet = .Parent
WorkbookSaved = Workbook.Saved
NomColonne = .HeaderRowRange(TblNoColonne)
NomSegment = "VALEURS_UNIQUES"
On Error Resume Next
Worksheet.Shapes(NomSegment).Delete
On Error GoTo 0
With .Range
Set Segment = Workbook.SlicerCaches.Add(Tbl, NomColonne).Slicers.Add( _
Worksheet, , NomColonne, NomColonne, .Left, .Top, 100, 200)
End With
Segment.Name = NomSegment
End With
With Segment.SlicerCache
ReDim TabValeursUniques(1 To .SlicerItems.Count)
For Each SlicerItem In .SlicerItems
i = i + 1
TabValeursUniques(i) = SlicerItem.Name
Next SlicerItem
End With
Segment.Delete
Workbook.Saved = WorkbookSaved
'Return value
TabValeursUniquesColonneTS = TabValeursUniques
End Function