Condition VBA sur un filtre pour un TCD

Bonjour,

Je n'arrive pas à appliquer une condition sur VBA pour que quand mon TCD a une valeur nulle il me la décoche du filtre et s'il n'en a pas qu'il ne fasse rien. Le TCD se trouve dans la feuille GCD et la macro dans macro puis modifier GDC.

Merci d'avance.

33test.xlsm (203.50 Ko)

Bonjour

Remplace ton code par celui-ci :

Sub Macro1()
'Macro Dan
Dim pi As PivotItem

   For Each pi In ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Années").PivotItems
        If pi.DataRange = 0 Then pi.Visible = False Else: pi.Visible = True
   Next

End sub

Attention aux accents, vérifie bien qu'ils sont en correspondance avec les données de ton fichier car je pense que tu es sous MAC à la vue du fichier posté

Si ok, clique sur le V vert à coté du bouton EDITER pour cloturer le fil lors de ta réponse

Amicalement

Je test ce soir merci pour ton aide

Bonjour,

Bonjour Dan,

Un seconde proposition.

Même remarque pour les caractères accentués (à éviter dans VBE).

Cdlt

18test-jep.xlsm (211.52 Ko)
Public Sub GCD()
Dim ws As Worksheet, pt As PivotTable, pi As PivotItem

    Application.ScreenUpdating = False

    Set ws = Worksheets("GCD")
    Set pt = ws.PivotTables(1)

    pt.RefreshTable
    pt.PivotFields("Années").ClearManualFilter

    For Each pi In pt.PivotFields("Années").PivotItems
        If pi.DataRange = 0 Then pi.Visible = False
    Next

    ws.Activate
    [A1].Select

    Set pt = Nothing
    Set ws = Nothing

End Sub

Pour les deux propositions sa me bloque la :

Dans mon filtre au niveau de l'année il m'affiche pas 0 mais rien, c'est donc les cellules vide que je souhaite décocher dans le filtre. Je vous joint l'exemple

 If pi.DataRange = 0 Then
28exemple.xlsm (212.86 Ko)

Re

essaie comme ceci

Sub GCD()
'Macro Dan
Dim pi As PivotItem
Sheets("GCD").Activate
With ActiveSheet.PivotTables("Tableau croisé dynamique1")
.PivotCache.Refresh
   For Each pi In .PivotFields("Années").PivotItems
        On Error Resume Next
        If pi.DataRange = 0 Then pi.Visible = False Else: pi.Visible = True
   Next
End With
End Sub

Autre chose, je vois que tu conserves les anciennes données dans ton TCD alors qu'elles n'existent plus dans ta datables.

Pour éviter cela, clique droite dans le TCD et choisir "Option du tableau croisé...". Une fois fait clique sur l'onglet "données" puis décoche la case "conserver les éléments supprimés"

Le fait de faire cela raccourcira le temps d'exécution de ta macro

A te relire

Crdlt

Sa fonctionne merci beaucoup

Re,

Code à copier en lieu et place du précédent.

Voir modification principale apportée (surlignage)

Cdlt.

Public Sub GCD()
Dim ws As Worksheet, pt As PivotTable, pi As PivotItem

    Application.ScreenUpdating = False

    Set ws = Worksheets("GCD")
    Set pt = ws.PivotTables(1)

    pt.RefreshTable
    pt.PivotFields("Années").ClearManualFilter
    On Error Resume Next
    pt.PivotFields("Années").PivotItems("(blank)").Visible = False
    On Error GoTo 0

    'Solution initiale
    'For Each pi In pt.PivotFields("Années").PivotItems
    'If pi.DataRange = 0 Then pi.Visible = False
    'Next

    ws.Activate
    [A1].Select

    Set pt = Nothing
    Set ws = Nothing

End Sub

Bonsoir,

Dan, ta formule présente un petit problème quand je clique sur l'image et que je met 20 dans Années dans le userform, je valide et je clique sur le bouton GCD sa me met bien jusqu'à 2033 dans le TCD. Puis si je met 10 ans dans le userform et que je fait les meme manipes sa me met bien 2023 dans le TCD c'est seulement quand je remet 20 ans dans le userform que sa reste à 2023. Sa me recoche pas les années de 2023 à 2033.

30exemple.xlsm (216.55 Ko)

Re,

Dans le code GCD, rajoute l'instruction ci-dessous juste avant .PivotCache.Refresh

.ClearAllFilters

A te relire

Crdlt

Super merci

Bonsoir,

J'ai un problème, je ne comprends pas pourquoi la formule fonctionne sur excel 2011 (Mac) mais je l'ai testé sur excel 2010 et au lieu de me décocher les cellules vides sa me décoche tout sauf les cellules vides. Si vous avez une réponse à m'apporter.

Merci d'avance


J'ai oublier de joindre le fichier

26exemple.xlsm (212.63 Ko)

Bonjour,

Supprime tous les accents de tes mots, pour commencer, dans les codes et noms de feuilles, les espaces indésirable aussi,etc...

Cdlt.

Re,

Je t'avais dit dans mon post précédent ....

Attention aux accents, vérifie bien qu'ils sont en correspondance avec les données de ton fichier car je pense que tu es sous MAC à la vue du fichier posté

Au risque de répéter ce que Jean Eric dit, supprime tous les accents partout. Avec VBA il faut oublier les ponctuations... et les espaces... Sinon que des soucis qui arrivent

Crdlt

Mais pour le nom des colonnes sur mon tableau je dois enlever les espaces ? Ou faut que je remplace l'espace par un caractère ?

Bonjour,

Suite et fin.

Cdlt.

34exemple.xlsm (215.29 Ko)

Bonjour,

Cela fonctionne seulement s'il y a une seule colonne cochée dans mon TCD à partir du moment ou je coche une autre colonne sa fonctionne plus, le filtre me décoche tout. Auriez-vous une idée d'où cela pourrais provenir ?

re

Cela fonctionne seulement s'il y a une seule colonne cochée dans mon TCD à

Heu pas sur d'avoir compris par rapport à ton fichier

Il n'y a qu'une seule colonne dans le TCD à savoir les années. Si ton TCD est différent de celui de ton fichier, cela ne fonctionnera pas évidemment

A te relire pour d'autres explications

Crdlt

Bonjour à tous,

Suite à de nombreuses recherche sur internet, je me suis inscrit sur ce forum car je n'ai pas trouvé de solutions à mon problème.

Je ne sais pas si je suis dans le bon topic, mais j'ai lu plusieurs intervention de Dan qui semble calé sur le sujet des filtres sur TCD.

Débutant en VBA Voici mon problème :

J'ai un onglet BDD qui alimentent des TCD sur 7 onglets différents ( 2 TCD par onglet).

Je chercher à automatiser les filtres (le même sur chaque TCD) : le mois.

Par exemple : j'ai mes données pour les mois de Juillet à février mais je souhaiterai rajouter le mois de mars sans aller dans les filtre de chaque TCD.

Voila ce que j'ai fait pour l'instant :

Sub Macro3()

Dim i As Integer
Dim mois As String
mois = ("juillet","août" , "septembre" , "octobre" , "novembre" , "décembre" , "janvier" , "février") 'Ici je ne sais pas si une fonction existe pour récuperer plusieurs champs

Application.ScreenUpdating = False
     For i = 1 To 14

        ActiveSheet.PivotTables("TCD" & i).PivotFields ("Libellé du mois")'je ne sais pas si il existe autre chose que activesheet pour sélectionner plusieurs onglets à la fois
        With ActiveSheet.PivotTables("TCD" & i).PivotFields("Libellé du mois")' je veux seulement changer le filtre des mois
        .PivotItems("juillet").Visible = True
        .PivotItems("août").Visible = True
        .PivotItems("septembre").Visible = True
        .PivotItems("octobre").Visible = True
        .PivotItems("novembre").Visible = True
        .PivotItems("décembre").Visible = True
        .PivotItems("janvier").Visible = True
        .PivotItems("février").Visible = True

'si j'ai juste juste le mois à rajouter dans le code à chaque MAJ cela me convient, mais l'idéal serait que cela se reporte à une table dans un autre onglet, j'ai vu d'autres sujets la dessus mais ct relatif à un champ unique (cela irait si je ne voulais que janvier par exemple) mais si je veux plusieur mois je n'y arrive pas

    End With
    Next
End Sub

Le probème est que j'ai 7 onglets différents avec des TCD ...

Si vous pouviez m'aider ce serait super

n'hésitez pas si vous avez des questions

Merci d'avance

Bonjour,

Il manque un certain nombre d'informations avant que nous puissions t'apporter une aide.

A savoir, Les 14 TCDs sont-ils une source commune? Le champ mois, est dans le rapport du filtre, en étiquettes de lignes ou de colonnes? etc...

Il faudra certainement déclarer un TCD maître, pour l'actualisation des autres TCDs.

Bon, il faudrait aussi joindre un classeur exemple, qui représente correctement ta problématique.

Cdlt.

Nota : Tu travailles avec Exel 2010. Si tes TCDs ont une source commune, regarde l'utilisation des segments (slicers).

Rechercher des sujets similaires à "condition vba filtre tcd"