OVH Cloud OVH Cloud

Récupération données source d'un TCD

5 réponses
Avatar
Alain79
Bonjour

Je souhaiterai (à partir de code vba) pouvoir récupérer sous forme de
tableau ou d'une feuille de calcul les données sources d'un tableau croisé
dynamique (TCD). Un peu comme ce que l'on récupère en faisant 'show detail'
sur une case de donnée d'un TCD. Hors donc existe t'il une fonction directe
qui me permettrai d'extraire ces données sources et le cas échéant de les
mettre dans un onglet spécifique.

Merci pour votre aide
Alain 79

5 réponses

Avatar
lSteph
Bonjour,
(S'il existe une fonction plus directe cela m'intéresse aussi)

Je souhaiterai (à partir de code vba) pouvoir récupérer sous forme de
tableau ou d'une feuille de calcul les données sources d'un tableau croisé
dynamique (TCD). Un peu comme ce que l'on récupère en faisant 'show
detail'


A priori la réponse est dans la question, exemple pour une feuille (total
général du tcd en c14):

Range("c14").ShowDetail = True

'pour un tableau (variant) je proposerais cet exemple avec la sub test ,
lancée depuis la feuille contenant le tcd
on affiche un message contenant une des valeurs du tableau récupèré selon
ses coordonnées:

Public montab()
Sub tabextcd()
Dim c As Range
On Error GoTo fin
Range("c14").ShowDetail = True
With [a1].CurrentRegion
ReDim montab(.Rows.Count, .Columns.Count)
For Each c In .Cells
montab(c.Row, c.Column) = c.Value
Next
End With
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
fin:
End Sub
Sub test()
tabextcd
On Error GoTo fin
MsgBox montab(2, 3)
fin:
End Sub

'lSteph

Avatar
Alain79
Merci
Je vais étudier ta réponse
J'en étais en fait à trouver comment repérer par du code la cellule ou se
trouve le fameux grand total...
C'est une donnée que je ne peux pas entrer en dur...
Encore merci pour l'effort
Alain79

"lSteph" wrote in message
news:ewh7$
Bonjour,
(S'il existe une fonction plus directe cela m'intéresse aussi)

Je souhaiterai (à partir de code vba) pouvoir récupérer sous forme de
tableau ou d'une feuille de calcul les données sources d'un tableau
croisé


dynamique (TCD). Un peu comme ce que l'on récupère en faisant 'show
detail'


A priori la réponse est dans la question, exemple pour une feuille (total
général du tcd en c14):

Range("c14").ShowDetail = True

'pour un tableau (variant) je proposerais cet exemple avec la sub test ,
lancée depuis la feuille contenant le tcd
on affiche un message contenant une des valeurs du tableau récupèré selon
ses coordonnées:

Public montab()
Sub tabextcd()
Dim c As Range
On Error GoTo fin
Range("c14").ShowDetail = True
With [a1].CurrentRegion
ReDim montab(.Rows.Count, .Columns.Count)
For Each c In .Cells
montab(c.Row, c.Column) = c.Value
Next
End With
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
fin:
End Sub
Sub test()
tabextcd
On Error GoTo fin
MsgBox montab(2, 3)
fin:
End Sub

'lSteph





Avatar
Alain79
Une autre question
A quoi sert la boucle
For Each c In .Cells
montab(c.Row, c.Column) = c.Value
Next
C'est comme si tu voulais tuer des formules dans la zone récupérée mais il

n'y en a pas?!
Alain

"lSteph" wrote in message
news:ewh7$
Bonjour,
(S'il existe une fonction plus directe cela m'intéresse aussi)

Je souhaiterai (à partir de code vba) pouvoir récupérer sous forme de
tableau ou d'une feuille de calcul les données sources d'un tableau
croisé


dynamique (TCD). Un peu comme ce que l'on récupère en faisant 'show
detail'


A priori la réponse est dans la question, exemple pour une feuille (total
général du tcd en c14):

Range("c14").ShowDetail = True

'pour un tableau (variant) je proposerais cet exemple avec la sub test ,
lancée depuis la feuille contenant le tcd
on affiche un message contenant une des valeurs du tableau récupèré selon
ses coordonnées:

Public montab()
Sub tabextcd()
Dim c As Range
On Error GoTo fin
Range("c14").ShowDetail = True
With [a1].CurrentRegion
ReDim montab(.Rows.Count, .Columns.Count)
For Each c In .Cells
montab(c.Row, c.Column) = c.Value
Next
End With
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
fin:
End Sub
Sub test()
tabextcd
On Error GoTo fin
MsgBox montab(2, 3)
fin:
End Sub

'lSteph





Avatar
lSteph
C'est comme si tu voulais....
non, l'idée est de boucler sur les cellules pour les passer

en valeurs de chaque item du tableau.
c.value car j'ai défini c en tant que range pour plus de précision (inutile
en apparence)!


... proposé un msg mais bien sûr c'est juste pour exemple
visant les données du tableau.
J'espère que c'est adaptable à ton objectif.

@+

lSteph

"Alain79" a écrit dans le message de news:

Une autre question
A quoi sert la boucle
For Each c In .Cells
montab(c.Row, c.Column) = c.Value
Next
C'est comme si tu voulais tuer des formules dans la zone récupérée mais il

n'y en a pas?!
Alain

"lSteph" wrote in message
news:ewh7$
Bonjour,
(S'il existe une fonction plus directe cela m'intéresse aussi)

Je souhaiterai (à partir de code vba) pouvoir récupérer sous forme de
tableau ou d'une feuille de calcul les données sources d'un tableau
croisé


dynamique (TCD). Un peu comme ce que l'on récupère en faisant 'show
detail'


A priori la réponse est dans la question, exemple pour une feuille (total
général du tcd en c14):

Range("c14").ShowDetail = True

'pour un tableau (variant) je proposerais cet exemple avec la sub test ,
lancée depuis la feuille contenant le tcd
on affiche un message contenant une des valeurs du tableau récupèré selon
ses coordonnées:

Public montab()
Sub tabextcd()
Dim c As Range
On Error GoTo fin
Range("c14").ShowDetail = True
With [a1].CurrentRegion
ReDim montab(.Rows.Count, .Columns.Count)
For Each c In .Cells
montab(c.Row, c.Column) = c.Value
Next
End With
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
fin:
End Sub
Sub test()
tabextcd
On Error GoTo fin
MsgBox montab(2, 3)
fin:
End Sub

'lSteph









Avatar
lSteph
J'en étais en fait à trouver comment repérer...
...le fameux grand total...
C'est une donnée que je ne peux pas entrer en dur...
Public montab()

Sub tabextcd()
Dim c As Range
On Error GoTo fin
Feuil1.PivotTables(1).PivotSelect (xlData)
Selection.Cells(Selection.Cells.Count).ShowDetail = True
With [a1].CurrentRegion
ReDim montab(.Rows.Count, .Columns.Count)
For Each c In .Cells
montab(c.Row, c.Column) = c.Value
Next
End With
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
fin:
End Sub
Sub test()
tabextcd
On Error GoTo fin
MsgBox montab(2, 3)
fin:
End Sub
Sub retest()
MsgBox montab(4, 2)
End Sub


"Alain79" a écrit dans le message de news:
%
Merci
Je vais étudier ta réponse
J'en étais en fait à trouver comment repérer par du code la cellule ou se
trouve le fameux grand total...
C'est une donnée que je ne peux pas entrer en dur...
Encore merci pour l'effort
Alain79

"lSteph" wrote in message
news:ewh7$
Bonjour,
(S'il existe une fonction plus directe cela m'intéresse aussi)

Je souhaiterai (à partir de code vba) pouvoir récupérer sous forme de
tableau ou d'une feuille de calcul les données sources d'un tableau
croisé


dynamique (TCD). Un peu comme ce que l'on récupère en faisant 'show
detail'


A priori la réponse est dans la question, exemple pour une feuille (total
général du tcd en c14):

Range("c14").ShowDetail = True

'pour un tableau (variant) je proposerais cet exemple avec la sub test ,
lancée depuis la feuille contenant le tcd
on affiche un message contenant une des valeurs du tableau récupèré selon
ses coordonnées:

Public montab()
Sub tabextcd()
Dim c As Range
On Error GoTo fin
Range("c14").ShowDetail = True
With [a1].CurrentRegion
ReDim montab(.Rows.Count, .Columns.Count)
For Each c In .Cells
montab(c.Row, c.Column) = c.Value
Next
End With
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
fin:
End Sub
Sub test()
tabextcd
On Error GoTo fin
MsgBox montab(2, 3)
fin:
End Sub

'lSteph