Alimenter automatiquement un filtre de TCD

Bonjour.

N'ayant pas trouvé réponse à ma question dans la section recherche je crée ce poste .

J'ai un classeur avec 3 feuilles:

  • une feuille "IMPORT" qui est une base de données
  • une feuille "TCD" où il y a un TCD crée à partir de la feuille IMPORT. Ce TCD a notamment un filtre qui est la "Ville"
  • une feuille "FILTRE" dans lequel l'utilisateur entre les villes qu'il souhaite voir apparaître comme éléments à sélectionner dans le filtre du TCD.

Mes questions sont donc:

1) Comment alimenter automatiquement le filtre du VBA en fonction de ce qu'indique l'utilisateur dans la feuille filtre.

J'ai fais un enregistrement de macro et essayé de mettre des for ou if mais j'échoue (cf l'enregistrement de macro ci -dessus)

Sub TCD()

    Range("A1:D9").Select
    Sheets.Add

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "IMPORT!R1C1:R9C4", Version:=xlPivotTableVersion12).CreatePivotTable _
        TableDestination:="Feuil6!R3C1", TableName:="Tableau croisé dynamique3", _
        DefaultVersion:=xlPivotTableVersion12

    Sheets("Feuil6").Name = "TCD"

    With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Ville")
        .Orientation = xlPageField
        .Position = 1
    End With

    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Ville"). _
        CurrentPage = "(All)"
    With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Ville")
        .PivotItems("Marseille").Visible = False
    End With

    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Ville"). _
        EnableMultiplePageItems = True

    With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Nom")
        .Orientation = xlRowField
        .Position = 1
    End With

    ActiveSheet.PivotTables("Tableau croisé dynamique3").AddDataField ActiveSheet. _
        PivotTables("Tableau croisé dynamique3").PivotFields("Salaire"), _
        "Somme de Salaire", xlSum
End Sub

2) Comment créer dynamiquement un TCD sur une nouvelle feuille, pour chaque élément différent du filtre.

Par exemple, dans mon TCD le filtre c'est la ville. Je voudrais créer une feuille avec un TCD dont le filtre vaut Paris, idem pour Marseille, et idem pour Toulouse.

Merci d'avance de votre réponse.

138filtretcd.xlsm (19.49 Ko)

Bonsoir,

Pour ton point 1, pourquoi tu ne fais pas plutot une liste des villes possibles et compléter ta base de données en utilisant une liste déroulante pour les villes. Cette manière de faire fera en sorte que ton TCD ne reprendra que les villes existantes dans ta base.

Pour le point 2, je ne vois très pourquoi tu ne fais pas plus simplement un TCD qui par défaut contiendra toutes les villes. Il te suffit ensuite de faire un copier coller du tcd existant dans une nouvelle feuille par ville et de choisir la ville dans le filtre de page. Une fois fait tu ne devras plus changer.

Juste cette pensée car je trouve plus compliqué ton option via macro mais bien entendu cela peut se faire

A te relire

Salut Dan.

Mon besoin est le suivant:

en cliquant sur un bouton, on lance une macro.

Cette macro va piocher des données avec un logiciel de business intelligence. J'arrive à piocher ces infos avec une macro mais je suis bloqué pour le traitement.

En fonction des filtres voulues et renseigné par l'utilisateur sur une des feuilles, on crée automatiquement un TCD par feuille et par

élément du filtre

Donc il y a nécessité absolue de créer une macro .

Re,

Ok merci de tes explication.

Plusieurs questions se posent si tu utilises toujours le même fichier pour alimenter ta base de données :

Si les TCD par feuille sont déjà créés et que tu fais une mise à jour de ta base de données, que doit-on faire

Si tu as un TCD par feuille avec des villes et que tu supprimes une ville dans ta feuille FILTRE, on supprime la feuille concernée ?

C’est possible de faire en automatique mais je pense que ce serait mieux de commander tout cela via un bouton placé sur ta feuille FILTRE. A voir plut tard donc.

A te relire

Edit Dan : voici déjà un code à tester

Sub TCD()
'Macro Dan le 07/06/2012
Dim plage As Range
Dim i As Byte
Set plage = Sheets("IMPORT").Range("A1:D" & Sheets("IMPORT").Range("A" & Rows.Count).End(xlUp).Row)

For i = 2 To Sheets("Filtre").Range("D" & Rows.Count).End(xlUp).Row

    Sheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = Sheets("Filtre").Range("D" & i)

    ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        plage).CreatePivotTable _
        TableDestination:=ActiveSheet.Range("A4"), _
        TableName:="TCD" & ActiveSheet.Name

    With ActiveSheet.PivotTables("TCD" & ActiveSheet.Name)
        .PivotFields("Ville").Orientation = xlPageField
        .PivotFields("Ville").CurrentPage = ActiveSheet.Name
        .PivotFields("Nom").Orientation = xlRowField
        .AddDataField .PivotFields("Salaire"), "Somme de Salaire", xlSum
    End With

Next
End Sub

Salut Dan.

Désolé si j'ai pas répondu avant en ce moment je suis un peu sous l'eau.

C'est ma faute j'aurais du donner des nouvelles.

En ce qui concerne mon problème, je l'ai résolu partiellement.

La méthodologie adoptée est la suivante:

à part les feuilles Import et Filtre, je supprime toutes les autres feuilles où il y a un TCD.

Et je crée une boucle for qui va recréer une feuille par élément de filtre, et un TCD par feuille.

J'ai adopté cette solution à mon problème original. Je te mets le début de code (je peux pas mettre la suite sinon je l'aurais fait ).

Le code qui permet de choisir un élément particulier pour filtre est la suivante ( idcf est une variable).

feuilleTCD.PivotTables("Tableau croisé dynamique3").PivotFields( _

"Centre de Frais").CurrentPage = "" & idcf & ""

 nbCf = Sheets("Accueil").Range("E1")
     For i = 1 To nbCf
        idcf = Sheets("Accueil").Range("D1").Offset(i, 0)
        Sheets.Add
        ActiveSheet.Name = "" & idcf & ""
        Set feuilleTCD = Sheets("" & idcf & "")

        Sheets("ImportRPA").Select
        Sheets("ImportRPA").UsedRange.Name = "table"

        '-------------------------------------------------------------------------------------------------------------------
        'on crée un tableau croisé dynamique va va calculer les temps d'activité, les temps d'inactivité et les temps de présence de toutes les
        'semaines

        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "table", Version:=xlPivotTableVersion10).CreatePivotTable _
        TableDestination:="" & idcf & "!R1C1", TableName:="Tableau croisé dynamique3", _
        DefaultVersion:=xlPivotTableVersion10

        With feuilleTCD.PivotTables("Tableau croisé dynamique3").PivotFields( _
            "Centre de Frais")
            .Orientation = xlPageField
            .Position = 1
        End With

        feuilleTCD.PivotTables("Tableau croisé dynamique3").PivotFields( _
        "Centre de Frais").CurrentPage = "" & idcf & ""

Par contre, je veux passer à l'étape suivante : je voudrais choisir plusieurs éléments d'un filtre (par exemple 2 parmi 3 ) et là je patine.

Tu as une idée pour ça ?

re

A voir ton code j'ai l'impression que tu n'as pas essayé ma proposition.

Pour ce qui de choisir plusieurs éléments d'un fitre, explique ce que tu veux faire car selon ta demande initiale il était question de créer des TCD en fonction des données dans ta feuille FILTRE

A te relire

Salut Dan.

Sur le forum, j'ai crée un exemple qui n'est pas le classeur dans lequel j'ai fais une macro.

Si tu regardes bien, j'ai repris la même démarche que toi. Utilisation de la boucle for et création de TCD en conséquence.

J'ai essayé d'adapter ta solution à mon problème initiale :

Mais lors de la création de TCD, j'ai eu la fameuse erreur n°5. Donc j'ai un peu remanié à ma sauce et ça a marché.

Par contre j'ai jamais compris pourquoi j'ai l'erreur n°5..

Maintenant, j'ai un 2ème besoin:

sur une même feuille, je voudrais créer un TCD et sélectionner par exemples 2 villes sur trois au niveau du filtre (par ex Paris et Marseille).

J'ai essayé de faire une boucle avec l'instruction :

feuilleTCD.PivotTables("Tableau croisé dynamique3").PivotFields( _
"Centre de Frais").CurrentPage = "" & idcf & ""

idcf étant une variable, elle prend une valeur différente à chaque tour de boucle.

Mais je n'ai pas le résultat attendu. C'est à dire que dans le filtre, je trouve que la dernière valeur prise par la variable idcf.

As-tu déjà traité ce genre de problème ?

Merci.

re,

Sur le forum, j'ai crée un exemple qui n'est pas le classeur dans lequel j'ai fais une macro.

Si tu regardes bien, j'ai repris la même démarche que toi. Utilisation de la boucle for et création de TCD en conséquence.

J'ai essayé d'adapter ta solution à mon problème initiale :

Mais lors de la création de TCD, j'ai eu la fameuse erreur n°5. Donc j'ai un peu remanié à ma sauce et ça a marché.

Par contre j'ai jamais compris pourquoi j'ai l'erreur n°5..

Avec les TCD il vaut toujours mieux avoir le classeur dont tu te sers ou tout au moins qu'il soit structuré de manière identique.

L'erreur 5 se passe sur quelle ligne ??

Ton dernier code peut être simplifié

For i = 1 To nbCf
    idcf = Sheets("Accueil").Range("D1").Offset(i, 0)
    Sheets.Add.Name = "" & idcf & ""
    Set feuilleTCD = Sheets("" & idcf & "")
    Sheets("ImportRPA").UsedRange.Name = "table"

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "table", Version:=xlPivotTableVersion10).CreatePivotTable _
    TableDestination:="" & idcf & "!R1C1", _
    TableName:="Tableau croisé dynamique3"

With feuilleTCD.PivotTables("Tableau croisé dynamique3").PivotFields("Centre de Frais")
    .Orientation = xlPageField
    .CurrentPage = "" & idcf & ""
End With

N'oublie pas de déclarer tes variables i, nbcf et idcf

Par contre, je veux passer à l'étape suivante : je voudrais choisir plusieurs éléments d'un filtre (par exemple 2 parmi 3 ) et là je patine. Tu as une idée pour ça ?

Mets moi un fichier que je puisse voir ce que tu veux et surtout comment tu procèdes ou explique moi par rapport au fichier que tu as mis en ligne.

L'erreur n°5, je l'ai eu à la création du TCD.

Par exemple, exécutes le code présent dans le post https://forum.excel-pratique.com/post176176.html#p176176.

T'obtiendras l'erreur n°5, mais j'ai jamais compris pourquoi.

Pour mes variables t'inquiètes pas je les utilise jamais sans les déclarer: pour moi c'est la première étape dans le code.

Pour que tu comprennes bien, j'ai expliqué dans le nouveau classeur joint.

Dans la feuille "CahierDesCharges" , je t'ai mis des images pour expliquer ce que je veux.

Merci.

182filtretcd.xlsm (279.89 Ko)

Re

Plus haut tu disais que tu voulais une feuille par ville avec un TCD sur chaque feuille. Ici dans ton dernier post et fichier j'ai l'impression que tu changes, à savoir que tu veux un TCD avec dans le filtre du champ de page les villes de ta feuille FILTRE.

Merci d'expliquer quelle solution tu cherches et d'essayer ce que je t'ai proposé avant (une feuille par ville avec un TCD)

Ton erreur 5 est solutionnée sur l'autre fil.

A te relire.

Plus haut tu disais que tu voulais une feuille par ville avec un TCD sur chaque feuille.

Oui est ça c'est bon.

Ici dans ton dernier post et fichier j'ai l'impression que tu changes, à savoir que tu veux un TCD avec dans le filtre du champ de page les villes de ta feuille FILTRE.

Maintenant j'ai un autre besoin qui est dans une même feuille de créer un TCD avec un filtre, et les éléments du filtre sont rentrés par l'urilisateur dans une feuille.

Regardes le code que j'ai fais et je t'explique l'endroit où c'est pas bon.

Sub TCD()
    Dim import As Worksheet
    Dim ftcd As Worksheet
    Dim fFiltre As Worksheet
    Dim i As Integer

    Application.DisplayAlerts = False

    Sheets("TCD").Delete
    Sheets("IMPORT").Select

    Sheets.Add
    ActiveSheet.Name = "TCD"

    Set ftcd = Sheets("TCD")
    Set fFiltre = Sheets("Filtre")

    'je crée le TCD dans la feuille TCD à partir de l'import

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "IMPORT!R1C1:R25C4", Version:=xlPivotTableVersion12).CreatePivotTable _
        TableDestination:="TCD!R1C1", TableName:="Tableau croisé dynamique3", _
        DefaultVersion:=xlPivotTableVersion12

    'pour mon tcd je choisis la ville comme filtre de TCD

    With ftcd.PivotTables("Tableau croisé dynamique3").PivotFields("Ville")
        .Orientation = xlPageField
        .Position = 1
    End With

[color=#FF0000]    'je fais une boucle qui parcourt les éléments que je veux mettre dans le filtre du Tcd et ces éléments
    'sont dans la feuille Filtre
    'problème: même si je fais une boucle, seul le dernier élément parcouru est pris en compte dans le filtre[/color]

    For i = 2 To fFiltre.Range("D65000").End(xlUp).Row
      ftcd.PivotTables("Tableau croisé dynamique3").PivotFields("Ville"). _
         CurrentPage = "" & fFiltre.Cells(i, 4) & ""
    Next i

    With ftcd.PivotTables("Tableau croisé dynamique3").PivotFields("Nom")
        .Orientation = xlRowField
        .Position = 1
    End With

    ftcd.PivotTables("Tableau croisé dynamique3").AddDataField ActiveSheet. _
        PivotTables("Tableau croisé dynamique3").PivotFields("Salaire"), _
        "Somme de Salaire", xlSum
End Sub

si t'as d'autre question n'hésites pas .

50filtretcd.xlsm (283.29 Ko)

T'as des pistes DAN ou les autres ?

re,

Non je ne suis pas sur d'autres pistes mais à voir les codes que tu places, j'ai l'impression que tu travailles de ton coté sans regarder ce que je te propose. Alors pour te dire vrai à quoi bon m'occuper de chercher puiqu'il faut à chaque reprise recommencer.

Maintenant j'ai un autre besoin qui est dans une même feuille de créer un TCD avec un filtre, et les éléments du filtre sont rentrés par l'urilisateur dans une feuille.

C'est la même question qu'au début de ce fil non ?

Prends ce que je t'ai proposé dans ce post --> Jeu Juin 07, 2012 11:35 am

Bonjour,

Je déterre ce topic dont le besoin était d'avoir un TCD dont le filtre s'automatise en fonction des ville renseignée dans une autre feuille.

J'ai crée un topic personnel pour un sujet similaire, mais celui-ci n'ayant pas encore trouvé réponse, je voulais savoir si FlyEmirate avait trouvé solution à son problème.

pour info mon topic :

https://forum.excel-pratique.com/excel/macro-filtre-choix-multiple-tcd-t32709.html

Re

Pourquoi poster dans ce fil parce que l'on ne té réponds pas sur l'autre.

Tu aurais pu simplement faire référence à ce fil sur ton fil et le faisant remonter.

Là cela risque de mettre le souc .... et que l'on te réponde ici plutôt que sur l'autre.

Merci de laisser ce sujet pour la demande de Flyermirates.

Amicalement

Rechercher des sujets similaires à "alimenter automatiquement filtre tcd"