OVH Cloud OVH Cloud

ACTUALISATION AUTO TCD

3 réponses
Avatar
DENIS
JE SOUHAITE ACTUALISER MON TCD LORS DE LA SAISIE DES DONNEES.
EN ALLANT SUR QUELQUES SITES J AI FINI PAR TROUVER CECI MAIS EN VAIN
QUELQU 'UN POURRAIT IL M 'AIDER ?
MERCI

Exemple avec un tableau en colonne A:B en Feuil1
Insertion > Noms > Définir >
Nom dans le classeur : tu l'appelles par ex
"tablo" > Fait référence à :

=Feuil1!$A$1:DECALER(Feuil1!$B$1;0;0;NBVAL(Feuil1!$B:$B))
Ceci permet de
"rendre dynamique" la plage du tableau
Ensuite tu fais ton TCD avec
l'assistant .
* dans l'étape 2, plage données > tu saisis = tablo
* dans
l'étape 3, disposition > tu positionnes tes champs .Options > nom >
tu saisis =
monTCD
Ensuite pour l'actualiser auto à la saisie :
Dans le module attaché à
la feuille (clic droit sur l'onglet > visualiser le
code) :
Private Sub
Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 Then
ActiveSheet.PivotTables("monTCD").RefreshTable
End Sub

3 réponses

Avatar
michdenis
Bonjour Denis,

voici une procédure qui fait le travail :


'---------------------------------
Sub MiseAjour()

Dim Pt As PivotTable, Adr As String
Dim Pi As PivotItem, Pf As PivotField

Application.ScreenUpdating = False
With Worksheets("Feuil1")
Set rg = .Range("A1:B" & .Range("A65536").End(xlUp).Row)
Adr = .Name & "!" & rg.Address
Set Pt = Worksheets("Feuil1").PivotTables(1)
End With
With Pt
.ManualUpdate = False
.PivotCache.SourceData = Adr
.RefreshTable
For Each Pf In Pt.PivotFields
For Each Pi In Pf.PivotItems
If Pi.RecordCount = 0 And _
Not Pi.IsCalculated Then
Pi.Delete
End If
Next
Next
.ManualUpdate = True
.Update
End With

End Sub
'---------------------------------

Et à cette adresse, tu peux retrouver un classeur exemple de AV qui correspond à la méthode que tu cites.

http://cjoint.com/?jDpDcEEPAi


Salutations!



"DENIS" a écrit dans le message de news:
JE SOUHAITE ACTUALISER MON TCD LORS DE LA SAISIE DES DONNEES.
EN ALLANT SUR QUELQUES SITES J AI FINI PAR TROUVER CECI MAIS EN VAIN
QUELQU 'UN POURRAIT IL M 'AIDER ?
MERCI

Exemple avec un tableau en colonne A:B en Feuil1
Insertion > Noms > Définir >
Nom dans le classeur : tu l'appelles par ex
"tablo" > Fait référence à :

þuil1!$A$1:DECALER(Feuil1!$B$1;0;0;NBVAL(Feuil1!$B:$B))
Ceci permet de
"rendre dynamique" la plage du tableau
Ensuite tu fais ton TCD avec
l'assistant .
* dans l'étape 2, plage données > tu saisis = tablo
* dans
l'étape 3, disposition > tu positionnes tes champs .Options > nom >
tu saisis monTCD
Ensuite pour l'actualiser auto à la saisie :
Dans le module attaché à
la feuille (clic droit sur l'onglet > visualiser le
code) :
Private Sub
Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 Then
ActiveSheet.PivotTables("monTCD").RefreshTable
End Sub
Avatar
DENIS
oui effectivement cela fonctionne très bien dans la même feuille...
Mais c est possible d 'avoir la même chose sur 2 ou plusieurs feuilles ?
En fait à partir d 'un tableau je crée 6 TCD situé dans des feuilles
différentes.

merci


Bonjour Denis,

voici une procédure qui fait le travail :


'---------------------------------
Sub MiseAjour()

Dim Pt As PivotTable, Adr As String
Dim Pi As PivotItem, Pf As PivotField

Application.ScreenUpdating = False
With Worksheets("Feuil1")
Set rg = .Range("A1:B" & .Range("A65536").End(xlUp).Row)
Adr = .Name & "!" & rg.Address
Set Pt = Worksheets("Feuil1").PivotTables(1)
End With
With Pt
.ManualUpdate = False
.PivotCache.SourceData = Adr
.RefreshTable
For Each Pf In Pt.PivotFields
For Each Pi In Pf.PivotItems
If Pi.RecordCount = 0 And _
Not Pi.IsCalculated Then
Pi.Delete
End If
Next
Next
.ManualUpdate = True
.Update
End With

End Sub
'---------------------------------

Et à cette adresse, tu peux retrouver un classeur exemple de AV qui correspond à la méthode que tu cites.

http://cjoint.com/?jDpDcEEPAi


Salutations!



"DENIS" a écrit dans le message de news:
JE SOUHAITE ACTUALISER MON TCD LORS DE LA SAISIE DES DONNEES.
EN ALLANT SUR QUELQUES SITES J AI FINI PAR TROUVER CECI MAIS EN VAIN
QUELQU 'UN POURRAIT IL M 'AIDER ?
MERCI

Exemple avec un tableau en colonne A:B en Feuil1
Insertion > Noms > Définir >
Nom dans le classeur : tu l'appelles par ex
"tablo" > Fait référence à :

þuil1!$A$1:DECALER(Feuil1!$B$1;0;0;NBVAL(Feuil1!$B:$B))
Ceci permet de
"rendre dynamique" la plage du tableau
Ensuite tu fais ton TCD avec
l'assistant .
* dans l'étape 2, plage données > tu saisis = tablo
* dans
l'étape 3, disposition > tu positionnes tes champs .Options > nom >
tu saisis > monTCD
Ensuite pour l'actualiser auto à la saisie :
Dans le module attaché à
la feuille (clic droit sur l'onglet > visualiser le
code) :
Private Sub
Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 Then
ActiveSheet.PivotTables("monTCD").RefreshTable
End Sub





Avatar
michdenis
Bonjour Denis,

Essaie ceci :

Ceci devrait mettre à jour tous les TCD de toutes les feuilles du classeur.

ATTENTION : Ces TDC doivent avoir le même tableau source de données
si ce n'est pas le cas... il faudra modifier la procédure en étant un peu plus précis.

Pas testé ! à toi de jouer !!
'---------------------------------
Sub MiseAjour()

Dim Sh As Worksheet
Dim Pt As PivotTable, Adr As String
Dim Pi As PivotItem, Pf As PivotField

Application.ScreenUpdating = False
'La feuille et la plage de cellules contenant le tableau des données
With Worksheets("Feuil1") ' à déterminer
Set Rg = .Range("A1:B" & .Range("A65536").End(xlUp).Row)
Adr = .Name & "!" & Rg.Address
End With

For Each Sh In Worksheets
For Each Pt In Sh.PivotTables
With Pt
.ManualUpdate = False
.PivotCache.SourceData = Adr
.RefreshTable
For Each Pf In Pt.PivotFields
For Each Pi In Pf.PivotItems
If Pi.RecordCount = 0 And _
Not Pi.IsCalculated Then
Pi.Delete
End If
Next
Next
.ManualUpdate = True
.Update
End With
Next
Next

End Sub
'---------------------------------


Salutations!





"DENIS" a écrit dans le message de news:
oui effectivement cela fonctionne très bien dans la même feuille...
Mais c est possible d 'avoir la même chose sur 2 ou plusieurs feuilles ?
En fait à partir d 'un tableau je crée 6 TCD situé dans des feuilles
différentes.

merci


Bonjour Denis,

voici une procédure qui fait le travail :


'---------------------------------
Sub MiseAjour()

Dim Pt As PivotTable, Adr As String
Dim Pi As PivotItem, Pf As PivotField

Application.ScreenUpdating = False
With Worksheets("Feuil1")
Set rg = .Range("A1:B" & .Range("A65536").End(xlUp).Row)
Adr = .Name & "!" & rg.Address
Set Pt = Worksheets("Feuil1").PivotTables(1)
End With
With Pt
.ManualUpdate = False
.PivotCache.SourceData = Adr
.RefreshTable
For Each Pf In Pt.PivotFields
For Each Pi In Pf.PivotItems
If Pi.RecordCount = 0 And _
Not Pi.IsCalculated Then
Pi.Delete
End If
Next
Next
.ManualUpdate = True
.Update
End With

End Sub
'---------------------------------

Et à cette adresse, tu peux retrouver un classeur exemple de AV qui correspond à la méthode que tu cites.

http://cjoint.com/?jDpDcEEPAi


Salutations!



"DENIS" a écrit dans le message de news:
JE SOUHAITE ACTUALISER MON TCD LORS DE LA SAISIE DES DONNEES.
EN ALLANT SUR QUELQUES SITES J AI FINI PAR TROUVER CECI MAIS EN VAIN
QUELQU 'UN POURRAIT IL M 'AIDER ?
MERCI

Exemple avec un tableau en colonne A:B en Feuil1
Insertion > Noms > Définir >
Nom dans le classeur : tu l'appelles par ex
"tablo" > Fait référence à :

þuil1!$A$1:DECALER(Feuil1!$B$1;0;0;NBVAL(Feuil1!$B:$B))
Ceci permet de
"rendre dynamique" la plage du tableau
Ensuite tu fais ton TCD avec
l'assistant .
* dans l'étape 2, plage données > tu saisis = tablo
* dans
l'étape 3, disposition > tu positionnes tes champs .Options > nom >
tu saisis > monTCD
Ensuite pour l'actualiser auto à la saisie :
Dans le module attaché à
la feuille (clic droit sur l'onglet > visualiser le
code) :
Private Sub
Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 Then
ActiveSheet.PivotTables("monTCD").RefreshTable
End Sub