problème colonne tableau croisé dynamique avec macro

sephaniy

XLDnaute Nouveau
Bonjour, j'ai ENCORE un problème sur ma macro, ça commence à m'énerver.

En faite, j'ai créer un tableau croisé dynamique où je décoche et ensuite coche des champs (qui corresponde à mes colonnes).
Je fais ensuite un copier/coller sur autres fauilles où les calculs sont automatisés pour me donner un tableau final.

Mon problème est que j'ai créé une macro pour tout automatiser (pour l'instant tout va bien). Mais quand la macro déroule et qu'un champ de mon TCD s'est rajouté ou a disparu, il beug.
En faite, j'aimerais avoir la possibilité de décocher tel argument de la colonne si il est là, pour garder que 2 éléments qui m'interresse.

Je m'explique, j'ai une extraction EXCEL, je dois créer un TCD, mais seul 2 champs m'interesse
exemple : vélo et VTT
Donc, je ne veux que ses 2 champs sélectionnés.

Donc, je décoche les autres.
Exemple : voiture, à pied...
Mais que faire quand il n'y a plus voiture dans l'extraction excel. Je voudrais donc, que la macro passe à l'étape suivante si il n'y a pas voiture.


Voici mon VBA:

'Création du TCD
ActiveSheet.PivotTables("Tableau croisé dynamique23").AddDataField ActiveSheet. _
PivotTables("Tableau croisé dynamique23").PivotFields( _
"appli / appli / appli / appli"), "Nombre de appli / appli / appli / appli", _
xlCount
ActiveWorkbook.ShowPivotTableFieldList = False
ActiveSheet.PivotTables("Tableau croisé dynamique23").PivotSelect _
"'rien / Date depot / rien / rien'[All;Total]", xlDataAndLabel, True
Selection.Delete

'Voici le problème de mes colonnes décochées
With ActiveSheet.PivotTables("Tableau croisé dynamique23").PivotFields( _
"Traitement")
.PivotItems("voiture").Visible = False
.PivotItems("a pied").Visible = False
.PivotItems("moto").Visible = False
.PivotItems("mobilette").Visible = False
.PivotItems("autre").Visible = False
End With

Merci
 

Pierrot93

XLDnaute Barbatruc
Re : problème colonne tableau croisé dynamique avec macro

Bonsoir Sephanie,

regarde le code ci dessous, nom de feuille et tcd à adapter :

Code:
Sub test()
Dim p As PivotItem
Application.ScreenUpdating = False
With Feuil1.PivotTables(1).PivotFields("Traitement")
    For Each p In .PivotItems
        p.Visible = True
    Next p
    For Each p In .PivotItems
        If p.Value <> "vélo" And p.Value <> "VTT" Then p.Visible = False
    Next p
End With
Application.ScreenUpdating = True
End Sub

bonne soirée
@+
 

Pierrot93

XLDnaute Barbatruc
Re : problème colonne tableau croisé dynamique avec macro

Bonjour,

ci dessous code commenté :

Code:
Option Explicit
Sub test()
'déclaration d'une variable objet de type "PivotItem"
Dim p As PivotItem
'neutralisation du rafraichissement d'écran
Application.ScreenUpdating = False
'bloc "with" permettant l'exécution d'une série d'instructions
'sur le champ "traitement" du TCD (pivottables) 1 placé sur la feuille 1(code name de
'la feuille et non le nom de l'onglet
With Feuil1.PivotTables(1).PivotFields("Traitement")
    'boucle sur tous les items du champ "traitement"
    For Each p In .PivotItems
        'rend visible l'items
        p.Visible = True
    'item suivant
    Next p
    '2ème boucle sur les items du champ "traitement"
    For Each p In .PivotItems
        'si item différent de "vélo" ou de "VTT" alors il est masqué
        If p.Value <> "vélo" And p.Value <> "VTT" Then p.Visible = False
    'item suivant
    Next p
End With
'mise à joutr de l'écran réactivée
Application.ScreenUpdating = True
End Sub

pour plus d'info sur un mot vba, tu place ton curseur sur ce mot, et touche de fonction F1, ouvre l'aide vba qui t'en dira plus.

bonne journée
@+
 

sephaniy

XLDnaute Nouveau
Re : problème colonne tableau croisé dynamique avec macro

je suis désolé, mais j'y arrive pas. Mon TCD beug

voici ce que j'ai sous VBA

'création TCD
Dim p As PivotItem
Application.ScreenUpdating = False
With ActiveSheet.PivotTables("Tableau croisé dynamique21").PivotFields( _
"Traitement")
For Each p In .PivotItems
p.Visible = True
Next p
For Each p In .PivotItems
If p.Value <> "SILOE V3 entrée" And p.Value <> "SILOE V3 sortie" Then p.Visible = False

'il me dit : Erreur de complilation: End With sans With. Pourtant, j'ai bien mis with
End With
Application.ScreenUpdating = True
'Fin création TCD

SILOE V3 entrée et SILOE V3 sortie sont les 2 éléments (que je veux garder) de mes
colonnes dans mon TCD.
J'aimerais que les éléments: SILOE V3 ouverture ou ETIKHUB entrée, ETIKHUB ouverture.. ne soient pas présent dans mon TCD (si ils sont présents dans mon extraction EXCEL, ce qui n'est pas toujours le cas).

Peux tu encore m'aider Pierrot93
 

Pierrot93

XLDnaute Barbatruc
Re : problème colonne tableau croisé dynamique avec macro

Re

il manque un "next p" :

Code:
'création TCD
Dim p As PivotItem
Application.ScreenUpdating = False
With ActiveSheet.PivotTables("Tableau croisé dynamique21").PivotFields( _
"Traitement")
For Each p In .PivotItems
p.Visible = True
Next p
For Each p In .PivotItems
If p.Value <> "SILOE V3 entrée" And p.Value <> "SILOE V3 sortie" Then p.Visible = False
[B][COLOR="Red"]Next p[/COLOR][/B]
'il me dit : Erreur de complilation: End With sans With. Pourtant, j'ai bien mis with
End With
Application.ScreenUpdating = True
'Fin création TCD

bonne fin d'après midi
@+
 

Jessyline

XLDnaute Nouveau
Re : problème colonne tableau croisé dynamique avec macro

Bonjour Pierrot.

Excuse de te deranger, mais g un probleme avec le code ci-dessus qd j'essaye de l'adapter a mon cas (je debute aussi en VBA ):

Sub TCDtest2()

Dim wb As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet
'déclaration d'une variable objet de type "PivotItem"
Dim p As PivotItem
Dim Tcd As PivotTable

'neutralisation du rafraichissement d'écran
Application.ScreenUpdating = False
'affectation des variables
Set wb = ActiveWorkbook
Set ws1 = Sheets("accessibility KPI at BH")
Set ws2 = Sheets("retainability and qos kpi at BH")

wb.RefreshAll
ws1.Activate

'bloc "with" permettant l'exécution d'une série d'instructions
'sur le champ "traitement" du TCD (pivottables) 1 placé sur la feuille 1(code name de
'la feuille et non le nom de l'onglet : je ne comprends pas bien la différence
With ws1.PivotTables(1).PivotFields("Date")
'boucle sur tous les items du champ "traitement"
For Each p In .PivotItems
'rend visible l'items
p.Visible = True:confused:
'là je suis bloquée avec le message suivant : Run-time error '1004' :
'Unable to set the visible property of the pivotitem class

'item suivant
Next p
'2ème boucle sur les items du champ "traitement"
For Each p In .PivotItems
'si item différent de "date-1" alors il est masqué
If CDate(p.value2) <> date-1 Then p.Visible = False
'item suivant
Next p
End With
'mise à joutr de l'écran réactivée
Application.ScreenUpdating = True
End Sub

De plus, comme tu le vois, g 2 feuilles contenant des TCD a mettre a jour (tous avec un seul item : la date de la veille) et j'aimerai savoir comment effectuer cette operation en une seule boucle pour les deux feuilles, sachant que qd on selectionne plusieurs feuilles en mm tps les options des TCD ne sont plus modifiables. Peux-tu m'aider stp?


NB: SURTOUT NE VOUS SENTEZ PAS EXCLU DE CETTE DISCUSSION : TOUTE CONTRIBUTION SERA LA BIENVENUE D'OU QUELLE VIENNE.:)
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 299
Membres
103 173
dernier inscrit
Cerba95