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.

21test.xlsm (26.56 Ko)

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.

Re,

Je voulais écrire dans le module de la feuille "Dépenses du C.C.E."

Cdlt.

21test.xlsm (25.81 Ko)

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.

Rechercher des sujets similaires à "tcd champ calcule"