Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Lister le contenu d'un champs Croisé Dynamique

2 réponses
Avatar
tattoo94
Bonjour,

Il y quelques jour j’avais déjà posé la question, mais visiblement je suis pas très clair dans mon explication, voici donc quelques précisions.

Le but est de pouvoir lister le contenu d’un champ en fonction des éléments ‘filtrés’ dans d’autres champs.
Idéalement dans le pied de page.

Voici un exemple un peu plus détaillé:
Dans le champ 'Page' j'ai: Zone / Marque / Hotels / etc.
Dans le champs 'Ligne' j'ai: Segments clients
Dans le champ 'Colonne' j'ai: Année
Dans le champ ‘Data’ j’ai : chambres vendues et chiffres d’affaires

Donc quand je 'filtre' ma zone et ma marque les hôtels concernés changent (logique) c'est donc la liste de ces hôtels que je veux faire apparaitre. Car les personnes qui lisent mes rapports ne connaissent pas tous la répartition de ces hôtels.

Je pense que cette fois ci c'est plus clair,

Et je vous remercie une fois de plus,

2 réponses

Avatar
Daniel.C
Bonjour.

Essaie la macro :

Sub test()
Dim PiedDePage As String, pi As PivotItem
Dim tblZone() As String, tblMarque() As String
Dim Ligne As Integer, Zone As String, Marque As String
ReDim tblZone(0)
ReDim tblMarque(0)
With ActiveSheet.PivotTables("Tableau croisé dynamique1")
For Each pi In .PivotFields("Zone").PivotItems
If pi.Visible = True Then
tblZone(UBound(tblZone)) = pi.Name
ReDim Preserve tblZone(UBound(tblZone) + 1)
End If
Next pi
ReDim Preserve tblZone(UBound(tblZone) - 1)
For Each pi In .PivotFields("Marque").PivotItems
If pi.Visible = True Then
tblMarque(UBound(tblMarque)) = pi.Name
ReDim Preserve tblMarque(UBound(tblMarque) + 1)
End If
Next pi
ReDim Preserve tblMarque(UBound(tblMarque) - 1)
For Each pi In .PivotFields("Hotels").PivotItems
Ligne = Application.Match(pi.Name, [Feuil1!C:C], 0)
Zone = Application.Index([Feuil1!A:A], Ligne)
Marque = Application.Index([Feuil1!B:B], Ligne)
If IsNumeric(Application.Match(Zone, tblZone, 0)) And _
IsNumeric(Application.Match(Marque, tblMarque, 0)) Then
PiedDePage = PiedDePage & pi.Name & ", "
End If
Next pi
End With
PiedDePage = Left(PiedDePage, Len(PiedDePage) - 2)
ActiveSheet.PageSetup.LeftFooter = PiedDePage
MsgBox PiedDePage
End Sub

correspondant au classeur :
http://cjoint.com/?lfnXDGusad
Daniel

Bonjour,

Il y quelques jour j’avais déjà posé la question, mais visiblement je suis
pas très clair dans mon explication, voici donc quelques précisions.

Le but est de pouvoir lister le contenu d’un champ en fonction des éléments
‘filtrés’ dans d’autres champs.
Idéalement dans le pied de page.

Voici un exemple un peu plus détaillé:
Dans le champ 'Page' j'ai: Zone / Marque / Hotels / etc.
Dans le champs 'Ligne' j'ai: Segments clients
Dans le champ 'Colonne' j'ai: Année
Dans le champ ‘Data’ j’ai : chambres vendues et chiffres d’affaires

Donc quand je 'filtre' ma zone et ma marque les hôtels concernés changent
(logique) c'est donc la liste de ces hôtels que je veux faire apparaitre. Car
les personnes qui lisent mes rapports ne connaissent pas tous la répartition
de ces hôtels.

Je pense que cette fois ci c'est plus clair,

Et je vous remercie une fois de plus,


Avatar
Daniel.C
Plus précisément, si les hôtels sont en champ de page :

Sub test()
Dim PiedDePage As String, pi As PivotItem
Dim tblZone() As String, tblMarque() As String
Dim Ligne As Integer, Zone As String, Marque As String
ReDim tblZone(0)
ReDim tblMarque(0)
With ActiveSheet.PivotTables("Tableau croisé dynamique1")
For Each pi In .PivotFields("Zone").PivotItems
If pi.Visible = True Then
tblZone(UBound(tblZone)) = pi.Name
ReDim Preserve tblZone(UBound(tblZone) + 1)
End If
Next pi
ReDim Preserve tblZone(UBound(tblZone) - 1)
For Each pi In .PivotFields("Marque").PivotItems
If pi.Visible = True Then
tblMarque(UBound(tblMarque)) = pi.Name
ReDim Preserve tblMarque(UBound(tblMarque) + 1)
End If
Next pi
ReDim Preserve tblMarque(UBound(tblMarque) - 1)
For Each pi In .PivotFields("Hotels").PivotItems
If pi.Visible = True Then
Ligne = Application.Match(pi.Name, [Feuil1!C:C], 0)
Zone = Application.Index([Feuil1!A:A], Ligne)
Marque = Application.Index([Feuil1!B:B], Ligne)
If IsNumeric(Application.Match(Zone, tblZone, 0)) And _
IsNumeric(Application.Match(Marque, tblMarque, 0)) Then
PiedDePage = PiedDePage & pi.Name & ", "
End If
End If
Next pi
End With
PiedDePage = Left(PiedDePage, Len(PiedDePage) - 2)
ActiveSheet.PageSetup.LeftFooter = PiedDePage
MsgBox PiedDePage
End Sub

Daniel

Bonjour.

Essaie la macro :

Sub test()
Dim PiedDePage As String, pi As PivotItem
Dim tblZone() As String, tblMarque() As String
Dim Ligne As Integer, Zone As String, Marque As String
ReDim tblZone(0)
ReDim tblMarque(0)
With ActiveSheet.PivotTables("Tableau croisé dynamique1")
For Each pi In .PivotFields("Zone").PivotItems
If pi.Visible = True Then
tblZone(UBound(tblZone)) = pi.Name
ReDim Preserve tblZone(UBound(tblZone) + 1)
End If
Next pi
ReDim Preserve tblZone(UBound(tblZone) - 1)
For Each pi In .PivotFields("Marque").PivotItems
If pi.Visible = True Then
tblMarque(UBound(tblMarque)) = pi.Name
ReDim Preserve tblMarque(UBound(tblMarque) + 1)
End If
Next pi
ReDim Preserve tblMarque(UBound(tblMarque) - 1)
For Each pi In .PivotFields("Hotels").PivotItems
Ligne = Application.Match(pi.Name, [Feuil1!C:C], 0)
Zone = Application.Index([Feuil1!A:A], Ligne)
Marque = Application.Index([Feuil1!B:B], Ligne)
If IsNumeric(Application.Match(Zone, tblZone, 0)) And _
IsNumeric(Application.Match(Marque, tblMarque, 0)) Then
PiedDePage = PiedDePage & pi.Name & ", "
End If
Next pi
End With
PiedDePage = Left(PiedDePage, Len(PiedDePage) - 2)
ActiveSheet.PageSetup.LeftFooter = PiedDePage
MsgBox PiedDePage
End Sub

correspondant au classeur :
http://cjoint.com/?lfnXDGusad
Daniel

Bonjour,

Il y quelques jour j’avais déjà posé la question, mais visiblement je suis
pas très clair dans mon explication, voici donc quelques précisions.

Le but est de pouvoir lister le contenu d’un champ en fonction des éléments
‘filtrés’ dans d’autres champs.
Idéalement dans le pied de page.

Voici un exemple un peu plus détaillé:
Dans le champ 'Page' j'ai: Zone / Marque / Hotels / etc.
Dans le champs 'Ligne' j'ai: Segments clients
Dans le champ 'Colonne' j'ai: Année
Dans le champ ‘Data’ j’ai : chambres vendues et chiffres d’affaires

Donc quand je 'filtre' ma zone et ma marque les hôtels concernés changent
(logique) c'est donc la liste de ces hôtels que je veux faire apparaitre.
Car
les personnes qui lisent mes rapports ne connaissent pas tous la
répartition de ces hôtels.

Je pense que cette fois ci c'est plus clair,

Et je vous remercie une fois de plus,