Adapter données TcD via cellule de choix (formulaire) ?
Bonjour à tous,
Etant débutant, j'ai essayé de parcourir les différents posts sur ce même sujet...J'ai réussi à trouver mon bonheur pour lier différents TcD entres eux... J'arrive donc à faire fonction un TcD qui met à jour un autre TcD
Par contre pour ce qui concerne la mise à jour d'un TcD via une simple cellule avec une liste....... c'est le drame
J'ai essayé de faire du "bidouillage" avec différents VBA trouvé ici ou là.... mais rien à faire je n'y arrive pas !
N'étant pas expert en la matière, mais plutôt niveau petite section école maternelle.... je souhaiterais votre avis/aide........
Mon objectif :
- Dans l'onglet "Menu" je souhaite utiliser la cellule G6:K6 (3 cellules fusionnées pour des raisons de mise en page) comme liste de choix pour faire varier les indicateurs correspondant aux "Direction Zone".
Cette liste de choix en G6:K6 est alimentée par un champ reprenant exactement les noms utilisé dans le champs "Direction Zone" du TcD.
- Le TcD filtre automatiquement ses données via la sélection du champ "Direction Zone".
Je souhaitais "simplement" utiliser la cellule G6:K6 pour mettre à jour le champ "Direction Zone" sur le(s) TcD.
Voici mon code :
Private Sub Worksheet_Activate()
'A l'activation de la feuille on initialise la variable DZ
DZ = Sheets("Menu").Range("G6:K6").CurrentPage.Value
End Sub
Private Sub Worksheet_Calculate()
DZ = Sheets("Menu").Range("G6:K6").CurrentPage.Value
If DZ <> Me.PivotTables("Quanti_Zones_2014").PageFields("Direction Zone").CurrentPage.Value Then
DZ = Sheets("Menu").Range("G6:K6").CurrentPage.Value
With Sheets("TcD Quanti zones par mois").PivotTables("Quanti_Zones_2014")
.PageFields("Direction Zone").CurrentPage = DZ
.Update
End With
End If
End Sub Qu'en pensez-vous ?
Où pourrait être l'erreur ?
Cdt.
A.
Bonjour,
Code à adapter.
Option Explicit
Public Sub test()
With Worksheets("TcD Quanti zones par mois")
.PivotTables("Quanti_Zones_2014").PivotFields("Direction Zone"). _
CurrentPage = Worksheets("Menu").Range("G6").Value
.PivotTables("Quanti_Zones_2014").PivotCache.Refresh
End With
End SubBonsoir Jean-Eric,
Merci d'avoir pris le temps pour me répondre.
Toutefois, comme expliqué je ne suis pas très doué pour le moment en VBA.
Je ne suis pas certain donc de comprendre ce qu'il y a a adapter ......
Peux-tu me guider un peu plus si ce n'est pas trop demander ?
Cdt.
A.
Re,
Ce code est placé dans le module Feuille "Menu".
Chaque modification de la cellule G6 réactualise le TCD...
A te relire.
Cdlt
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Not Application.Intersect(Target, Range("G6")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
With Worksheets("TcD Quanti zones par mois")
.PivotTables("Quanti_Zones_2014").PivotFields("Direction Zone"). _
CurrentPage = Worksheets("Menu").Range("G6").Value
.PivotTables("Quanti_Zones_2014").PivotCache.Refresh
End With
End If
End Sub
Jean-Eric a écrit :Re,
Ce code est placé dans le module Feuille "Menu".
Chaque modification de la cellule G6 réactualise le TCD...
A te relire.
Cdlt
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False If Not Application.Intersect(Target, Range("G6")) Is Nothing Then If Target.Count > 1 Then Exit Sub With Worksheets("TcD Quanti zones par mois") .PivotTables("Quanti_Zones_2014").PivotFields("Direction Zone"). _ CurrentPage = Worksheets("Menu").Range("G6").Value .PivotTables("Quanti_Zones_2014").PivotCache.Refresh End With End If End Sub
Merci énormément pour ton aide Jean-Eric, car effectivement cela fonctionne parfaitement !
Toutefois je souhaiterais savoir si pouvais m'indiquer d'où provenait le problème de mon code.... J'aimerai avoir un jour la satisfaction d'écrire un VBA qui marche
Est-ce le fait de revenir à la ligne induit une chose importante dans le déroulement du programme ?
With Worksheets("TcD Quanti zones par mois")
.PivotTables("Quanti_Zones_2014").PivotFields("Direction Zone"). _
CurrentPage = Worksheets("Menu").Range("G6").ValueOu bien était-ce un problème dans mon écriture ?
DZ = Sheets("Menu").Range("G6:K6").CurrentPage.Value
If DZ <> Me.PivotTables("Quanti_Zones_2014").PageFields("Direction Zone").CurrentPage.Value Then
DZ = Sheets("Menu").Range("G6:K6").CurrentPage.Value
With Sheets("TcD Quanti zones par mois").PivotTables("Quanti_Zones_2014")
.PageFields("Direction Zone").CurrentPage = DZ
.UpdateCdt.
A.
Bonjour,
Voir ci-dessous les explications de mon code:
Option Explicit
' Faire ALT F11 et aller dans VBAProject (QBR.xls)
' Sélectionner par un double click "Feuil1 (Menu)"
' cet évènement est déclenché lorsque le contenu d'une cellule est modifiée dans la feuille.
Private Sub Worksheet_Change(ByVal Target As Range)
' on désactive l'actualisation de l'écran
Application.ScreenUpdating = False
' toute modification de la cellule "G6" est surveillée
If Not Application.Intersect(Target, Range("G6")) Is Nothing Then
With Worksheets("TcD Quanti zones par mois")
' le nom de la page en cours du TCD est modifié
.PivotTables("Quanti_Zones_2014").PivotFields("Direction Zone"). _
CurrentPage = Worksheets("Menu").Range("G6").Value
' on actualise le TCD
.PivotTables("Quanti_Zones_2014").PivotCache.Refresh
End With
End If
End Sub* Un double-clic sur un mot suivi de F1 ouvre l'aide VBA. Dans de nombreux cas, tu trouveras une réponse sur une méthode, une fonction, etc... (fais un test sur PivotCache ou ScreenUpdating)
** Un espace suivi par un trait de soulignement (underscore) indique à VBA que l'instruction en cours n'est pas encore terminé, mais continue sur la ligne suivante. Il est utilisé pour diviser une seule ligne de code sur deux lignes, afin de rendre le code plus lisible.
*** Je peux difficilement expliquer ton code...
Merci encore pour ce détail et ton aide.
J'ai commencé à parcourir les cours VBA proposés sur le site... mais disons que je commence de loin
J'ai en tout cas compris l'écriture de ton script, je vais maintenant essayer de me l'approprier en travaillant dessus.
A.