Sub a()
Dim TabValeursUniques() As Variant
Dim S As String
Dim i As Long
TabValeursUniques = TabValeursUniquesColonneTS(ActiveSheet.ListObjects(1), 2)
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"
'--- Suppression du segment et de ces slicers au cas ou la shape du segment créé récedemment n'a pas été supprimée
On Error Resume Next 'on gère l'erreur pour les slicers et le shape in oneshot
For Each sc In Workbook.SlicerCaches
For Each sl In sc.Slicers
If sl.Name = NomSegment Then
sc.Delete ' supprime le cache + la shape
Exit For
End If
Next sl
Next sc
' au cas ou on supprime la shape du segment si y a une une carabistouille dans le potage
Worksheet.Shapes(NomSegment).Delete
On Error GoTo 0
'--------------------------------------------
' Création du slicer
Set Segment = Workbook.SlicerCaches.Add2(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éé(attention ici ca supprime uniquement la shapes(pas les slicers!!!!) )
Segment.Delete
End With
'retour de la fonction'
TabValeursUniquesColonneTS = TabValeursUniques
End Function