Tableau croise macro

nic81

XLDnaute Junior
Bonjour

je fais plusieurs TBC tous les mois pour mon travail. J'ai trouvé une macro qui permet de modifier les données des colonnes mais les lignes disparaissent.
Est ce qu'il y aurait une possibilité de conserver les lignes.
Petit exemple dans le fichier joint

Je vous remercie de votre aide

Bonne journée
 

Pièces jointes

  • tbc.xls
    36 KB · Affichages: 61

nic81

XLDnaute Junior
Re : Tableau croise macro

bonjour

Voila le fichier

je fais plusieurs TBC tous les mois pour mon travail. J'ai trouvé une macro qui permet de modifier les données des colonnes mais les lignes disparaissent.
Est ce qu'il y aurait une possibilité de conserver les lignes.
Merci beaucoup de votre aide
 

Pièces jointes

  • ESSAI FORMULE2.xls
    39 KB · Affichages: 107
  • ESSAI FORMULE2.xls
    39 KB · Affichages: 111
  • ESSAI FORMULE2.xls
    39 KB · Affichages: 104

nic81

XLDnaute Junior
Re : Tableau croise macro

Bonjour

Merci pour la formule mais le champ as s'affiche à côté de ac, je souhaiterais qu'il le remplace

Merci de votre aide
 

Pièces jointes

  • ESSAI FORMULE2.xls
    38.5 KB · Affichages: 83
  • ESSAI FORMULE2.xls
    38.5 KB · Affichages: 83
  • ESSAI FORMULE2.xls
    38.5 KB · Affichages: 79

nic81

XLDnaute Junior
Re : Tableau croise macro

Merci beaucoup PIERROT 93

La formule fontionne très bien ,mais j'ai 28 champs de colonnes à modifier
sachant que ce ne sera pas toujours AS et AC
Modifier le champ de colonne AS par AZ (etc) ne me pose pas de problème mais c'est le champ AC car j'ignore ce qui se trouvera en dernier (AC AZ AS).
Ce fichier est manipulé par 30 personnes
Est ce que l'on peut remplacer ("ac") par une adresse j'ai essayé l'adresse de la ligne et de la colonne où se trouve AC mais erreur


Sheets("base").PivotTables(2).PivotFields("as").Orientation = xlColumnField

With Sheets("base").PivotTables(1)
.PivotFields(AC").Orientation = xlColumnField
.PivotFields("AC").Orientation = xlHidden
End With

Encore merci de vous pencher sur mon fichier
 

Pierrot93

XLDnaute Barbatruc
Re : Tableau croise macro

Re,

pas tout compris, mais essaye ceci, dans l'exemple ci-dessous le nom des champs est sur la feuille active et les cellules sont bien sur en dehors du TCD...
Code:
With Sheets("base").PivotTables(1)
    .PivotFields(Range("A1").Value).Orientation = xlColumnField
    .PivotFields(Range("B1").Value).Orientation = xlHidden
End With
 

tbft

XLDnaute Accro
Re : Tableau croise macro

Bonjour

avec l'aide de ce forum, j'ai écris des macros qui permettent de lire (ou d'écrire) quels sont les champs d'un TCD utilisé dans les données colonnes, lignes, page et valeurs.
si cela t'intéresse dis le moi.
 

nic81

XLDnaute Junior
Re : Tableau croise macro

bonjour TBFT
bonjour Pierrot 93

Ces macros m'interessent, je te remercie beaucoup.

Avec l'aide de PIERROT 93, nous avons fait cette macro, mais je souhaiterais ajouter un élement, je ne sais pas si c'est possible

PAR EXEMPLE DANS LA MACRO SUIVANTE

Si:) PivotFields = ("cible pfmi").alors ne pas supprimer sinon
PivotFields(Range("D7").Value).Orientation = xlHidden


Sub macroaspfmi()

Sheets("couv pfmi").Select
Sheets("couv pfmi").PivotTables(1).PivotFields("année scolaire pfmi").Orientation = xlColumnField

With Sheets("couv pfmi").PivotTables(1)
.PivotFields(Range("e6").Value).Orientation = xlColumnField
.PivotFields(Range("e6").Value).Orientation = xlHidden
End With

Sheets("couv pfmi").PivotTables(1).PivotFields("cible pfmi").Orientation = xlRowField

With Sheets("couv pfmi").PivotTables(1)
.PivotFields(Range("D7").Value).Orientation = xlRowField
.PivotFields(Range("D7").Value).Orientation = xlHidden
End With
End Sub

Merci beaucoup à vous tous de votre aide

Bonne journée
 

Pierrot93

XLDnaute Barbatruc
Re : Tableau croise macro

Bonjour Nicole

dans ton code je vois :
Code:
With Sheets("couv pfmi").PivotTables(1)
.PivotFields(Range("D7").Value).Orientation = xlRowField
.PivotFields(Range("D7").Value).Orientation = xlHidden
End With

en fait une seule ligne doit suffire, soit tu affiche le champ en colonne, soit tu le masque, il est vrai que dans un de mes post je n'avais point modifié un des nom de champ, d'où l'ambiguité...

par contre pas trop bien compris ta nouvelle question....

bonne journée
@+
 

tbft

XLDnaute Accro
Re : Tableau croise macro

Bonjour

Voici mes macros pour lire les champs d'un TCD
VB:
Private Function Lire_Champs_TCD(TCD As PivotTable)
'lecture de tous les champs disponibles
Dim nb As Long, i As Long
Dim res() As String
  nb = TCD.PivotFields.Count
  If nb <> 0 Then
    ReDim res(nb)
    For i = 1 To nb
      res(i) = TCD.PivotFields(i).Name
    Next i
    Lire_Champs_TCD = res
  Else
    Lire_Champs_TCD = Empty
  End If
End Function

Private Function Lire_Champs_TCD_Colonne(TCD As PivotTable)
'lecture des champs de type colonne
Dim nb As Long, i As Long
Dim res() As String
Dim toto As Boolean
  nb = TCD.ColumnFields.Count
  If (nb <> 0) And (TCD.ColumnFields(1).Name <> "Données") Then
    If TCD.ColumnFields(nb).Name = "Données" Then nb = nb - 1
    ReDim res(nb)
    For i = 1 To nb
      res(i) = TCD.ColumnFields(i).Name
      If Lire_Sous_Totaux(TCD, res(i)) Then res(i) = res(i) + TCD_Tag_Sous_Total
    Next i
    Lire_Champs_TCD_Colonne = res
  Else
    Lire_Champs_TCD_Colonne = Empty
  End If
End Function

Private Function Lire_Champs_TCD_Ligne(TCD As PivotTable)
'lecture des champs de type ligne
Dim nb As Long, i As Long
Dim res() As String
  nb = TCD.RowFields.Count
  If (nb <> 0) And (TCD.RowFields(1).Name <> "Données") Then
    If TCD.RowFields(nb).Name = "Données" Then nb = nb - 1
    ReDim res(nb)
    For i = 1 To nb
      res(i) = TCD.RowFields(i).Name
      If Lire_Sous_Totaux(TCD, res(i)) Then res(i) = res(i) + TCD_Tag_Sous_Total
    Next i
    Lire_Champs_TCD_Ligne = res
  Else
    Lire_Champs_TCD_Ligne = Empty
  End If
End Function

Private Function Lire_Champs_TCD_Page(TCD As PivotTable)
'lecture de filtre de page
Dim nb As Long, i As Long
Dim res() As String
  nb = TCD.PageFields.Count
  If nb <> 0 Then
    ReDim res(nb)
    For i = 1 To nb
      res(i) = TCD.PageFields(i).Name
    Next i
    Lire_Champs_TCD_Page = res
  Else
    Lire_Champs_TCD_Page = Empty
  End If
End Function

Private Function Lire_Champs_TCD_Valeur(TCD As PivotTable)
'lecture des champs données
Dim nb As Long, i As Long
Dim res() As String
  nb = TCD.DataFields.Count
  If nb <> 0 Then ReDim res(nb)
  For i = 1 To nb
    res(i) = TCD.DataFields(i).Name
  Next i
  If nb = 0 Then Lire_Champs_TCD_Valeur = Empty Else Lire_Champs_TCD_Valeur = res
End Function

pour écrire
VB:
Private Sub Ecrire_Champs_TCD_Colonne(TCD As PivotTable, Liste)
Dim nb As Long, i As Long, tag As Boolean
  Do While TCD.ColumnFields.Count <> 0
    TCD.ColumnFields(1).Orientation = xlHidden
  Loop
  If Not IsEmpty(Liste) Then
    nb = UBound(Liste)
    For i = 1 To nb
      tag = (InStrRev(Liste(i), TCD_Tag_Sous_Total) > 0)
      If tag Then Liste(i) = Left(Liste(i), InStr(1, Liste(i), TCD_Tag_Sous_Total) - 1)
      With TCD.PivotFields(Liste(i))
        .Orientation = xlColumnField
        .Subtotals = Array(tag, False, False, False, False, False, False, False, False, False, False, False)
      End With
    Next i
  End If
End Sub

Private Sub Ecrire_Champs_TCD_Ligne(TCD As PivotTable, Liste)
Dim nb As Long, i As Long, tag As Boolean
  Do While TCD.RowFields.Count <> 0
    TCD.RowFields(1).Orientation = xlHidden
  Loop
  If Not IsEmpty(Liste) Then
    nb = UBound(Liste)
    For i = 1 To nb
      tag = (InStrRev(Liste(i), TCD_Tag_Sous_Total) > 0)
      If tag Then Liste(i) = Left(Liste(i), InStr(1, Liste(i), TCD_Tag_Sous_Total) - 1)
      With TCD.PivotFields(Liste(i))
        .Orientation = xlRowField
        .Subtotals = Array(tag, False, False, False, False, False, False, False, False, False, False, False)
      End With
    Next i
  End If
End Sub

Private Sub Ecrire_Champs_TCD_Page(TCD As PivotTable, Liste)
Dim nb As Long, i As Long
  Do While TCD.PageFields.Count <> 0
    TCD.PageFields(1).Orientation = xlHidden
  Loop
  If Not IsEmpty(Liste) Then
    nb = UBound(Liste)
    For i = 1 To nb
      TCD.PivotFields(Liste(i)).Orientation = xlPageField
    Next i
  End If
End Sub

Private Sub Ecrire_Champs_TCD_Valeur(TCD As PivotTable, Liste)
Dim nb As Long, i As Long
  Do While TCD.DataFields.Count <> 0
    TCD.DataFields(1).Orientation = xlHidden
  Loop
  If Not IsEmpty(Liste) Then
    nb = UBound(Liste, 1)
    For i = 1 To nb
      With TCD.PivotFields(Liste(i, 1))
        .Orientation = xlDataField
        .Caption = Liste(i, 2) + TCD_Fonction_Séparation + Liste(i, 1)
        If Not IsEmpty(Liste(i, 3)) Then .Function = Liste(i, 3)
      End With
    Next i
  End If
End Sub
 

nic81

XLDnaute Junior
Re : Tableau croise macro

Bonjour Pierrot

Merci de me répondre, je joins un fichier excel avec les explications, j'espère que tu comprendras

Evidemment je ne sais pas si ce que je demande est possible

En tout cas merci beaucoup de l'aide que tu m'as déjà apporté
 

Pièces jointes

  • EXEMPLES.xls
    31 KB · Affichages: 63
  • EXEMPLES.xls
    31 KB · Affichages: 61
  • EXEMPLES.xls
    31 KB · Affichages: 60

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 338
Messages
2 087 397
Membres
103 536
dernier inscrit
komivi