Sub a()
Dim TabValeursUniques() As Variant
Dim S As String
Dim i As Long
Dim Index As Integer
Index = Val(ActiveSheet.DrawingObjects(Application.Caller).Text)
TabValeursUniques = TabValeursUniquesColonneTS(ActiveSheet.ListObjects(1), Index)
If IsEmpty(TabValeursUniques) Then
MsgBox "Echec récupération des valeurs uniques"
Else
For i = 1 To UBound(TabValeursUniques)
S = S & TabValeursUniques(i) & vbCrLf
Next i
MsgBox S
End If
End Sub
Function TabValeursUniquesColonneTS(Tbl As ListObject, TblNoColonne As Integer) As Variant()
Dim SlicerItem As SlicerItem
Dim Segment As Slicer
Dim TabValeursUniques() As Variant
Dim Workbook As Workbook
Dim Worksheet As Worksheet
Dim NomColonne As String
Dim NomSegment As String
Dim i As Long
Dim sc As SlicerCache, sl As Slicer
With Tbl
Set Workbook = .Parent.Parent
Set Worksheet = .Parent
NomColonne = .HeaderRowRange(TblNoColonne)
NomSegment = "VALEURS_UNIQUES"
' Création du slicer
Set Segment = Workbook.SlicerCaches.Add(Tbl, NomColonne).Slicers.Add(Worksheet, , NomSegment, NomColonne, .Range.Left, .Range.Top, 100, 200)
' Récupération des valeurs uniques
ReDim TabValeursUniques(1 To Segment.SlicerCache.SlicerItems.Count)
For Each SlicerItem In Segment.SlicerCache.SlicerItems
i = i + 1
TabValeursUniques(i) = SlicerItem.Name
Next SlicerItem
' Nettoyage : suppression du segment créé
Segment.Delete
End With
' Return value
TabValeursUniquesColonneTS = TabValeursUniques
End Function