Modifier un croisé dynamique existant avec une macro vba

satfilter

XLDnaute Nouveau
Bonjour,
j'ai une macro qui traite des données et enregistre les résultats dans un classeur.
Dans ce classeur, j'ai donc une feuille "Données" et une feuille "RECAP" ou j'ai fait un tableau croisé dynamique pour syntétiser.
Dans la zone valeur, j'ai 4 champs, dont 2 qui sont variables en fonction du mois en cours.
Je voudrai que ces 2 champs variables soit positionnées automatiquement par la macro.
Dans ma macro, je récupère dans une variable le numéro de la colonne a traiter par :
Col = (Format(Date, "mm") * 1) + 81
dCol = (Format(Date, "mm") * 1) + 105
En gros j'aimerai que mon croisé dynamique récupère le champs correspondant au numéro dans la zone valeurs avec pour paramètre un affichage en Somme, et une mise en forme du nombre en Monétaire.

Merci pour votre aide
A+
 

satfilter

XLDnaute Nouveau
Re : Modifier un croisé dynamique existant avec une macro vba

En piece jointe les fichiers concernés.
Le TCD se trouve dans CompteDanger en feuille récap.
C'est les colonnes D et E du TCD que je voudrai intégrer en fonction du mois en cours.
Merci pour votre aide
A+
 

Pièces jointes

  • ComptesBudgetaires2.xls
    21.5 KB · Affichages: 36
  • ComptesDanger.xlsx
    179.3 KB · Affichages: 51

chris

XLDnaute Barbatruc
Re : Modifier un croisé dynamique existant avec une macro vba

Re

Modifier la structure d'un TCD est un peu lourd.
L'enregistreur de macros peut te donner la syntaxe pour supprimer un champ de valeur et en recréer un.

Néanmoins une autre piste peut être d'utiliser la source d'origine, d'y ajouter 3 colonnes de formules :
  1. une colonne, qui en fonction de ton ratio de 0.8 mette 1 ou 0
  2. une colonne qui reprend la valeur du bon mois Cmtbpm08 ou Cmtbpm07 ou...
  3. idem pour Cmtelmmxx
Tu pourrais ainsi

  • placer en zone de filtrer la colonne citée en 1 afin de n'afficher dans le TCD que les comptes qui t'intéressent
  • avoir un TCD bati sur les colonnes citées en 2 et 3 (pour la partie variable) et qui donc ne nécessite pas de casser et refaire
 

satfilter

XLDnaute Nouveau
Re : Modifier un croisé dynamique existant avec une macro vba

Re
merci pour la réponse.
Je vais essayer l'enregistreur car je ne souhaite pas toucher a la source.
Par contre, j'ai jamais utilisé l'enregistreur, ça fait vraiment pas longtemps que je pratique du VBA, je viens du C++ (ya déjà quelques années).
Du coup c'est facile d'utiliser l'enregistreur?Ca fait pas nimporte quoi au niveau du code, genre les softs wisiwig?
Je regarderai ça demain au boulot.
En tous cas merci.
A+
 

satfilter

XLDnaute Nouveau
Re : Modifier un croisé dynamique existant avec une macro vba

Salut
J'ai utiliser l'enregistreur quime génère le code suivant :
Code:
Workbooks.Open dFic
    ActiveWorkbook.ShowPivotTableFieldList = True
    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Somme de Cmtbpm" & Month - 1).Orientation = xlHidden
    ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Cmtbpm" & Month), "Nombre de Cmtbpm" & Month, xlCount
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Nombre de Cmtbpm" & Month)
        .Caption = "Somme de Cmtbpm" & Month
        .Function = xlSum
        .NumberFormat = "# ##0,00 €"
    End With
    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Somme de Cmtelmm" & Month - 1).Orientation = xlHidden
    ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Cmtelmm" & Month), "Nombre de Cmtelmm" & Month, xlCount
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Nombre de Cmtelmm" & Month)
        .Caption = "Somme de Cmtelmm" & Month
        .Function = xlSum
        .NumberFormat = "# ##0,00 €"
    End With

J'obiens l'erreur 1004 - Impossible de lire la propriété PivotFields de la classe PivotTable
Sinon, le codé généré a l'air pas trop mal.
Merci pour votre aide
A+
 

satfilter

XLDnaute Nouveau
Re : Modifier un croisé dynamique existant avec une macro vba

Bon j'ai déclaré la variable Month en String, cela fonctionne.
Le truc c'est que les champs que je veux supprimer ne seront plus les memes le premier jour du mois prochain.
Je vais continuer de chercher la solution mais j'aurai préféré supprimer les champs en fonction de leur index de colonne (D et E).
A+
 

satfilter

XLDnaute Nouveau
Re : Modifier un croisé dynamique existant avec une macro vba

N'y aurait-il pas un moyen d'utiliser la fonction PivotFields avec pour parametre juste une partie de la chaine de caractères genre :
.PivotFields( contient "Cmtbpm" ).Orientation = xlHidden

??
 

chris

XLDnaute Barbatruc
Re : Modifier un croisé dynamique existant avec une macro vba

Bonjour

Impec.

Sinon tu peux aussi :
  • soit utiliser les index : les champs sont indexés et donc tu supprimes le nième champ et le remplace par un autre qui va reprendre le même numéro d'index
  • soit construire le nom en concaténant la partie texte et le nombre qui correspond au mois concerné.
 

Discussions similaires

Réponses
25
Affichages
664

Statistiques des forums

Discussions
311 730
Messages
2 081 978
Membres
101 854
dernier inscrit
micmag26