TCD et champ calculé
Bonjour
J'ai un petit fichier de suivi des demandes de remboursement par personne. Le budget maximum attribué est de 130 €.
Avec un TCD, je remonte les totaux par région / périmètre / personne et j'ai inséré un champ calculé pour afficher la différence entre le total des dépenses et le budget de 130 € attribué.
Ce même calcul est reporté dans les lignes horizontales de totaux.... ce qui fausse la lecture.
Y a-t-il un moyen de ne rien afficher dans les lignes de taux pour le champ calculé ?
Je joins un exemple.
Question subsidiaire : Le TCD ne s'actualise pas dès la saisie d'une donnée dans la source. En cherchant sur le forum, je n'ai trouvé comme solution que l'insertion d'une macro... Y aurait-il une autre solution ?
Merci de votre aide.
Bonjour,
Essaie ainsi et supprime toutes les procédures existantes de ton classeur..
Le TCD est mis à jour dès l'activation de le feuille "Dépenses du C.C.E.".
Ton CommandButton est donc inutile.
Ces 2 procédures sont à copier dans le module de la feuille ""
Cdlt.
Option Explicit
Private Sub Worksheet_Activate()
Me.PivotTables(1).PivotCache.Refresh
End Sub
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim rw As Long, cn As Long
With Target
.DataBodyRange.NumberFormat = "#,##0.00 $"
rw = .TableRange1.Cells(1).Offset(.TableRange1.Rows.Count - 3, 0).Row
cn = .TableRange1.Cells(1).Offset(0, .TableRange1.Columns.Count - 6).Column
.TableRange1.Cells(rw, cn).NumberFormat = ";;;"
End With
End Sub
Bonjour,
Question subsidiaire : Le TCD ne s'actualise pas dès la saisie d'une donnée dans la source. En cherchant sur le forum, je n'ai trouvé comme solution que l'insertion d'une macro... Y aurait-il une autre solution ?
C'est fait exprès. Le rafraichir à chaque changement prendrait trop de ressources, c'est donc manuel ou par macro.
Il faut faire 'Actualiser' dans le menu contextuel (clic-droit sur le TCD)
eric
Jean-Eric a écrit :Bonjour,
Essaie ainsi et supprime toutes les procédures existantes de ton classeur..
Le TCD est mis à jour dès l'activation de le feuille "Dépenses du C.C.E.".
Ton CommandButton est donc inutile.
Ces 2 procédures sont à copier dans le module de la feuille ""
Cdlt.
Option Explicit Private Sub Worksheet_Activate() Me.PivotTables(1).PivotCache.Refresh End Sub Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) Dim rw As Long, cn As Long With Target .DataBodyRange.NumberFormat = "#,##0.00 $" rw = .TableRange1.Cells(1).Offset(.TableRange1.Rows.Count - 3, 0).Row cn = .TableRange1.Cells(1).Offset(0, .TableRange1.Columns.Count - 6).Column .TableRange1.Cells(rw, cn).NumberFormat = ";;;" End With End Sub
Bonjour
Je n'ai pas dû comprendre... J'ai supprimé la macro, collé les deux procédures dans un module, et rien ne se passe :-/
eriiic a écrit :Bonjour,
Question subsidiaire : Le TCD ne s'actualise pas dès la saisie d'une donnée dans la source. En cherchant sur le forum, je n'ai trouvé comme solution que l'insertion d'une macro... Y aurait-il une autre solution ?
C'est fait exprès. Le rafraichir à chaque changement prendrait trop de ressources, c'est donc manuel ou par macro.
Il faut faire 'Actualiser' dans le menu contextuel (clic-droit sur le TCD)
eric
Bonjour
Je savais qu'il suffisait de faire clic-droit Actualiser sur le TCD mais je ne sais pas si les personnes qui utiliseront ce fichier le savent également. Je trouvais plus simple de mettre un bouton plutôt que de risquer qu'ils interviennent sur le TCD.
Comment je peux savoir ce que tu sais et ce que tu ignores ?
Tu n'as pas demandé si autre choix que manuel ou par macro d'où ma réponse...
eriiic a écrit :Comment je peux savoir ce que tu sais et ce que tu ignores ?
Tu n'as pas demandé si autre choix que manuel ou par macro d'où ma réponse...
Certes
Jean-Eric a écrit :Re,
Je voulais écrire dans le module de la feuille "Dépenses du C.C.E."
Cdlt.
Ca ne fonctionne toujours pas. Quand j'ouvre ton fichier, les sous-totaux et totaux y sont toujours.
Re,
Essaie ainsi :
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim Cell As Range
Dim rw As Long, cn As Long
Application.ScreenUpdating = False
With Target
.DataBodyRange.NumberFormat = "#,##0.00 $"
For Each Cell In .PivotFields("Région").DataRange
If Cell Like "Total*" Then
rw = Cell.Row - 2
cn = .TableRange1.Cells(1).Offset(0, .TableRange1.Columns.Count - 6).Column
.TableRange1.Cells(rw, cn).NumberFormat = ";;;"
End If
Next Cell
For Each Cell In .PivotFields("Périmétre").DataRange
If Cell Like "Total*" Then
rw = Cell.Row - 2
cn = .TableRange1.Cells(1).Offset(0, .TableRange1.Columns.Count - 6).Column
.TableRange1.Cells(rw, cn).NumberFormat = ";;;"
End If
Next Cell
rw = .TableRange1.Cells(1).Offset(.TableRange1.Rows.Count - 3, 0).Row
.TableRange1.Cells(rw, cn).NumberFormat = ";;;"
End With
End Sub
Jean-Eric a écrit :Re,
Essaie ainsi :
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) Dim Cell As Range Dim rw As Long, cn As Long Application.ScreenUpdating = False With Target .DataBodyRange.NumberFormat = "#,##0.00 $" For Each Cell In .PivotFields("Région").DataRange If Cell Like "Total*" Then rw = Cell.Row - 2 cn = .TableRange1.Cells(1).Offset(0, .TableRange1.Columns.Count - 6).Column .TableRange1.Cells(rw, cn).NumberFormat = ";;;" End If Next Cell For Each Cell In .PivotFields("Périmétre").DataRange If Cell Like "Total*" Then rw = Cell.Row - 2 cn = .TableRange1.Cells(1).Offset(0, .TableRange1.Columns.Count - 6).Column .TableRange1.Cells(rw, cn).NumberFormat = ";;;" End If Next Cell rw = .TableRange1.Cells(1).Offset(.TableRange1.Rows.Count - 3, 0).Row .TableRange1.Cells(rw, cn).NumberFormat = ";;;" End With End Sub
Bonsoir
Cela fonctionne, merci ! Je "n'ai plus qu'à" décrypter le code pour pouvoir l'aménager sur mon fichier complet.
Merci de ton aide.