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.

24qbr.zip (15.57 Ko)

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 Sub

Bonsoir 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
13qbr.zip (16.81 Ko)
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").Value

Ou 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
.Update

Cdt.

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...

28qbr-v1.zip (15.47 Ko)

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.

Rechercher des sujets similaires à "adapter donnees tcd via choix formulaire"