TDC: Actualisation du contenu d'un champs filtré

Bonsoir,

lorsque j'ajoute des lignes dans ma base de données, le TDC filtré sur le champs "N° de Contrat" permettant d'afficher une synthèse pour un contrat ne fonctionne pas correctement pour les dernières lignes enregistrées.

La commande "Actualiser" ne change rien au résultat.

Pour obtenir un affichage correct des dernières lignes insérées dans la base de données, je dois dé filtrer et ensuite re filter le TDC. Les derniers enregistrements s'affichent alors dans le TDC;

J'utilise la macro suivante pour réaliser cette opération.

Sub TDCListUpdate()
' Correction Bug affichage TDC pour un nouveau contrat créé par dédoublement

    Worksheets("Contrat").Select
        ActiveWorkbook.ShowPivotTableFieldList = True
        ActiveSheet.PivotTables("Contrat").PivotFields("N°Contrat").Orientation = xlHidden
        Range("C10").Select
        ActiveSheet.PivotTables("Contrat").PivotCache.Refresh
        With ActiveSheet.PivotTables("Contrat").PivotFields("N°Contrat")
            .Orientation = xlPageField
            .Position = 1
        End With
        ActiveWorkbook.ShowPivotTableFieldList = False
    Worksheets("Saisie").Select

End Sub

Cela fonctionne mais n'est pas très satisfaisant.

Existe-t-il une commande telle que "Actualisé" qui permettrait de re générer l'ensemble du contenu du champs filtré sans avoir à dé filtrer ce champs pour y incorporer les nouveaux enregistrements?

Merci par avance pour votre aide.

Cdt

JMV

Bonjour

Pas besoin de VBA mais simplement paramétrer correctement le champ Contrat : cocher Inclure les nouveaux éléments dans le filtre manuel

Les TCD ont beaucoup évolué à partir de 2010 donc je ne sais si cela existe dans 2007

Bonsoir,

Merci pour le retour.

Sur Excel 2007, j'ai fait la modification du champs N°Contrat en cochant la case "inclure les nouveaux éléments dans le filtre".

Quand j'insère une nouvelle ligne de contrat dans la base, le problème reste le même.

Sur le TDC, quand je clique sur le champs N°Contrat pour voir le liste déroulante , je vois la liste des contrats anciens qui sont rangés dans l'ordre, une ligne "Vide" et en dessous de cette ligne vide, le n° du nouveau contrat.

Autre idée?

Cdt

JMV

Bonjour

Le problème ne reste pas le même puisque tu as le nouveau N°.

Ton champ contrats ne doit pas être en tri automatique dans le TCD, ce pourquoi il se met à la fin

Tout se paramètre dans un TCD...

Ligne vide : tu as des lignes sans numéro de contrat ?

Ou bien tu n'as pas mis ta source sous forme de tableau structuré et créé le TCD sur le tableau ?

Bonjour,

en fait je donne à l'utilisateur deux possibilités d'accéder aux lignes d'un contrat:

1) par Click sur un bouton de menu

2) par Double-click sur la cellule d'une colonne de la base de données qui contient une information indiquant que le contrat porte un numéro et possède plusieurs lignes

Dans le premier cas, j' extrait, je trie et je filtre toutes les lignes de la base pour créer une liste déroulante sans doublon qui ne contient que les lignes portant un n° de contrat. à partir desquelles par double-click sur une ligne, on affiche le TDC filtré pour le N° de contrat choisi. Tout OK

Dans le second cas, le TDC est généré directement à partir de la base de données complète. C'est effectivement dans ce cas que j'ai un problème d'affichage d'affichage des dernières lignes saisies si je ne dé filtre pas le TDC avant de l'afficher avec le filtre sur un N° de contrat à nouveau actif.

Dans ce second cas, en triant et filtrant sur les lignes portant un N° de contrat avant d'afficher le TDC filtré sur un N° de contrat spécifique, l'affichage du résultat est correct sans avoir à dé filtrer le TDC

Un grand merci pour ton aide et les explications.

Cdt

JMV

RE

Dans le second cas, le TDC est généré directement à partir de la base de données complète. C'est effectivement dans ce cas que j'ai un problème d'affichage d'affichage des dernières lignes saisies si je ne dé filtre pas le TDC avant de l'afficher avec le filtre sur un N° de contrat à nouveau actif.

Dans ce second cas, en triant et filtrant sur les lignes portant un N° de contrat avant d'afficher le TDC filtré sur un N° de contrat spécifique, l'affichage du résultat est correct sans avoir à dé filtrer le TDC

Là aussi, comme déjà dit, il suffit de paramétrer le champ Contrat du TCD en tri automatique si plusieurs contrats ce que ta phrase "avant d'afficher le TDC filtré sur un N° de contrat spécifique" semble mettre en doute.

On perd pas mal de temps à échanger dans le vide sans exemple représentatif...

78chris a écrit:

Là aussi, comme déjà dit, il suffit de paramétrer le champ Contrat du TCD en tri automatique si plusieurs contrats ce que ta phrase "avant d'afficher le TDC filtré sur un N° de contrat spécifique" semble mettre en doute.

La base de données comporte des lignes avec n° de contrat et des lignes sans N° de contrat. Je cherche à afficher par TDC toutes les lignes portant le même n° de contrat. Lorsque le clique manuellement sur le champs N° de contrats, la liste triée s'affiche comme suit

2020 12 06 14 11 06 window

On peut voir que le dernier N° de contrat enregistré apparait derrière les contrats n'ayant pas de n° (Vide).

Où se trouve la sélection de tri automatique pour le champs N° de contrat? Je ne l'ai pas trouvée.

Peut-on filtrer pour éliminer les (vide) de la liste déroulante?

Cdt

JMV

RE

Dans un TCD : dérouler la flèche du champ concerné : options de tri supplémentaires. SI c'est un champ de page, le mettre d'abord en étiquette de ligne ou colonne pour pouvoir le paramétrer avant de le replacer en page.

On ne peut éliminer (vide) de la liste déroulante

Merci pour la réponse.

Effectivement, en mettant le champs N° de contrat en étiquette de ligne, on a accès à des options de tri supplémentaire.

J'ai coché la case tri auto ascendant et le dernier n° de contrat apparait bien maintenant avant les (vide).

Par contre, le problème d'affichage, lorsque je choisis l'option par double click sur la colonne 18 n'est pas résolu.

Voici le morceau de code qui active l'affichage du TDC.

Case Is = 18 ' Affiche info détaillées d'un contrat splitté
                    If Cells(Ln, Application.Range("numcontrat")) > 0 Then
                        Num = Cells(Ln, Application.Range("numcontrat"))
                        Application.EnableEvents = False
                        Application.ScreenUpdating = False
                        Application.Range("N°duContrat") = Num
                        Application.Range("NomC") = Cells(Ln, 8)
                        Application.Range("GlobalC") = Cells(Ln, _
                            Application.Range("GlobalTTC"))
                        ' Met à jour TDC
                        Worksheets("Contrat").Select
                        With Worksheets("Contrat")
                            .Unprotect
                            .PivotTables("Contrat").PivotFields("N°Contrat").CurrentPage = Num
                            .Calculate
                            .PivotTables("Contrat").PivotCache.Refresh      
                            FormatDateMois
                        End With
                        Application.ScreenUpdating = True
                    End If

Lorsque je double clique sur la ligne portant le nouveau N° de contrat créé, j'ai un message d'erreur. Ce n° n'existe pas.

Y-a-t- une erreur dans ce code?

Cdt

JMV

RE

Dr toute évidence c'est le code qui donne ce message d'erreur et on n'a pas cette partie du code

Désolé, mais je ne comprends pas ta réponse: avec le même code, je n'ai pas d'erreur pour les autres n° de contrat et l'affichage du TDC se fait correctement.

A mon avis, le problème provient :

- soit de la base de données qui comme je l'ai dit n'est pas filtrée sur le N° de contrat quand on lance à partir du double click sur la cellule colonne 18

- soit de la structure d'affichage du TDC avec le N° de contrat sortie de field list .(voir photo envoyée)

Pour les nouveaux n° de contrat, le seul moyen que j'ai trouvé pour éviter l'erreur, c'est , lors de la création d'un nouveau N° de contrat, de lancer la macro "TDCListUpdate " . C'est la macro envoyée dans le premier message.

Cdt

JMV

Le message qui s'affiche ce n'est pas Excel qui le crée c'est le code donc sans le code ...

Bonsoir,

j'ai préparé un fichier permettant de reproduire et visualiser le problème.

Dans ce fichier les deux dernières lignes correspondent à un contrat rajouté en utilisant le processus de découpe de ligne (N° de contrat 66).

Si on clique sur le dernier bouton du menu 'Afficher Détails", en haut à droite de l'écran, on affiche la liste des contrats contenus dans la base. Par double click sur une ligne, on affiche le détail de ce contrat, toutes les lignes portant le même numéro.

Dans la liste on peut voir que le N° de contrat 66 existe. Si on affiche le TDC correspondant en double cliquant sur la ligne, le contenu du TDC peut être correct ou erroné.

Dans l'onglet Saisie, si on double clique sur une case coloriée en marron de la colonne TR, on affiche le TDC du contrat choisi. Pour le contrat N°66, on a un message d'erreur ou pire Excel plante et se ferme.

Je n'arrive pas à trouver l'erreur dans le code.

Par contre, si j'active la procédure TDCListUpdate contenue dans la feuile FrmDedouble, procédure CmdClose_Click (ligne 700 +), tout se passe correctement.

Merci pour ton aide,

Cdt,

JM

RE

Si on fait appel au TCD non actualisé entre la saisie et l'exploitation du TCD, le nouveau contrat n'est pas dans le cache

Ce que je ne comprends pas c'est comment tu filtres le champ contrat du TCD car pas trouvé de code indiquant la CurrentPage de ce PivotField

Pourquoi tripatouiller ce champ en changeant son orientation ?

Par contre il y a du y avoir un problème car on a 2 fois 1066 et plus 1065...

Bonsoir,

désolé, mais je ne comprends pas la question.

Le champs N° de contrat de la base de données dans l'onglet "Saisie" est en colonne "Z" qui est masquée.

Ce champs est vide ou contient un n° de contrat qui est créé lors de la première découpe d'une ligne de contrat. C'est l'utilisateur qui en cochant une case "Suivi" décide d'attribuer ou non un N° de contrat. Ce N° est ensuite recopié automatiquement à chaque nouvelle découpe. Un contrat peut être découpé en de multiples lignes. Le TDC permet de retrouver toutes les lignes d'un contrat et de suivre sa réalisation en détail.

Le problème se pose lors de l'enregistrement du n° de contrat durant la première découpe. Il semble que le numéro créé ne soit pas reconnu par le TDC malgré le refresh. Le problème parait provenir du fait que le N° de Contrat n'est pas en ligne ou colonne dans le TDC.

Le filtrage du N° de contrat se fait sur la cellule "D6" dans l'onglet "contrat". Existe-il une commande de type "Refresh" qui permet d'actualiser le TDC alors que le champs N° de contrat n'est pas en ligne ou colonne dans le TDC?

Faut t-il obligatoirement mettre le Champs en ligne ou colonne pour actualiser le TDC. C'est ce que fait le module TDCListUpdate que j'ai neutralisé.

J'espère que mes explication te permettent de comprendre où est l'erreur.

Cdt

JMV

RE

Pour filtrer un champ de page d'un TCD il faut un Pivotfield currentpage que je ne trouve pas dans ton code et il faut forcément une actualisation avant si le contrat vient d'être ajouté à la base

Edit ah ce n'est pas dans le fichier joint mais dans le code d'hier.

Attention dans un TCD c'est texte alors que dans la base c'est numérique

Je ne comprends pas pourquoi le champ de page n'est pas stable : soit tu ne filtres rien (donc tous contrats) soit tu filtres sur un Contrat mais le bidouiller en permanence est une mauvaise pratique

Bonjour,

comme expliqué dans le premier message envoyé, quand j'enregistre un nouveau n° de contrat dans la base, je suis obligé, une fois le nouveau n° de contrat inscrit dans le tableau, de défiltrer le TDC, de mettre le champs N° de contrat en ligne dans le TDC et ensuite de faire l'opération inverse pour refiltrer. Dans ce cas, tout fonctionne correctement.

Si je ne fais pas cela, le TDC n'actualise pas le nouveau n° dans sa liste de contrats et l'affichage du TDC par double click est erroné ou peut entrainer un plantage.

Ma question: comment actualiser la liste de N° de contrats dans le TDC sans avoir à "défaire" le TDC.

Cdt,

JMV

RE

Un simple refresh du cache suffit

Rechercher des sujets similaires à "tdc actualisation contenu champs filtre"