Décocher une case sur un Tableau Croisé Dynamique VBA

Bonjour le forum,

Cela fait un bout de temps que je cherche desesperemment à décocher la case "(vide)" (ou "(blank)" si vous avez excel en anglais) du filtre de mon Tableau croisé dynamique situé à la cellule B4.

Je vous donne mon fichier en pièce jointe sur lequel je fais mes tests.

j'ai essayé beacoup de code différents pour y parvenir mais en vain....

voici un petit code que j'avais tenté

Sub tessst()

 ActiveSheet.PivotTables("PivotTable3").PivotFields("code")

ActiveSheet.PivotTables("PivotTable3").PivotFields("code").PivotItems("(vide)") = False

With ActiveSheet.PivotTables("PivotTable3").PivotFields("code")

If .PivotItems("vide").Visible = True Then .PivotItems("vide").Visible = False

'    Application.Undo

End If

End With

Je desespère... si quelqu'un aurait une idée ce serait trop génial

Merci beaucoup

32exemple-frm-1.xlsm (179.66 Ko)

Bonjour awa123,

Le fichier n'est pas passé.

As-tu essayé l'enregistreur de macro ? Voici ce qu'il donnerait à peu près :

ActiveSheet.PivotTables("PivotTable3").PivotFields("code").PivotItems("(blank)") = False

Ça ne marche pas chez toi ?

Edit : Bonjour Jean-Eric!

Re,

Bonjour vba-new,

Avec ton code, tu risques une erreur si il n'y a pas de vide (blank).

'On Error Resume Next' doit être utilisé. je pense...

Cdlt.

Bonjour,

j'ai remis mon fichier de base,

Merci Jean-Eric mais même ce type de code (dans le forum que vous m'avez envoyé) ne fonctionne pas chez moi

Jean-Eric a écrit :

Avec ton code, tu risques une erreur si il n'y a pas de vide (blank).

'On Error Resume Next' doit être utilisé. je pense...

Exact

Quelque chose comme ça alors...

    On Error Resume Next
    ActiveSheet.PivotTables("PivotTable3").PivotFields("aaaaa").PivotItems("(blank)").Visible = False
    On Error GoTo 0

Re,

Essaie ainsi :

Option Explicit
'
Private Sub cmdFiltrer_Click()
Dim ws As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem

    Application.ScreenUpdating = False

    Set ws = ActiveSheet
    Set pt = ws.PivotTables(1)
    With pt
        .ClearAllFilters
        For Each pf In .PivotFields
            For Each pi In pf.PivotItems
                If pi = "(blank)" Then pi.Visible = False
            Next pi
        Next pf
    End With

    Set pt = Nothing
    Set ws = Nothing

End Sub
'
Private Sub cmdRAZ_Click()
    ActiveSheet.PivotTables(1).ClearAllFilters
End Sub
27exemple-frm-1.xlsm (124.71 Ko)

Merci beaucoup Jean-Eric !

c'est exactement ce que je veux par contre je voudrais décocher la case "vide" uniquement sur le filtre en "B4"

c'est pourquoi j'ai pensé à adapter le code comme cela :

    Option Explicit
    '
    Private Sub cmdFiltrer_Click()
    Dim ws As Worksheet
    Dim pt As PivotTable
    Dim pf As PivotField
    Dim pi As PivotItem

        Application.ScreenUpdating = False

        Set ws = ActiveSheet

        Set pt = ws.PivotTables(1)

        With pt

        If pt.PivotFields("code").pi = "(vide)" Then pi.Visible = False

        End With

        Set pt = Nothing
        Set ws = Nothing

    End Sub

Mais hélas ça ne fonctionne pas....

Re,

pas testé...

Private Sub cmdFiltrer_Click()
Dim ws As Worksheet
Dim pt As PivotTable
Dim strPF As String
Dim pi As PivotItem

    Application.ScreenUpdating = False

    Set ws = ActiveSheet
    Set pt = ws.PivotTables(1)
    strPF = "code"
    With pt
        .ClearAllFilters
        On Error Resume Next
        .PivotFields(strPF).PivotItems("(vide)").Visible = False
        ' ou (blank) si ...
        On Error GoTo 0
    End With

    Set pt = Nothing
    Set ws = Nothing

End Sub

Dsl mais ça ne fonctionne pas je ne sais pas pourquoi...

auriez vous une idée svp?

Re,

Cela fonctionne chez moi.

Regarde tes données sources

Cdlt.

23exemple-frm-1-1.xlsm (112.45 Ko)

Merci Jean-Eric,

mais vous avez retiré les sous totaux de la colonne "switch" pour y parvenir, n'est il donc pas possible d'y parvenir en laissant les sous-totaux?

Merci

Bonjour,

Ajoute le sous-total et fais le test

Cdlt.

Rechercher des sujets similaires à "decocher case tableau croise dynamique vba"