Tableau croise macro

  • Initiateur de la discussion Initiateur de la discussion nic81
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

N

nic81

Guest
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

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

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
 
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
 
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.
 
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
 
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
@+
 
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
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
12
Affichages
353
Réponses
18
Affichages
603
Réponses
2
Affichages
238
Retour