Lier des segments issus de 2 sources de données différentes

Bonjour,

J'ai un tableau de bord avec :

- 1 onglet "Données"

- 1 onglet "Données_Chg"

- 1 onglet TCD

Donc 2 sources de données. J'utilise les segments pour que cela soit plus rapide et facile à utiliser, mais je ne parviens pas à lier les 3 segments de la source "Données_Chg" aux 3 segments de la sources "Données".

Le code plante lorsque je clic sur un segment :

Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
   If Sh.Name = "TCD" And Target.Name = "Tableau croisé dynamique1" Then
        Application.EnableEvents = False
        'ligne suivante à répéter pour chaque autre segment en adaptant le nom
        ActiveWorkbook.SlicerCaches("Segment_Société").ClearManualFilter
        ActiveWorkbook.SlicerCaches("Segment_Année").ClearManualFilter
        ActiveWorkbook.SlicerCaches("Segment_Mois").ClearManualFilter
        For Each Iitem In ActiveWorkbook.SlicerCaches("Slicer_Zone").SlicerItems
        'ligne suivante à répéter pour chaque autre segment en adaptant le nom
             ActiveWorkbook.SlicerCaches("Segment_Société").SlicerItems(Iitem.Name).Selected = Iitem.Selected
             ActiveWorkbook.SlicerCaches("Segment_Année").SlicerItems(Iitem.Name).Selected = Iitem.Selected
             ActiveWorkbook.SlicerCaches("Segment_Mois").SlicerItems(Iitem.Name).Selected = Iitem.Selected
        Next
        Application.EnableEvents = True
    End If
End Sub

L'erreur vient à la ligne

For Each Iitem In ActiveWorkbook.SlicerCaches("Slicer_Zone").SlicerItems

Je pense que cela vient de "Slicer_Zone", pouvez-vous me dire comment changer svp ? (désolé toujours noob en VBA).

Bonjour,

Sans détails sur l'erreur ni fichier difficile d'etre précis. Quelques pistes de résolution :

Vérifiez que ActiveWorkbook.SlicerCaches("Slicer_Zone") existe bien (assignez une variable et regardez là dans l'explorateur d'objets).

Si vous avez Option Explicit, vous devez Dim Iitem as Variant

Sinon, veuillez joindre un fichier et au minimum un screenshot de l'erreur en question.

Désolé je ne peux pas joindre de fichier car il contient des données sensibles (nom, prénom, numéro de sécu....).

Voici le messager d'erreur :

image image

le problème vient bien de cette ligne mais je vois pas par quoi remplacer....

Écrivez

Dim a

a = ActiveWorkbook.SlicerCaches("Slicer_Zone")

Juste avant la ligne en jaune, et relancer votre macro. Si la nouvelle ligne devient jaune alors cela veut dire que l'objet SlicerCaches nommé "Slicer_Zone" n'existe pas. Vous devez revoir son nom.

Pour le fichier vous pouvez le joindre en supprimant les données sensibles. Ce qui compte c'est le nom de vos tableaux et les macros.

Merci pour l'aide, en effet cela plante sur la nouvelle ligne :

image

Je me doutais bien que ("Slicer_Zone") n'existait pas mais je ne vois pas quoi mettre à la place.

En pièce jointe le fichier anonymisé.

D'avance merci !

Bonjour,

Si quelqu'un a une idée car je vais avoir une 3ème source de données... le but étant de ne modifier les segments qu'une seule fois.

D'avance merci

Solution de contournement, j'ai mis en place une page de garde avec des logos. Puis affectation d'une macro au logo, qui va du coup piloter les segments.

Cela fonctionne très bien mais l'actualisation des données est très longue !!

Je pense que le code VBA est largement perfectible pour gagner du temps mais je ne vois pas comment :

Sub SOCIETE1()

' SOCIETE1 Macro

  ActiveWorkbook.RefreshAll

  Dim tblPivot As PivotTable
  For Each tblPivot In ActiveWorkbook.PivotTables
     tblPivot.RefreshTable
  Next tblPivot

  Dim Iitem As Variant
  Dim i As Integer

  Application.EnableEvents = False
  ActiveWorkbook.SlicerCaches("Segment_Société").ClearManualFilter
  ActiveWorkbook.SlicerCaches("Segment_Société1").ClearManualFilter
  ActiveWorkbook.SlicerCaches("Segment_Société2").ClearManualFilter

  For Each Iitem In ActiveWorkbook.SlicerCaches("Segment_Société").SlicerItems
     ActiveWorkbook.SlicerCaches("Segment_Société").SlicerItems("SOCIETE1").Selected = True
     ActiveWorkbook.SlicerCaches("Segment_Société").SlicerItems("SOCIETE2").Selected = False
     ActiveWorkbook.SlicerCaches("Segment_Société").SlicerItems("SOCIETE3").Selected = False
     ActiveWorkbook.SlicerCaches("Segment_Société").SlicerItems("SOCIETE4").Selected = False
     ActiveWorkbook.SlicerCaches("Segment_Société").SlicerItems("SOCIETE5").Selected = False
  Next Iitem

  For i = 1 To 2
   For Each Iitem In ActiveWorkbook.SlicerCaches("Segment_Société" & i).SlicerItems
      ActiveWorkbook.SlicerCaches("Segment_Société" & i).SlicerItems("SOCIETE1").Selected = True
      ActiveWorkbook.SlicerCaches("Segment_Société" & i).SlicerItems("SOCIETE2").Selected = False
      ActiveWorkbook.SlicerCaches("Segment_Société" & i).SlicerItems("SOCIETE3").Selected = False
      ActiveWorkbook.SlicerCaches("Segment_Société" & i).SlicerItems("SOCIETE4").Selected = False
      ActiveWorkbook.SlicerCaches("Segment_Société" & i).SlicerItems("SOCIETE5").Selected = False
   Next Iitem
  Next

  Application.EnableEvents = True

End Sub

Mais en tout cas cela fonctionne. Pour info j'ai aussi fait de meme pour choisir le mois et l'année (en plus de la société), idem cela fonctionne mais le temps de rafraichissement est encore plus long !! Dernier essai fait, toutes les sociétés et tous les mois, Excel à mis plus de 3 minutes à rafraichir les infos.

Bonjour

Il suffit de compiler les 2 tables via PowerQuery de façon à avoir une source unique, une colonne précisant la source, pour que tous les TCD/GCD aient une source unique et donc des Segments communs.

Cela oblige

  • soit à refaire tes TCD/GCD directement à partir de la requête,
  • soit récupérer la compilation dans un onglet, puis modifier les TCD/GCD pour modifier la source et ajouter un filtre supplémentaire pour préciser si le TCD/GCD utilise les lignes de Base ou Base_chg

Plus qu'à supprimer les segments en trop et lier les autres à tous les TCD/GCD

Je ne connais pas du tout PowerQuery !

En gros j'ai 3 onglets avec des données (du coup 2 sources différentes), un onglet TCD et ensuite 4 onglet de présentation avec utilisation des segments.

N'ayant pas réussi à lier les segments entre eux (vu qu'ils sont issus d'une source différente), j'ai ajouté un onglet "Table" pour choisir la ou les sociétés, le ou les mois et l'année d'analyse.

RE

J'ai appliqué la seconde solution et ai sur 8 TCD (dont j'ai modifié la couleur pour que tu vois) :

  1. délié les segments à plus d'un TCD
  2. modifié la source des TCD,
  3. ajouté le champ Source et filtré ce champ

Il te reste à :

  • faire les étapes 2 et 3 sur chaque TCD
  • relier tes segments aux divers TCD
  • éventuellement les dupliquer sur les tableaux de bord en supprimant les anciens

Merci beaucoup ! Le regroupement des sources va faciliter les choses :)

Rechercher des sujets similaires à "lier segments issus sources donnees differentes"