OVH Cloud OVH Cloud

mettre à jour la source de données d'un pivot en VBA depuis Access

1 réponse
Avatar
karl
Bonjour,
dans un fichier excel, j'ai une feuille qui contient des=20
donn=E9es (nomm=E9e 'DATA') et j'ai sur les autres feuilles=20
des pivots bas=E9s sur ces donn=E9es.
J'ai fait une fonction en VBA Access qui remplace les=20
donn=E9es de DATA par le r=E9sultat d'une requ=EAte et je=20
souhaiterais rafraichir automatiquement les pivots du=20
fichier ; seul probl=E8me, le nb de lignes (i) n'est pas=20
forc=E9ment =E9gal au pr=E9c=E9dent.
J'ai donc essay=E9 plusieurs syntaxes dont voici la=20
derni=E8re :

Dim f As Excel.Workbook
Dim s As Excel.worksheet
Dim i, u As Integer
Dim pt As Excel.PivotTable
Dim ref As Excel.Range

For Each s In ActiveWorkbook.Sheets
For Each pt In s.PivotTables
Set ref =3D f.Sheets("DATA").Range(Cells(1,=20
1), Cells(u, i))
pt.SourceData =3D ref
pt.RefreshTable
Next
Next

et j'obtiens l'erreur suivante :
Erreur d=E9finie par l'application ou par l'objet...

Quelqu'un aurait-il une id=E9e ?

Merci d'avance aux sp=E9cialistes !

1 réponse

Avatar
michdenis
Bonjour Kar,

Est-ce que ceci peut t'aider ?

'-------------------------
Peut-être, cette mise-à-jour de Debra Dalgleish :

' Published by Debra Dalgleish 21 Juin 2003
'
'===================== Sub DeleteOldItemsWB()
'gets rid of unused items in PivotTable
' based on MSKB (202232)
Dim ws As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim i As Integer

On Error Resume Next
For Each ws In ActiveWorkbook.Worksheets
For Each pt In ws.PivotTables
pt.RefreshTable
For Each pf In pt.PivotFields
For Each pi In pf.PivotItems
If pi.RecordCount = 0 And _
Not pi.IsCalculated Then
pi.Delete
End If
Next
Next
Next
Next
End Sub
'=======================
Dans le même post, Debra donne le code (une ligne) pour Excel 2002
exclusivement

'========================= Sub DeleteMissingItems2002()
'prevents unused items in XL 2002 PivotTable
Dim pt As PivotTable

Set pt = ActiveSheet.PivotTables.Item(1)
pt.PivotCache.MissingItemsLimit = xlMissingItemsNone

End Sub
'============================ '------------------------------------------


Salutations!



"karl" a écrit dans le message de news:e92b01c43cde$d7ea9da0$
Bonjour,
dans un fichier excel, j'ai une feuille qui contient des
données (nommée 'DATA') et j'ai sur les autres feuilles
des pivots basés sur ces données.
J'ai fait une fonction en VBA Access qui remplace les
données de DATA par le résultat d'une requête et je
souhaiterais rafraichir automatiquement les pivots du
fichier ; seul problème, le nb de lignes (i) n'est pas
forcément égal au précédent.
J'ai donc essayé plusieurs syntaxes dont voici la
dernière :

Dim f As Excel.Workbook
Dim s As Excel.worksheet
Dim i, u As Integer
Dim pt As Excel.PivotTable
Dim ref As Excel.Range

For Each s In ActiveWorkbook.Sheets
For Each pt In s.PivotTables
Set ref = f.Sheets("DATA").Range(Cells(1,
1), Cells(u, i))
pt.SourceData = ref
pt.RefreshTable
Next
Next

et j'obtiens l'erreur suivante :
Erreur définie par l'application ou par l'objet...

Quelqu'un aurait-il une idée ?

Merci d'avance aux spécialistes !