Faire une boucle VBA pour les segments TCD

Bonjour à tous,

J'ai un TCD avec un segment qui correspond à des réfs produits.

Je voudrais créer une macro qui demande sous forme d'une box la référence à l'utilisateur et cela permet de filtrer le segment selon la référence et donc le TCD ensuite.

J'ai réussi pour une seule ref, mais j'aimerais bien le faire pour tous. Cependant si je copie colle la même chose en changeant pour chaque ref ca me dit que ma macro est trop longue. Comment créer une sorte de boucle qui me permettrait de dire si résultat = x alors afficher le Slicer x et pas tous les autres ?? merci beaucoup pour votre aide !!!

Sub EAN()

'

' EAN Macro

'

'

Dim resultat As String

resultat = InputBox("Quelle est votre référence produit ?", "Résultat pour une référence produit") 'La variable reçoit la valeur entrée dans l'InputBox

If resultat = "0015306" Then

Application.ScreenUpdating = False

With ActiveWorkbook.SlicerCaches("Segment_Code_EAN")

.SlicerItems("0000647").Selected = False

.SlicerItems("0015306").Selected = True

.SlicerItems("0041404").Selected = False

.SlicerItems("0042418").Selected = False

.SlicerItems("0042517").Selected = False

.SlicerItems("0208715").Selected = False

.SlicerItems("0208982").Selected = False

.SlicerItems("0209095").Selected = False

.SlicerItems("0239795").Selected = False

.SlicerItems("80243570").Selected = False

.SlicerItems("0246120").Selected = False

.SlicerItems("0250080").Selected = False

.SlicerItems("0250257").Selected = False

.SlicerItems("0255351").Selected = False

.SlicerItems("0255979").Selected = False

.SlicerItems("0256020").Selected = False

.SlicerItems("0256099").Selected = False

.SlicerItems("0256877").Selected = False

.SlicerItems("0257294").Selected = False

.SlicerItems("0257645").Selected = False

.SlicerItems("0258529").Selected = False

.SlicerItems("0258543").Selected = False

Application.ScreenUpdating = True

End With

End If

End Sub

Bonjour,

Ci-joint un exemple à tester et à adapter.

Bonne journée

Bouben

Bonjour,

Une autre proposition à étudier.

Cdlt.

256claire2017.xlsm (41.33 Ko)
Option Explicit
Option Private Module

Dim pf As PivotField

Public Sub Filtre()
Dim lo As ListObject
Dim PN As String
Dim n As Long
    PN = InputBox("Saisissez la référence produit.", "Référence produit ?")
    If PN = "" Then Exit Sub
    Set lo = Worksheets("Données").ListObjects(1)
    On Error Resume Next
    n = Application.Match(PN, lo.ListColumns(2).DataBodyRange, 0)
    If Err <> 0 Then
        Err.Clear
        MsgBox "Le produit n'existe pas.", vbInformation, "Référence produit ?"
        Exit Sub
    End If
    Set pf = ActiveSheet.PivotTables(1).PageFields("Produit")
    With pf
        .ClearAllFilters
        .CurrentPage = PN
    End With
End Sub

Public Sub RAZ()
    Set pf = ActiveSheet.PivotTables(1).PageFields("Produit")
    pf.ClearAllFilters
End Sub
Claire2017 a écrit :

Bonjour à tous,

...créer une macro qui demande sous forme d'une box la référence à l'utilisateur et cela permet de filtrer le segment selon la référence...

bonjour

salut bouben, Jean-Eric,

les segments ont été créés par Microsoft pour éviter de programmer

les segments suffisent : ils contiennent tout ce qui est nécessaire pour filtrer rapidement et efficacement et facilement.

Merci beaucoup bouben, j'ai testé et cela fonctionne parfaitement !!

Merci aussi Jean-Eric je n'ai pas testé du coup, mais merci pour ton aide et ta proposition

Bonjour,

Tu devrais cependant la regarder, car mon exemple vérifie à la saisie si la référence existe ou pas dans tes données.

L'exemple de Bouben (que je salue) porte sur la recherche de 3 caractères distincts.

Et dans l'idée, il est plus simple de modifier le champ de page (filtrer) en fonction de la référence cherchée que de boucler sur l'ensemble des éléments du segment.

Cdlt.

@jmd : Salut. Quand on a un très grand nombre d'éléments dans un segment, on peut utiliser un tel artifice. A voir à l'utilisation.

Rechercher des sujets similaires à "boucle vba segments tcd"