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
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