XL 2010 [Résolu] Lier un filtre TCD à une cellule

Spinzi

XLDnaute Impliqué
Bonjour à tous,

j'ai cherché et trouvé des discussions liées à mon problèmes, mais je n'arrive pas à les mettre en œuvre.
Vous trouverez des essais VBA dans en module et dans ma feuille.

Mon problème :
Je souhaite que lorsque la cellule K2 renvoie 2, alors mon TCD se filtre grâce à une valeur renseignée en A1 et qui vient filtrer le champ "Emballage" de mon tcd nommé "TCDTest".

Merci d'avance pour vote aide
 

Pièces jointes

  • Cout et recette VTest.xlsm
    39.5 KB · Affichages: 124
Dernière édition:

Spinzi

XLDnaute Impliqué
Re : Lier un filtre TCD à une cellule

Bonjour,

parce que ce n'est pas mon besoin, sinon j'aurai aussi mis un segment comme pour les libellés.
Enfait dans ma base emballage je peux choisir soit l'uvc (tout ce qui compose l'emballage - matériau principal et bouchon par exemple) ou alors seulement les données relatives au matériau principal.
En cochant "matériau principal" je souhaite que le TCD se filtre encore plus finement grace à la cellule A1 qui renvoie le type d'emballage du matériau principal).

Bien à vous
 

chris

XLDnaute Barbatruc
Re : Lier un filtre TCD à une cellule

Re

Cela revient strictement au même et est moins lisible mais si tu tiens au VBA
Code:
Sub filtre()
Application.ScreenUpdating = False
    With ActiveSheet.PivotTables("TCDTest").PivotFields("Emballage")
    If .Parent.Parent.Range("K2") = 1 Then
        .ClearAllFilters
    Else
        On Error GoTo Fin
        Application.EnableEvents = False
        For Each p In .PivotItems()
            If p.Name = .Parent.Parent.Range("a1").Value Then
                p.Visible = True
            Else
                p.Visible = False
            End If
        Next
    End If
    End With
Fin:
    Application.EnableEvents = True
End Sub
 
Dernière édition:

Spinzi

XLDnaute Impliqué
Re : Lier un filtre TCD à une cellule

Chris,


Je suis totalement d'accord avec vous que les solutions standards qui evitent le developpement sont bien plus facile à gérer.
ici il y a aussi une histoire d'utilisateur, ce qui vient tout chambouler.

Cela dit je même avec votre code rien ne se passe.
Le code est bien a placé dans le module ? Dois je garder le code dans la feuille ?

Merci d'avance
 

chris

XLDnaute Barbatruc
Re : Lier un filtre TCD à une cellule

Re

Le code fonctionne c'est juste que l'article choisi n'existe qu'en un exemplaire donc filtré ou pas ne change rien.

Si on met Bouteille en A1 on voit la différence : 1 ligne dans un cas et deux dans l'autre.
 

Spinzi

XLDnaute Impliqué
Re : Lier un filtre TCD à une cellule

Re,

je ne pense pas avoir saisi votre remarque.
Toujours est-il (voir mes questions dans mon post precedents) que rien ne se passe meme lorsque je change ma cellule A1.
Le code que vous m'avez donné est bien a implémenter dans un module ?
Faut-il que je supprime le code qui appelle cette fonction filtre dans ma feuille de synthèse ?

Peut être que ma demande n'est pas claire : je souhaite pouvoir ajouter un filtre supplémentaire si par exemple je choisi un pot de confiture avec couvercle en a1, je souhaite que, après avoir choisi mon pot de confiture dans le segment, que seul el couvercle aparaisse.

Merci encore,
Bonne soirée
 

Spinzi

XLDnaute Impliqué
Re : Lier un filtre TCD à une cellule

Bonjour,

merci pour votre fichier.
Effectivement cela fonctionne, mais j'ai l'impression que le contrôle de formulaire qui permet de modifier la cellule K2 (1 ou 2 lié a ce que l'on choisit de cocher) ne fonctionne pas très bien avec le Worksheet_Change (peut êtr ece pourquoi vous avez rajouté une liste de validation sur cette cellule ?).
Avez vous une solution pour que le worksheet_change fonctionne simplement grâce au cochage des contrôles de formulaire ?

ps : je me suis arrangé pour éviter les controles de formulaire en implémentant du widings
Code:
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)

 If Not Intersect(Target, Range("K4")) Is Nothing And Target.Count = 1 Then
     Target = "¤"
     [M4] = "¡": [K2] = 1
End If

If Not Intersect(Target, Range("M4")) Is Nothing And Target.Count = 1 Then
     Target = "¤"
     [K4] = "¡": [K2] = 2
End If

End Sub

Maintenant c'est ok pour moi.

Merci encore
 
Dernière édition:

chris

XLDnaute Barbatruc
Re : Lier un filtre TCD à une cellule

Bonjour

Les changements de valeur d'une cellule liée à un contrôle de formulaire n'est pas pris en compte par worksheet_change.

Utilise plutôt des activeX associés à du code.
 

Pièces jointes

  • Cout et recette VTest.xlsm
    44.2 KB · Affichages: 52

Spinzi

XLDnaute Impliqué
Re : Lier un filtre TCD à une cellule

Re,

je suis allé trop vite en besogne : j'aimerai que le TCD se mette à jour automatiquement lorsque je modifie ma cellule A1.
Car si je mets Boite en A1 et que je selectionne Acier, j'ai bien le résultat escompté.
Par contre si je modifie A1 en Couvercle et que je sélectionne le pot de confiture, rien n'apparait.

j'ai essayé d'intégrer un
Code:
ActiveSheet.PivotTables("TCDTest").PivotCache.Refresh
mais je pense l'avoir mal placé.

Merci à vous
 

Pièces jointes

  • Cout et recette VTest1.xlsm
    37.6 KB · Affichages: 51

chris

XLDnaute Barbatruc
Re : Lier un filtre TCD à une cellule

RE

Il me semble que c'est le cas dans mon exemple du #10...

Edit : si tu modifies le segment après A1, il faut aussi gérer l'évènement lié au changement dans le segment car le filtre ne se relance pas dans ce cas.
C'est bien ce que j'expliquais au départ : vouloir réinventer par VBA ce qui se fait de façon simple dans Excel, nécessite de bien poser tous les cas avant de coder
 
Dernière édition:

Spinzi

XLDnaute Impliqué
Re : Lier un filtre TCD à une cellule

Oui c'est exactement ça,

il faut aussi prendre en compte le changement de sélection du segment.
Je ne suis pas très doué en VBA : je ne réinvente que parce que j'y suis obligé ! ca ne m'amuse pas plus que ça de développer des solutions qui existent en standard.

Merci de m'aider à prendre en compte tous les cas :
_La cellule A1 va chercher dans le tableau emballage le matériau principal (c'est la première ligne de chaque emballage, donc un index equiv suffit)
_La cellule A1 sera donc modifiée à chaque fois qu'un nouvel élément dans le segment sera sélectionné
_Les cellules ou contrôles en K3 et M3 servent seulement à dire si oui ou non il faut filtrer le tableau (UVC on veut tous les emballages; matériau principal on veut le matériau principal de l'emballage).

le code présent dans mon fichier n'est que le reflet de ce que j'ai trouvé sur la toile et essayé d'adapter à mon cas. il est perfectible et peut être optimisé si vous avez une meilleure idée de comportement.

Bien à vous
 

Spinzi

XLDnaute Impliqué
Re : Lier un filtre TCD à une cellule

Voici mon fichier à l'heure actuelle.
Il y a un onglet "Selection" qui me permet de retourner le choix effectué dans le segment.
 

Pièces jointes

  • Cout et recette VTest2.xlsm
    48.1 KB · Affichages: 69

chris

XLDnaute Barbatruc
Re : Lier un filtre TCD à une cellule

Bonjour

Il faut gérer l'évènement Worksheet_PivotTableUpdate et adapter le code du filtre.

Cependant je persiste à penser que c'est inutilement compliquer les choses.
Tu utilises un TCD mais tu commences à rajouter un second TCD pour alimenter A1, des formules à côté du TCD...

Tu vas à nouveau devoir bidouiller pour ta gestion de coût.

En ajoutant une colonne Matériau principal à ta source avec un X (ou autre, manuellement ou par une formule) sur la ligne concernée de chaque produit on peut travailler cet aspect avec un segment sans VBA.

Je te joins l'exemple.

Mais comme déjà dit, il faut analyser le projet dans son ensemble avant de construire la solution car sinon on perd la cohérence outre les complications inutiles.
 

Pièces jointes

  • Cout et recette VTest_segments.xlsx
    29.4 KB · Affichages: 93

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 088
Membres
103 116
dernier inscrit
kutobi87