XL 2013 tableau de bord et extraction données d'un TCD

fmaurice54

XLDnaute Nouveau
Bonjour à tous,

Voilà mon problème :
J'utilise des tableaux croisés dynamiques pour créer des tableaux de bords. voir fichier exemple.
Ces tableaux sont réalisés avec la formule = LIREDONNEESTABCROISDYNAMIQUE(...)

Je souhaiterai pouvoir extraire les données du tableau source qui sont illustrées dans comme on le fait en double-cliquant sur le tcd
et ce pour chaque case de mon tableau de bord, avec bien entendu les données correspondantes du tableau source

Voir le fichier d'exemple/

En réalité, ce qu'il faudrait faire c'est afficher "Liste de course" avec le filtre qui correspond à l'identité de la case dans laquelle j'ai double cliqué.

ex si je double clic dans "saumon sauvage" / "Produit laitier"
il m'affiche la feuille liste des courses avec les filtres "saumon sauvage" et "produit laitier"


Quelqu'un aurait 'il déjà réaliser un projet de la sorte ?

Merci

F.
 

Pièces jointes

  • tableau de bord extraction tcd.xlsx
    118.8 KB · Affichages: 67

fmaurice54

XLDnaute Nouveau
Re : tableau de bord et extraction données d'un TCD

Bonjour Sousou,
Tout d'abord, merci pour ta solution, ca marche très bien.
En revanche je ne comprend pas très bien comment elle fonctionne.:confused:
Je crois comprendre que tu décortiques la formule qui est dans chaque cellule du tableau de bord avec la procédur e SUB deb(texte)
Si j'ai bien compris texte = la formule dans la cellule dans laquelle je clique ex : =LIREDONNEESTABCROISDYNAMIQUE("TOTAL";TCD!$A$3;"ÉLÉMENT";$B13;"CATÉGORIE";D$4)
je ne comprends pas bien à quoi correspondent les n, ad1, K1, ad2, d1, d2, c, l

Je voudrais adapter cette procédure à mes tableaux de bords qui sont un peu plus sophitiqués que celui pris en exemple dans le fichier joint.

Code:
Sub deb(texte)
With ActiveSheet

n = InStrRev(texte, ",", -1)
ad1 = Mid(texte, n + 1, Len(texte) - n - 1)
n = InStrRev(texte, ",", n - 1)
k1 = Mid(texte, n + 1, Len(texte) - n - 1 - Len(ad1) - 1)
n = InStrRev(texte, ",", n - 1)
ad2 = Mid(texte, n + 1, Len(texte) - n - 3 - (Len(ad1) + Len(k1)))

d1 = .Range(ad1)
d2 = .Range(ad2)


End With
With ThisWorkbook.Sheets("tcd")
c = .UsedRange.Find(d1).Column
l = .UsedRange.Find(d2).Row

.Cells(l, c).ShowDetail = True
End With
End Sub
------------------------------
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Left(Target.Formula, 1) <> "=" Then Exit Sub
Call deb(Target.Formula)
End Sub

Merci

F.
 

fmaurice54

XLDnaute Nouveau
Re : tableau de bord et extraction données d'un TCD

Bon Ok,
J'avance dans ma compréhension :
J'ai compris pourquoi tu recherchais "," et non pas ";" ... c'est parceque la formule en langage VBA s'écrit avec des "," et non pas des ";"
GETPIVOTDATA("TOTAL",TCD!$A$3,"ÉLÉMENT",$B9,"CATÉGORIE",C$4):eek:

Code:
Sub deb(texte)
With ActiveSheet
'=LIREDONNEESTABCROISDYNAMIQUE("TOTAL";TCD!$A$3;"ÉLÉMENT";$B9;"CATÉGORIE";C$4)

n = InStrRev(texte, ",", -1)
ad1 = Mid(texte, n + 1, Len(texte) - n - 1)
n = InStrRev(texte, ",", n - 1)
k1 = Mid(texte, n + 1, Len(texte) - n - 1 - Len(ad1) - 1)
n = InStrRev(texte, ",", n - 1)
ad2 = Mid(texte, n + 1, Len(texte) - n - 3 - (Len(ad1) + Len(k1)))
'ainsi j'obtiens :
'ad1 = C$4
'ad2 =$B9
Code:
d1 = .Range(ad1)
d2 = .Range(ad2)
' d1 = la valeur contenue en ad1 : ex : Produit
'd2 = la valeur contenue en ad2 : ex : champignon
Code:
End With
With ThisWorkbook.Sheets("tcd")
c = .UsedRange.Find(d1).Column
l = .UsedRange.Find(d2).Row

.Cells(l, c).ShowDetail = True
End With
End Sub

Bon va falloir que je planche un peu pour adapter à mes tableaux de bords, car j'ai pour habitude de créer une page TCD dans laquelle je colle plusieurs tcd qui me permettent de venir piocher mes informations.

Je vais réfléchir aussi à utiliser les ad1, K1, Ad2... pour simplement filtrer les données de la feuille "LIste de course"

En tout cas c'est carrément astucieux ta technique.

Merci

F.

F.
 

fmaurice54

XLDnaute Nouveau
Re : tableau de bord et extraction données d'un TCD

Question subsidiaire,
Comment faire pour paramétrer la macro pour que le double-clic "s'adapte" au contexte.:confused:
Je précise :
1. comment faire pour que l'extraction s'adapte à tel ou tel tableau de bord (voir nouveau fichier). dans mon projet final j'ai au moins une dizaine de tableau de bords différents
2. comment faire pour que lorsque je double-clic dans une cellule en dehors d'un tableau de bord, la macro ne se lance pas ou à défaut, ne plante pas.

En gros, comment faire pour que le traitement soit différent en fonction de la TARGET :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Left(Target.Formula, 1) <> "=" Then Exit Sub
Call deb(Target.Formula)
End Sub

Merci d'avance

Francois
 

Pièces jointes

  • tableau de bord extraction tcd-3.xlsm
    132.4 KB · Affichages: 64
  • tableau de bord extraction tcd-3.xlsm
    132.4 KB · Affichages: 70
Dernière modification par un modérateur:

Discussions similaires

Réponses
2
Affichages
554