mettre à jour la source de données d'un pivot en VBA depuis Access
1 réponse
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...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 !
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" <anonymous@discussions.microsoft.com> a écrit dans le message de news:e92b01c43cde$d7ea9da0$a101280a@phx.gbl...
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...
'------------------------- 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...