XL pour MAC Actualiser plusieurs TCD en faisant référence pour un champ à une cellule fixe : VBA ?

florestan75

XLDnaute Nouveau
Bonjour à tous,

Dans le fichier joint, onglet SYNTHESE, j'obtiens le Chiffre d'Affaires pour un projet donné pour les années 2019 et 2020, par type de catégorie de CA.
Le CA est décomposé en rubriques : "cessions", "billetterie", "coprods et correa" et "divers".

Pour avoir le total du CA de chaque rubrique pour 2019 et 2020, les cellules font référence à un TCD. Par exemple pour avoir le CA des Cessions 2019 pour le projet "TJOSHUA", en cellule E15 j'indique la formule LIRETBAB... .

Si l'utilisateur souhaite avoir le détail du CA Cessions, alors le TCD en J10 permet de voir toutes les écritures comptables correspondantes, O10 le détails des écritures du CA Billetterie ....

LE PROBLEME : Quand l'utilisateur va vouloir changer de projet pour avoir les chiffres, il devra indiquer DANS CHAQUE TCD le projet souhaité... ce qui fait un nombre important de manipulations. Ainsi, si je sélectionne un autre "PROJET" cela devient vite fastidieux pour avoir non seulement une synthèse à jour pour le projet souhaité.

QUESTION : N'est-il pas possible, en sélectionnant UNE SEULE FOIS en cellule C7 le NOM DU PROJET, que tous les autres TCD se mettent à jour (par exemple pour le CA Cessions, je mettrais J10=C7... N10=C7.... :) ... évidemment cela ne marche pas... message d'erreur : "IMPOSSIBLE d'ENTRER un formule pour élément ou un nom de champ dans un TCD". J'imagine qu'il faut une macro ou plusieurs... cela me paraît bien compliqué ?

NB : je n'en suis qu'au CA, je n'ai pas encore créé les autres TCD qui aliments les charges...

Merci de votre aide.
 

Pièces jointes

  • 2020_TEST_PL.xlsm
    762.4 KB · Affichages: 19
Bonjour florestan75, le forum

une événementielle à placer dans ton module de feuille.

Bien cordialement

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Ref_Item
    If Not Intersect(Range("C7"), Target) Is Nothing Then
        Application.ScreenUpdating = False
        On Error Resume Next
        With ActiveSheet.PivotTables("Tableau croisé dynamique15").PivotFields("PROJET")
            .ClearAllFilters
            For Each Ref_Item In .PivotItems
                If Not Ref_Item.Name = Range("C7").Value Then Ref_Item.Visible = False
            Next
        End With
        With ActiveSheet.PivotTables("Tableau croisé dynamique18").PivotFields("PROJET")
            .ClearAllFilters
            For Each Ref_Item In .PivotItems
                If Not Ref_Item.Name = Range("C7").Value Then Ref_Item.Visible = False
            Next
        End With
        With ActiveSheet.PivotTables("Tableau croisé dynamique19").PivotFields("PROJET")
            .ClearAllFilters
            For Each Ref_Item In .PivotItems
                If Not Ref_Item.Name = Range("C7").Value Then Ref_Item.Visible = False
            Next
        End With
        Application.ScreenUpdating = True
    End If
End Sub
 

Pièces jointes

  • Copie de 2020_TEST_PL.xlsm
    768.1 KB · Affichages: 5
Dernière édition:
si tu as au moins Excel 2010[et pas 2016, merci Chris], voila une solution sans macro avec segment, ne fonctionne pas sur les version antérieures
l'avantage de cette solution est de lier tous les filtres, elle autorise la multi sélection et ajoute une interface rapide de sélection d'une seule donnée.

Bien cordialement
 

Pièces jointes

  • Copie de 2020_TEST_PL.xlsm
    768.1 KB · Affichages: 8
Dernière édition:

florestan75

XLDnaute Nouveau
Bonjour florestan75, le forum

une événementielle à placer dans ton module de feuille.

Bien cordialement

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Ref_Item
    If Not Intersect(Range("C7"), Target) Is Nothing Then
        Application.ScreenUpdating = False
        On Error Resume Next
        With ActiveSheet.PivotTables("Tableau croisé dynamique15").PivotFields("PROJET")
            For Each Ref_Item In .PivotItems
                Ref_Item.Visible = True
            Next
            For Each Ref_Item In .PivotItems
                If Not Ref_Item.Name = Range("C7").Value Then Ref_Item.Visible = False
            Next
        End With
        With ActiveSheet.PivotTables("Tableau croisé dynamique18").PivotFields("PROJET")
            For Each Ref_Item In .PivotItems
                Ref_Item.Visible = True
            Next
            For Each Ref_Item In .PivotItems
                If Not Ref_Item.Name = Range("C7").Value Then Ref_Item.Visible = False
            Next
        End With
        With ActiveSheet.PivotTables("Tableau croisé dynamique19").PivotFields("PROJET")
            For Each Ref_Item In .PivotItems
                Ref_Item.Visible = True
            Next
            For Each Ref_Item In .PivotItems
                If Not Ref_Item.Name = Range("C7").Value Then Ref_Item.Visible = False
            Next
        End With
        Application.ScreenUpdating = True
    End If
End Sub
Hello Yeah, je suis toujours impressionné par la réactivité ! Je débute dans VBA ... et j'avoue que la programmation m'impressionne... ! Merci mille fois !
 

florestan75

XLDnaute Nouveau
si tu as au moins Excel 2016, voila une solution sans macro avec segment, ne fonctionne pas sur les version antérieures
l'avantage de cette solution est de lier tous les filtre, elle autorise la multi sélection et ajoute une interface rapide de sélection d'une seule donnée.

Bien cordialement
Ah ! Je n'ai pas pensé aux segments.... merci pour cette solution, plus adaptée ! Bonne soirée !
 

florestan75

XLDnaute Nouveau
Oui !!!! Cela fonctionne !
Une petite question : quand il n'y pas de valeur qui remplit la condition souhaitée dans le TCD (par exemple pas de CA Billetterie en 2020...), alors dans les cellules LIRETCD... s'affiche "
1615403223876.png
"... je peux contourner en créant dans les données des 0,0001 pour chaque ligne qui est nulle... mais peut-être existe t'il la même fonctionnalité que SI(ESTNA) ? Merci
 

chris

XLDnaute Barbatruc
Bonsoir, pourtant le fichier source dans chaque TCD est identique(j'ai testé et cela fonctionne pourtant)? merci
RE

Dans synthèse effectivement (j'avais regardé tous les TCD)

Un segment connecté aux 4 TCD fonctionne (je n'ai pas activé ni touché le VBA)

J'ai corrigé quelques formule du tableau de gauche
 

Pièces jointes

  • 2020_TEST_PL-2.xlsm
    791.8 KB · Affichages: 5

Discussions similaires