MAcro sur un Tableau croisé dynamique

Bonjour,

J'ai un tableau croisé dynamique sur lequel je voudrais appliquer une macro qui permettrait de faire une sélection en automatique en fonction de la valeur d'une cellue.

Voici mon code :

Sub Macro2()
'
' Macro2 Macro
' Macro enregistrée le 21/11/2012 par Nicolas Baudry
'
'sur la feuille TCD 1 prendre la valeur de la cellule C2
N°_Commande = Range("C2").Value

'sélectionner la feuille TCD 2 où l'on souhaite modifier un des filtres du tableau croisé dynamique
    Sheets("TCD 2").Select
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
        "Commande")
        .PivotItems(N°_Commande).Visible = True
     End With
    Range("A6").Select
End Sub

Il me met une erreur exécution 1004 : Impossible de lire la propriété PivotItems de la classe PivotField

Est ce que quelqu'un peut m'aider ?

Par avance merci

Nini

Bon, je crois avoir compris pourquoi il me mettais cette erreur. J'avais deux TCD qui avait le même nom a priori.

Après modification voici mon code :

Sub Macro2()
'
' Macro2 Macro
' Macro enregistrée le 21/11/2012 par Nicolas Baudry
'
'sur la feuille TCD 1 prendre la valeur de la cellule C2
Dim N°_Commande As String
N°_Commande = Range("C2").Value

'sélectionner la feuille TCD 2 où l'on souhaite modifier un des filtres du tableau croisé dynamique
   Sheets("TCD2").Select
    With ActiveSheet.PivotTables("TCD2").PivotFields( _
        "Commande")
        .PivotItems(N°_Commande).Visible = True
     End With
    Range("A6").Select
End Sub

Problème c'est que la macro fait rien sur le TCD. Le filtre "Commande" n'est pas modifié par la valeur N°_Commande ?????

Est ce que quelqu'un peut m'aider SVP ?

Merci par avance

Nini

Bonjour,

Le mieux serait de voir ton fichier pour visualiser les dispositions dans ton TCD

Si je comprends bien tu veux définir la valeur du numéro de commande dans C2 puis adapter ton TCD en fonction

A te relire

Bonjour Dan et merci pour la prise en compte de ma demande

Voici le fichier

Nini

P.S. : J'ai mis très peu de données pour l'exemple

633suivi.zip (85.79 Ko)

Bonsoir,

Ci-joint fichier à tester et à adapter à tes besoins.

Ce code est à améliorer pour une automatisation plus générale (lors d'une création de TCD en VBA)

Bonne digestion

nb; j'ai mis ta cellule C2 de la feuille TCD1 en liste déroulante (voir code)

Cdlt.

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sH As Worksheet
Dim Cde As String

    If Target.Cells.Count > 1 Then Exit Sub
    If Not Application.Intersect(Target, Range("C2")) Is Nothing Then
        Set sH = Worksheets("TCD1")
        Cde = sH.Cells(2, 3).Value
        Affichage_Commande "Commande", Cde
    End If
End Sub
Private Sub Affichage_Commande(Field As String, Item As String)

Dim pvtField As PivotField
Dim pvtItem As PivotItem
Dim pvtItems As PivotItems

    On Error GoTo ShowInPivot_EH
        'On réinitialisee le champ
        For Each pvtItem In Worksheets("TCD2").PivotTables("TCD2").PivotFields(Field).PivotItems
            pvtItem.Visible = True
        Next
        'On applique le filtre désiré
        For Each pvtItem In Worksheets("TCD2").PivotTables("TCD2").PivotFields(Field).PivotItems
            If pvtItem.Name = Item Then
                pvtItem.Visible = True
            Else
                pvtItem.Visible = False
            End If
        Next
    Exit Sub

ShowInPivot_EH:
    Debug.Print "Error(" & Err.Number & "): " & Err.Description
    Exit Sub

End Sub

Cela me semble bien mais il va falloir que je le bosse car je ne suis pas un expert

PAr contre je ne vois pas comment la liste déroulante (parfaite par ailleus) a été créée ?

Comment elle se met à jour d'ailleurs car les n° de commandes à afficher sont ceux se trouvant de A11 jusqu'à Ax (x=total) (sur la feuille TCD1) ?

Suis je clair ?

Je l'espère

Je regarde pour le reste mais en tout cas je te remercie déjà pour ton aide

Nini

Re,

Pout ton information, mais je pense que tu crains une crise de foie

Dans le fichier, la mise à jour est manuelle avec la procédure "DonnéesValidation". Elle se met alors à jour avec les nouvelles données enregistrées dans ta base de données. Je pense qu'il y a plus simple

Cdlt

'Attribute VB_Name = "DonneesValidation"
'créer à partir d'une plage en colonne une liste de validation
'sans doublons (équivalent de Données\Validation... autoriser -> liste)
Public Sub DonnéesValidation()
'Iznogood, mpfe
Dim sH_1 As Worksheet, sH_2 As Worksheet
Dim derLigne As Integer
Dim Plage As Range
Dim t() As Variant
Dim r As Range
Dim i As Long
Dim flag As Boolean
Dim Formule As String

    Application.ScreenUpdating = False
    Set sH = Worksheets("Données")
    Set sH_2 = Worksheets("TCD1")
    sH.Activate
    With sH
        derLigne = .Range("A" & Rows.Count).End(xlUp).Row
        Set Plage = .Range(Cells(4, 1), Cells(derLigne, 1))
        ReDim t(0)
        For Each r In Plage
            flag = True
                For i = 1 To UBound(t)
                    If t(i) = r Then flag = False
                Next i
            If flag Then
                ReDim Preserve t(UBound(t) + 1)
                t(UBound(t)) = r
            End If
        Next r

        For i = 1 To UBound(t)
            Formule = Formule & t(i) & ","
        Next i
    End With

    With sH_2.Cells(2, 3).Validation
        .Delete
        .Add Type:=xlValidateList, Formula1:=Formule
    End With

End Sub

Bonjour,

C'est parfait, j'ai réussi à travailler sur les codes et j'obtiens ce que je voulais

Encore merci pour votre aide

nini

Bonsoir,

A tester.

Code à copier dans le module de la feuille 'Tableau de bord'.

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [C12]) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        Worksheets("Pivot").PivotTables(1).PivotFields("CodeProjet").CurrentPage = Target.Value
    End If
End Sub

Merci beaucoup Jean-Eric,

Je n'arrive même pas à l'essayer. Quand je remplace le texte par celui que vous m'avez conseillé et bien je supprime le nom de la macro et donc je n'arrive plus à la retrouver et à "lier" mon bouton... une idée? me sens naze-là

Rechercher des sujets similaires à "macro tableau croise dynamique"