Condition If et plusieures valeurs dans TCD

Bonjour à tous,

J'ai un petit souci dans mon code VBA.

J'essaye de faire varier le filtre de mon TCD selon une valeur que j'entre dans une case. Cependant quand j'entre la valeur OAP, j'aimerais que mon filtre prenne en compte deux valeurs: OAN et OAP.

Mon problème est qu'avec le code ci-dessous, quand j'entre la valeur OAP, le TCD selectionne toutes les valeures du filtre...

Sub Pgrm()

Application.ScreenUpdating = False

If Sheets("Infos").Range("B1").Value = "OAP" Then

    With Sheets("Pgrm").PivotTables("Tableau croisé dynamique2").PivotFields("RFS")
        .ClearAllFilters
        .EnableMultiplePageItems = True
        .PivotItems("OAN").Visible = True
        .PivotItems("OAP").Visible = True

      End With

Else

With Sheets("Pgrm").PivotTables("Tableau croisé dynamique2").PivotFields("RFS")
    .ClearAllFilters
    .CurrentPage = Sheets("Infos").Range("B1").Value

    End With

    End If

End Sub

Il y a des infos confidentielles dans mon fichier, je ne peux donc malheureusement pas le mettre en pièce jointe

Merci!!

JJ

Bonjour

La valeur OAP est rentrée où ?? dans B1 ??

Oui, j'ai modifié le fichier pour le mettre sur le forum

20extract.xlsm (142.07 Ko)

Oui la valeur OAP est entrée dans B1 de la feuille "Infos"

Personne n'a de solution?

J'ai réussi a bricoler quelque chose qui fonctionne en faisant la liste des champs à décocher, cependant c'est très lourd donc si vous aviez une solution plus ergonomique ça serait parfait

Merci

re

Personne n'a de solution?

Déso de te faire attendre sur le sujet mais je ne suis pas constamment à l'affut d'une question sur ce forum.

Avant de te poster, je voudrais savoir le pouquoi du début de ta macro

If Sheets("Infos").Range("B1").Value = "OAP" Then
....
.PivotItems("OAP").Visible = True
.PivotItems("OAN").Visible = True

Par rapport à ta demande précédente et celle-ci, je comprends ceci. En feuille INFOS tu mets en B1 une valeur GAA, OAP, .... et une fois entrée le TCD te renvoie quelque chose. Correct ou pas ?

Deuxième question, est-ce que tu entres toujours en B1 un RFS complet ? OAP, GAA, .... où peux-tu entrée ces trois lettes de manière partielle ? exemple AA, OP, ...

A te relire

Salut Dan et merci

Oui quand j'entre mon RFS dans B1 mon TCD, ma macro cherche cette valeur dans le TCD et la sélectionne comme unique filtre.

Tous mes RFS ont 3 caractères, je n'entre jamais de OA ou GA.

L'objectif ici est de regrouper les données de OAP et OAN quand j'entre simplement OAN ou OAP dans la case B1

Merci

Re,

essaie ceci :

Sub Pgrm()
Dim pi As PivotItem
Application.ScreenUpdating = False

With Sheets("Pgrm").PivotTables("Tableau croisé dynamique2").PivotFields("RFS")
    .ClearAllFilters
    .EnableMultiplePageItems = True
End With

With Worksheets("Infos")
    For Each pi In Sheets("Pgrm").PivotTables("Tableau croisé dynamique2").PivotFields("RFS").PivotItems
        On Error GoTo fin:
        If pi.Name Like .Range("B1") = True Then
            Sheets("Pgrm").PivotTables("Tableau croisé dynamique2").PivotFields("RFS").PivotItems(pi.Name).Visible = True
            Else: Sheets("Pgrm").PivotTables("Tableau croisé dynamique2").PivotFields("RFS").PivotItems(pi.Name).Visible = False
        End If
    Next pi
End With
Exit Sub
fin:  MsgBox "le code n'existe pas ou est mal orthographié !"
End Sub

Crdlt

Dan,

Grace à toi j'ai réussi à faire ce que je voulais avec quelque chose de lisible, je le met sur le forum pour info

Sub Pgrm()

Dim pi As PivotItem
Dim FSC As String

Application.ScreenUpdating = False

With Sheets("Pgrm").PivotTables("Tableau croisé dynamique2").PivotFields("RFS")
    .ClearAllFilters
    .EnableMultiplePageItems = True
End With

If Sheets("Infos").Range("B1").Value = "OAP" Or Sheets("Infos").Range("B1").Value = "OAN" Then
    GoTo NAVETTE

Else
    With Sheets("Pgrm").PivotTables("Tableau croisé dynamique2").PivotFields("RFS")
        .ClearAllFilters
        .CurrentPage = Sheets("Infos").Range("B1").Value
    End With
End If

Exit Sub

NAVETTE:
FSC = Left(Sheets("Infos").Range("B1").Value, 2)
        With Worksheets("Infos")
            For Each pi In Sheets("Pgrm").PivotTables("Tableau croisé dynamique2").PivotFields("RFS").PivotItems
            If pi.Name Like FSC & "*" = True Then
            Sheets("Pgrm").PivotTables("Tableau croisé dynamique2").PivotFields("RFS").PivotItems(pi.Name).Visible = True
            Else: Sheets("Pgrm").PivotTables("Tableau croisé dynamique2").PivotFields("RFS").PivotItems(pi.Name).Visible = False
        End If
        Next pi
        End With

End Sub

Merci bcp pour ton temps Dan!!

A+

Rechercher des sujets similaires à "condition plusieures valeurs tcd"