Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Le TCD renvoi des valeurs érronnées !?!

1 réponse
Avatar
Chris
Bonjour à tous,

Et merci d'avance à ceux qui pourront m'aider à résoudre cette énigme ...
J'utilise EXCEL 2003 avec VBA 6.3.

1- J'exploite une "grosse base de données" à l'aide d'un TCD (54 Colonnes x
20000 lignes).
2- Ce TCD est lui même manipulé par une macro VBA qui boucle environ 1000
fois et qui ne fait que sélectionner certaines valeurs dans les champs de
tête du TCD, puis copie certaines informations dans un tableau final.
3- Tout cela se déroule bien. Sauf que lorsque je vérifie le résultat,
je m'aperçois que pour certain cas le TCD me renvoi une valeur existante
dans la base donnée mais qui n'est pas celle associée à mes critère de champs.

Par exemple, pour la valeur "A" il y a la valeur "3" dans la base de donnée
mais le TCD renvoi "8". Et pourtant, lorsque je double clic sur le TCD pour
obtenir l'extract, A et 8 son bien associés. Vraiment étrange!

La seule parade que j'ai trouvé est de refabriquer le TCD à chaque loop.
Malheureusement cela porte mon temps de calcul à une perte d'un jour .

Encore merci de m'apporter vos solutions si vous avez rencontré un cas
similaire.

Chris

1 réponse

Avatar
michdenis
Bonjour Chris,

Une solution de Debra Dalgleish et compléter par Daniel Maher.

à la fin de ta procédure qui boucle, appelle celle-ci :


'------------------------------------
Sub DeleteOldItemsWB()
'gets rid of unused items in PivotTable based on MSKB (Q202232)
'had to go through procedure twice to clear items (for i= 1 to 2)
' Désactiver l'actualisation de l'écran (exécution plus rapide de la
macro)
Application.ScreenUpdating = False
' Désactiver le calcul automatique
Application.Calculation = xlCalculationManual
Application.CalculateBeforeSave = False
' Déclarer les variables
Dim ws As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim i As Integer
' Supprimer les éléments de tous les champs, de tous les tableaux
croisés dynamiques
On Error Resume Next
For i = 1 To 2
For Each ws In ActiveWorkbook.Worksheets
For Each pt In ws.PivotTables
For Each pf In pt.PivotFields
For Each pi In pf.PivotItems
pi.Delete
Next
Next
pt.RefreshTable
Next
Next
Next
' Activer l'actualisation de l'écran
Application.ScreenUpdating = True
' Activer le calcul automatique
Application.Calculation = xlAutomatic
Application.CalculateBeforeSave = True
Msg = Msg & "La macro est terminée !"
MsgBox Msg, vbInformatin, "Rafraîchir les listes déroulantes d'un
tableau croisé dynamique"
End Sub
'------------------------------------



"Chris" a écrit dans le message de groupe de discussion
:
Bonjour à tous,

Et merci d'avance à ceux qui pourront m'aider à résoudre cette énigme ...
J'utilise EXCEL 2003 avec VBA 6.3.

1- J'exploite une "grosse base de données" à l'aide d'un TCD (54 Colonnes x
20000 lignes).
2- Ce TCD est lui même manipulé par une macro VBA qui boucle environ 1000
fois et qui ne fait que sélectionner certaines valeurs dans les champs de
tête du TCD, puis copie certaines informations dans un tableau final.
3- Tout cela se déroule bien. Sauf que lorsque je vérifie le résultat,
je m'aperçois que pour certain cas le TCD me renvoi une valeur existante
dans la base donnée mais qui n'est pas celle associée à mes critère de champs.

Par exemple, pour la valeur "A" il y a la valeur "3" dans la base de donnée
mais le TCD renvoi "8". Et pourtant, lorsque je double clic sur le TCD pour
obtenir l'extract, A et 8 son bien associés. Vraiment étrange!

La seule parade que j'ai trouvé est de refabriquer le TCD à chaque loop.
Malheureusement cela porte mon temps de calcul à une perte d'un jour .

Encore merci de m'apporter vos solutions si vous avez rencontré un cas
similaire.

Chris