Macro pour trier des données d'un TCD

Bonjour,

Je possède dans un tableau croisé dynamique un filtre nommé postes techniques. Cependant, tous les postes techniques ne me sont pas nécessaire, et j'aimerai éviter de les choisir manuellement.

J'aimerai donc réaliser une macro qui sélectionnerait uniquement les postes techniques voulus, et si aucun des postes techniques voulus ne sont présents dans le filtre, faire en sorte que le filtre reste vide, qu'il désélectionne toutes les données !

Je ne m'y connais absolument pas en programmation mais j'ai quand même tenté quelques trucs :

Sub Test()

On Error GoTo Error

    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields( _
        "Poste technique").ClearAllFilters
    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields( _
        "Poste technique").CurrentPage = "AB-00050"

If ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields( _
        "Poste technique").CurrentPage <> "AB-00054" Then
    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields( _
        "Poste technique").CurrentPage = "vide"
        End If

Error:
Resume Next
End Sub

J'ai fais un test "manuel" en faisant lire le TCD le poste technique AB-00050, alors qu'il cherche uniquement le poste AB-00054.

Comme les deux données ne sont pas identiques, j'aimerai qu'il désélectionne toutes les données du filtre, ce qui évidemment n'est pas le cas dans mon exemple.

Ici AB-00050 prend uniquement la valeur "vide".

En gros, j'aimerai lui indiquer les postes techniques qu'il peut cocher, et ne rien faire s'ils ne correspondent pas. Et j'aimerai tant qu'à faire qu'il le fasse automatiquement au fur et à mesure que le tableau de données se complète.

J'espère avoir était suffisamment clair. Ce n'est pas vraiment facile à expliquer à l'écrit.

Je suis à votre disposition pour toutes autres informations !

bonjour

utilise un "segment"

https://msdn.microsoft.com/fr-fr/library/gg399135(v=sql.110).aspx

existe aussi pour les "tableaux" simples

pas de macro

Merci pour votre réponse !

Cependant le segment n'est qu'une amélioration visuelle du filtre, et ne change en rien mon problème. Ou alors je n'ai pas tout compris !

Car si mon document source venait à être mis à 0, les filtres existants seraient supprimés, et je devrai à nouveau tous les sélectionner à la main au fur et à mesure...

Le document source sur lequel je travail est mis à jour en continu en réceptionnant ses données à partir d'un logiciel. Chaque fois qu'une nouvelle donnée est insérée, le tableau crée une donnée unique au filtre "Poste technique", et c'est celle-ci que je cherche à trier.

Je connais d'avance les données recherchées, mais il se peut qu'au cours d'une année elles n'interviennent pas dans les interventions, ou au contraire de nombreuses fois.

Vérifier à chaque fois si elles sont sorties du logiciel ou non prendrait un temps considérable pour juste cocher la case du filtre qui influe sur les résultats attendus, toujours sans être sur qu'elle sorte un jour...

C'est pour cela que je souhaitais à l'aide de la programmation définir à l'avance, les données que le filtre doit accepter, ou non.

Si malheureusement il n'y a aucune option, je serai bien obligé de le faire à la main à chaque remise à 0.

Bonjour

peux tu joindre un "onglet de base" du TCD et une liste des postes à sélectionner

Cordialement

FINDRH

Bonjour,

La liste des postes à sélectionner est par exemple :

CD-480

CD-48000

CD-48000SEPA

CD-48005

CD-48005FILT

CD-48010

CD-48010MOTE

Grosso modo c'est de CD-480 à CD-481, mais il y a des exceptions, et la liste est assez longue.

Qu'entendez vous par onglet de base ?

La feuille Excel avec uniquement l'onglet poste technique ?

La base qui sert au TCD pour rapprocher les postes du TCd de ta liste complète

Macro qui pose la formule et met par exemple 1 s'il faut sélectionner ou 2 pour ne pas reprendre la ligne dans le TCD

Bonjour,

Merci de joindre un fichier représentatif (anonymisé si besoin).

Cordialement.

Bonjour,

je ne peux malheureusement pas joindre le fichier Excel. Il est beaucoup trop lourd. Idem pour le fichier source.

Bonjour

Et si tu envoyais une petite partie de tes deux fichiers 10 lignes pour le résultat ,100 lignes pour la base ?

FINDRH

Bonjour,

Voilà la feuille simplifiée au maximum.

La base contient une dizaine de ligne, et le tableau croisé dynamique avec uniquement le filtre poste technique, celui qui m'intéresse.

Ce que j'aimerai réussir à réaliser, c'est que si l'on vient à ajouter dans le tableau des nouveaux postes techniques, il les active automatiquement dans le filtre, UNIQUEMENT si il fait parti de ceux que l'on recherche.

Disons par exemple sur cette feuille que les postes recherchés sont AB-XXXX et AB-ZZZZ qui lui est inexistant.

Les autres postes sont inutiles.

Je cherche à réaliser la macro qui permet de cocher uniquement les postes AB-XXXX et AB-ZZZZ en ignorant les autres. Si aucun d'entre eux n'est présent dans la base, le filtre postes technique du TCD doit rester vide.

Lorsque AB-ZZZZ est ajouté à la base, qu'il apparaisse et se coche automatiquement dans le filtre.

Je ne sais pas si c'est possible ?

Merci d'avance !

32exemple2.xlsx (16.43 Ko)

bonjour

1- créer une liste des postes que tu cherches

2- dans le tableau d'origine, créer une colonne tout à droite avec =SI(ESTNA(EQUIV(colonneduposte;la liste;0));1;0) pour tester si le poste figure dans la liste.

3- mettre cette info dans une synthèse du TCD, filtrer sur 1 ou sur 0 (plus simple que l'ancien filtre avec clic sur chaque poste)

Bonjour,

je te propose un exemple avec une liste prédéfinie pour filtrer un champ de page.

Cdlt.

Option Explicit

Private Sub Worksheet_Activate()
Dim wsList As Worksheet
Dim rCell As Range, rngList As Range
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem

    Application.ScreenUpdating = False
    '------------------------------------------------------
    Set wsList = ActiveWorkbook.Worksheets("Liste")
    Set rngList = wsList.ListObjects(1).DataBodyRange
    Set pt = Me.PivotTables(1)
    Set pf = pt.PageFields("Poste")
    '------------------------------------------------------
    With pt
        .ManualUpdate = True
        .PivotCache.MissingItemsLimit = xlMissingItemsNone
        .RefreshTable
    End With
    '------------------------------------------------------
    With pf
        .ClearAllFilters
        .EnableMultiplePageItems = True
    End With
    '------------------------------------------------------
    For Each pi In pf.PivotItems
        Set rCell = rngList.Find _
                    (what:=pi.Name, _
                     LookIn:=xlValues, _
                     lookat:=xlWhole)
        If rCell Is Nothing Then pi.Visible = False
    Next pi
    '------------------------------------------------------
    Application.ScreenUpdating = True
    pt.ManualUpdate = False
    '------------------------------------------------------
    Set rCell = Nothing: Set rngList = Nothing
    Set pf = Nothing: Set pt = Nothing
    Set wsList = Nothing

End Sub

Bonjour

une contribution plus modeste à tester avec deux tableaux dynamiques et une macro artisanale pour le TCD

Cordialement

FINDRH

40base-tcd.xlsm (38.61 Ko)

Bonjour,

Merci pour votre aide à tous les 3 !

J'ai réussi à réaliser quelque chose qui tient à peu près la route. Ca suffira pour le moment !

Rechercher des sujets similaires à "macro trier donnees tcd"