xl2003.TCD.appliquerla selectiond'un item de colonne du tcd source au tcd cible

Accordially

XLDnaute Nouveau
Bonjour,
Ce qui fonctionne : appliquer à mon champ de page(TCD source) la valeur sélectionnée dans une liste déroulante, et propager cette sélection aux autres TCD du fichier.
Maintenant, je bloque sur la manière de rédiger le code pour que lorsque j'exclus un item d'un champ de colonne( ou de ligne) dans mon TCD source, ce changement prenne effet dans les autres TCD du mon Fichier.

Est-ce que vous pouvez m'aider ?

Ça serait magnifique.
Afin de donner une piste, et peut-être, aider quelqu'un d'autre voici la première partie du code qui fonctionne :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Cette macro permet de changer tous les Champs de page "DateRéférence" des TCD du fichier
'en fonction de la valeur de la cellule D2
Dim ws As Worksheet
Dim pt As PivotTable
Dim pi As PivotItem

Dim strField As String

strField = "DateRéférence"

On Error Resume Next
Application.EnableEvents = False
Application.ScreenUpdating = False

    If Target.Address = Range("D2").Address Then 'adresse de la cellule où l'on choisit la date à filtrer
        
        For Each ws In ThisWorkbook.Worksheets
            For Each pt In ws.PivotTables
                With pt.PageFields(strField)
                    For Each pi In .PivotItems
                        If pi.Value = Target.Value Then
                            .CurrentPage = Target.Value
                            Exit For
                        Else          'sinon, afficher tous les enregistrements
                            .CurrentPage = "(Tous)"
                        End If
                    Next pi
                End With
            Next pt
        Next ws
    
    End If

Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Merci à l'avance de votre disponibilité

Accordially
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : xl2003.TCD.appliquerla selectiond'un item de colonne du tcd source au tcd cible

Bonjour à tous,
Bienvenue sur XLD :),

Pas sur d'avoir tout compris mais peux-tu essayer de rajouter :
Code:
ActiveWorkbook.RefreshAll
juste avant le End Sub

A+ à tous
 

Accordially

XLDnaute Nouveau
Re : xl2003.TCD.appliquerla selectiond'un item de colonne du tcd source au tcd cible

Re-Bonjour JCGL,

Malheureusement, l'ajout de ta suggestion semble déclencher une boucle sans fin d'actualisation des TCD du fichier.:confused:

Je continue à chercher de mon côté. Merci encore. Si tu vois autre possibilité, ne te gêne surtout pas.;)

Accordially
 

Accordially

XLDnaute Nouveau
Bonjour à tous
et bonjour JCGL,
merci pour avoir pris du temps pour comprendre ma question.

Ce que je cherche à faire, c'est de décocher le même item "(vide)" de champ de colonne ("Quart") que je viens de décocher dans mon TCD source, pour tous les tcd de mon fichier.
Je n'y arrive malheureusement pas. Voici mon dernier essai :
Code:
Sub Bouton7_QuandClic()
'Mettre à jour les autres tcd du fichier
'pour le même item dans le même champ de colonne
'lorsque l'item "(vide)" dans le champ de colonne "Quart" est décoché
'dans le TCD source ("TCD_TOTAL")

Dim ws As Worksheet
Dim pt As PivotTable
Dim pi As PivotItem
Dim CF As Object
Dim CI As Object

On Error Resume Next
Application.EnableEvents = False
Application.ScreenUpdating = False
    If ActiveSheet.PivotTables("TCD_TOTAL").PivotFields("Quart").PivotItems("(vide)").Visible = False Then
            For Each ws In ThisWorkbook.Worksheets
            For Each pt In ws.PivotTables
                For Each CF In pt.ColumnFields
                    For Each CI In CF.Items
                        c = CI.Name
                        If c.Value = "(vide)" Then
                        c.Visible = False
                        End If
                    Next CI
                Next CF
            Next pt
        Next ws
   End If
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub
Est-ce que quelqu'un peut m'aider ?
Merci d'avance.

Accordially
 

Efgé

XLDnaute Barbatruc
Re : xl2003.TCD.appliquerla selectiond'un item de colonne du tcd source au tcd cible

Bonjour au forum,
Comme j'ai eu besoin de lier deux TCD et que je n'ai pas trouvé de méthode sur XLD pour afficher des items suivant une liste (.PivotItems(i).Visible = True ne fonctionne pas), je met la solution que j'ai trouvée.
C'est un peu tiré par les cheveux mais ça fonctionne.
Code:
[COLOR=blue]Private Sub[/COLOR] Worksheet_Change([COLOR=blue]ByVal[/COLOR] Target [COLOR=blue]As[/COLOR] Range)
Application.ScreenUpdating = [COLOR=blue]False[/COLOR]
[COLOR=green]'On bloque les évennements (Worksheet_Change)[/COLOR]
Application.EnableEvents = [COLOR=blue]False[/COLOR]
[COLOR=green]'On déclare les deux TCD[/COLOR]
[COLOR=blue]Set[/COLOR] TCD1 = Sheets("Feuil1").PivotTables("Tableau croisé dynamique1").PivotFields("Date")
[COLOR=blue]Set[/COLOR] TCD2 = Sheets("Feuil1").PivotTables("Tableau croisé dynamique2").PivotFields("Date")
[COLOR=green]'Avec le TCD qui doit "suivre" l'autre[/COLOR]
[COLOR=blue]With[/COLOR] TCD2
   [COLOR=green]'On supprime le champ[/COLOR]
    .Orientation = xlHidden
   [COLOR=green]'On réactualise les champs du TCD (Ceci va recréer la liste des items tous visibles)[/COLOR]
    [COLOR=blue]For Each[/COLOR] pt [COLOR=blue]In[/COLOR] Sheets("Feuil1").PivotTables
        pt.RefreshTable
    [COLOR=blue]Next[/COLOR]
   [COLOR=green]'On remet le champs à sa place[/COLOR]
    .Orientation = xlRowField
    .Position = 1
[COLOR=blue]End With[/COLOR]
[COLOR=green]'Avec le TCD "Maitre"[/COLOR]
[COLOR=blue]With[/COLOR] TCD1
   [COLOR=green]'On liste les items[/COLOR]
    [COLOR=blue]For[/COLOR] i = 1 [COLOR=blue]To[/COLOR] .PivotItems.Count
       [COLOR=green]'Si l'item n'est pas visible dans le TCD "Maitre"[/COLOR]
        [COLOR=blue]If[/COLOR] .PivotItems(i).Visible = [COLOR=blue]False Then[/COLOR]
       [COLOR=green]'On masque le même item dans le TCD2[/COLOR]
            TCD2.PivotItems(.PivotItems(i).Caption).Visible = [COLOR=blue]False[/COLOR]
        [COLOR=blue]End If[/COLOR]
    [COLOR=blue]Next[/COLOR] i
[COLOR=blue]End With[/COLOR]
Application.EnableEvents = [COLOR=blue]True[/COLOR]
Application.ScreenUpdating = [COLOR=blue]True[/COLOR]
[COLOR=blue]End Sub[/COLOR]
Cordialement
EDIT Pour regarder l'exemple, il faut l'enregistrer. (les TCD ne fonctionnent pas au travers du forum)
EDIT2 Cela ne semble pas fonctionner sous 2007
 

Pièces jointes

  • Classeur1.xls
    30.5 KB · Affichages: 60
  • Classeur1.xls
    30.5 KB · Affichages: 64
  • Classeur1.xls
    30.5 KB · Affichages: 60
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : xl2003.TCD.appliquerla selectiond'un item de colonne du tcd source au tcd cible

Re cotcot, Bonjour Celeda,
Le lien vers le fichier ne fonctionne pas :"La page demandée a provoqué une erreur interne"

Pour 2007, je l'avais vu. De mémoire, il ne veux pas de la ligne
Code:
TCD2.PivotItems(.PivotItems(i).Caption).Visible = [COLOR=blue]False[/COLOR]

En attendant un nouvau lien voici les prérequis:
- Les deux TCD doivent avoir la même plage de données sources
- Les deux champs liés doivent être identiques
- Les items des champs liés doivent être identiques

Cordialement
 

Efgé

XLDnaute Barbatruc
Re : xl2003.TCD.appliquerla selectiond'un item de colonne du tcd source au tcd cible

Re
Bon la situation s'est débloquée, j'ai pu récupérer l'exemple:

Comme je le disais dans mondernier post, il y a des prérequis et dans ton fichier ils ne sont pas respectés. Il faut que la source des deux TCD soit identique, si non le nombre et les noms des items de ton champs "Numéro de marché" risquent de ne pas être strictement identiques (ce qui est d'ailleur le cas). Donc quand on veu masqué un item qui n'existe pas, ça plante, mais vraiment bien (comme dirai Celeda);)
Je ne vois pas de solution de contournement.
Désolé
Cordialement
 

cotcot

XLDnaute Junior
Re : xl2003.TCD.appliquerla selectiond'un item de colonne du tcd source au tcd cible

En fait j'avais changer le nom de la première colonne pour que cela fonctionne mais apparement non? :S
Il n'y aurait pas moyen sinon de modifier le nom de la colonne comme on appliquerait à une cellule un nom spécifique??

Sinon je modifie le nom de la colonne du tableau source du TCD ^^
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : xl2003.TCD.appliquerla selectiond'un item de colonne du tcd source au tcd cible

Re à tous
Il ne s'agit pas simplement d'un problème de nom de champ mais d'un problème de nombre d'items dans le champs.
Si les deux TCD ne sont pas créer à partir de La Même Base, mon code ne fonctionnera pas.
Cordialement
 

cotcot

XLDnaute Junior
Re : xl2003.TCD.appliquerla selectiond'un item de colonne du tcd source au tcd cible

D'accord, je vois!! :S
Et bien si tu as d'autres solutions pour moi, je suis preneur!! En fait je voudrais que lorsque je modifie le tableau de droite et bien cela impacte celui de gauche (enfin je crois que ça tu l'avais bien compris...). En fait je sélectionne mes opérations à droite et à gauche se trouve les éléments constituant le paiment de ces opérations.

Je travails via Business Query et mes données sont dans deux univers différents, donc impossible de les compiler à la base (Business Query, permet pour ceux qui ne connaisse pas, de rapporter des tableaux de données via requête qui se mettent à jour automatiquement à jour dans Excel; très utile lorsqu'on utilise un ERP pour analyser des données en temps réel!). Mais Business Query ne supporte pas le multi-univers... Donc problème!
 

Discussions similaires

Statistiques des forums

Discussions
314 450
Messages
2 109 726
Membres
110 552
dernier inscrit
jasson