J'ai un classeur avec 20 tables pivotantes différentes. Y at-il un moyen facile de trouver tous les tableaux croisés dynamiques et les rafraîchir dans VBA?Comment puis-je actualiser toutes les tables pivotantes de mon classeur Excel avec une macro?
Répondre
Oui.
ThisWorkbook.RefreshAll
Ou, si votre version Excel est assez vieux,
Dim Sheet as WorkSheet, Pivot as PivotTable
For Each Sheet in ThisWorkbook.WorkSheets
For Each Pivot in Sheet.PivotTables
Pivot.RefreshTable
Pivot.Update
Next
Next
Vous avez un PivotTables collection sur la VB objet feuille de calcul. Ainsi, une boucle rapide comme cela fonctionnera:
Sub RefreshPivotTables()
Dim pivotTable As PivotTable
For Each pivotTable In ActiveSheet.PivotTables
pivotTable.RefreshTable
Next
End Sub
Remarques des tranchées:
- Souvenez-vous de déprotéger les feuilles protégées avant la mise à jour du tableau croisé dynamique.
- Enregistrez souvent.
- Je pense de plus et mise à jour en temps voulu ... :)
Bonne chance!
Ce code VBA actualisera tous les tableaux croisés dynamiques dans le classeur.
Sub RefreshAllPivotTables()
Dim PT As PivotTable
Dim WS As Worksheet
For Each WS In ThisWorkbook.Worksheets
For Each PT In WS.PivotTables
PT.RefreshTable
Next PT
Next WS
End Sub
Une autre option non-programatic est:
- Faites un clic droit sur chaque tableau croisé dynamique
- Sélectionnez Options du tableau
- Cochez la 'Actualisation à l'ouverture' option de.
- Cliquez sur le bouton OK
Réactualise le tableau croisé dynamique à chaque fois que le classeur est ouvert.
Il existe une option d'actualisation complète dans la barre d'outils Tableau croisé dynamique. C'est assez. Ne pas faire autre chose.
Appuyez sur Ctrl + Alt + F5
Je ne suis pas d'accord. Que se passe-t-il si Lipis veut automatiser le processus d'actualisation par exemple, chaque fois qu'une cellule est modifiée? – StockB
Dans certaines circonstances, vous voudrez peut-être faire la différence entre un tableau croisé dynamique et son PivotCache. Le cache a sa propre méthode d'actualisation et ses propres collections. Nous aurions donc pu rafraîchir tous les PivotCaches au lieu des PivotTables.
La différence? Lorsque vous créez un nouveau tableau croisé dynamique, il vous est demandé si vous le souhaitez en fonction d'un tableau précédent. Si vous dites non, ce tableau croisé dynamique obtient son propre cache et double la taille des données source. Si vous dites oui, vous gardez votre WorkBook petit, mais vous ajoutez à une collection de tableaux croisés dynamiques qui partagent un seul cache. La collection entière est actualisée lorsque vous actualisez un seul tableau croisé dynamique dans cette collection. Vous pouvez donc imaginer la différence entre l'actualisation de chaque cache du WorkBook et l'actualisation de chaque Table de Pivot dans le WorkBook.
Si vous utilisez MS Excel 2003, accédez à Affichage-> Barre d'outils-> Tableau croisé dynamique Dans cette barre d'outils, nous pouvons effectuer une actualisation en cliquant sur!ce symbole.
J'ai utilisé la commande ci-dessous dans un passé récent et cela semble fonctionner correctement.
ActiveWorkbook.RefreshAll
Espérons que ça aide.
Ca aide beaucoup ... mais tu n'as pas vu que c'est en fait écrit dessus? Comme il y a 4 ans ?! (http://stackoverflow.com/a/70976/8418) – Lipis
ActiveWorkbook.RefreshAll
rafraîchit tout, pas seulement les tables pivotantes mais aussi les requêtes ODBC. J'ai quelques requêtes VBA qui font référence à des connexions de données et à l'aide des accidents d'options que la commande exécute les connexions de données sans les détails fournis à partir de la VBA
Je recommande l'option si vous ne souhaitez que les pivots rafraîchis
Sub RefreshPivotTables()
Dim pivotTable As PivotTable
For Each pivotTable In ActiveSheet.PivotTables
pivotTable.RefreshTable
Next
End Sub
vérifier la réponse la plus votée .. la deuxième approche est en fait ce que vous avez essayé ici .. mais pour l'ensemble du boom .. non seulement pour la feuille active .. soit cas ça dépend vraiment .. et je n'ai pas le toucher depuis .. – Lipis
Le code
Private Sub Worksheet_Activate()
Dim PvtTbl As PivotTable
Cells.EntireColumn.AutoFit
For Each PvtTbl In Worksheets("Sales Details").PivotTables
PvtTbl.RefreshTable
Next
End Sub
fonctionne très bien.
Le code est utilisé dans le module de feuille d'activation, ainsi il affiche un scintillement/pépin lorsque la feuille est activée.
Même nous pouvons rafraîchir la connexion particulière et à son tour, il rafraîchira tous les pivots qui lui sont liés.
Pour ce code, je l'ai créé trancheuse de table présente dans Excel:
Sub UpdateConnection()
Dim ServerName As String
Dim ServerNameRaw As String
Dim CubeName As String
Dim CubeNameRaw As String
Dim ConnectionString As String
ServerNameRaw = ActiveWorkbook.SlicerCaches("Slicer_ServerName").VisibleSlicerItemsList(1)
ServerName = Replace(Split(ServerNameRaw, "[")(3), "]", "")
CubeNameRaw = ActiveWorkbook.SlicerCaches("Slicer_CubeName").VisibleSlicerItemsList(1)
CubeName = Replace(Split(CubeNameRaw, "[")(3), "]", "")
If CubeName = "All" Or ServerName = "All" Then
MsgBox "Please Select One Cube and Server Name", vbOKOnly, "Slicer Info"
Else
ConnectionString = GetConnectionString(ServerName, CubeName)
UpdateAllQueryTableConnections ConnectionString, CubeName
End If
End Sub
Function GetConnectionString(ServerName As String, CubeName As String)
Dim result As String
result = "OLEDB;Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2"
'"OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False"
GetConnectionString = result
End Function
Function GetConnectionString(ServerName As String, CubeName As String)
Dim result As String
result = "OLEDB;Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2"
GetConnectionString = result
End Function
Sub UpdateAllQueryTableConnections(ConnectionString As String, CubeName As String)
Dim cn As WorkbookConnection
Dim oledbCn As OLEDBConnection
Dim Count As Integer, i As Integer
Dim DBName As String
DBName = "Initial Catalog=" + CubeName
Count = 0
For Each cn In ThisWorkbook.Connections
If cn.Name = "ThisWorkbookDataModel" Then
Exit For
End If
oTmp = Split(cn.OLEDBConnection.Connection, ";")
For i = 0 To UBound(oTmp) - 1
If InStr(1, oTmp(i), DBName, vbTextCompare) = 1 Then
Set oledbCn = cn.OLEDBConnection
oledbCn.SavePassword = True
oledbCn.Connection = ConnectionString
oledbCn.Refresh
Count = Count + 1
End If
Next
Next
If Count = 0 Then
MsgBox "Nothing to update", vbOKOnly, "Update Connection"
ElseIf Count > 0 Then
MsgBox "Update & Refresh Connection Successfully", vbOKOnly, "Update Connection"
End If
End Sub
- 1. Télécharger un classeur Excel Macro-activé avec PHP
- 2. Excel avec Macro
- 3. Comment actualiser le navigateur toutes les X secondes avec javascript?
- 4. Comment détecter l'inactivité de l'utilisateur dans un classeur Excel
- 5. Excel VBA Macro
- 6. Excel 2007 Enregistrer une macro
- 7. Excel Macro envoyer un courriel
- 8. Comment supprimer une barre d'outils personnalisée d'un classeur Excel?
- 9. Comment copier des données d'un autre classeur (Excel)?
- 10. Conversion de classeur Excel 2003 en Excel 97 en C#
- 11. VSTO 3.0 Obtenir/modifier une connexion de classeur Excel 2007
- 12. SQL: supprimer toutes les données de toutes les tables disponibles
- 13. Comment puis-je avoir une macro VBA effectuer une recherche/remplacement dans des formules à travers un classeur entier?
- 14. Comment actualiser Excel pendant le débogage
- 15. Suppression de toutes les tables en HTML avec JavaScript
- 16. Excel: Remplir une feuille de calcul avec des lignes correspondantes
- 17. Avec VBA, comment fermer un classeur Excel sans fermer tous les classeurs?
- 18. Problème Création du complément Excel à partir de la macro
- 19. VBScript pour écrire une macro dans un fichier Excel
- 20. Exportation de données de cellules Excel vers une base de données via une macro Excel?
- 21. Signature numérique pour Macro Excel
- 22. Comment savoir si un classeur Excel est protégé
- 23. Rechercher dans toutes les tables Oracle DB
- 24. Copie des données du classeur vers un autre classeur
- 25. Macro Excel VBA pour suivre les modifications dans une feuille séparée
- 26. Copier des feuilles de calcul Excel, les macros et les graphiques d'un classeur à un autre, le déplacement des liens vers le nouveau classeur
- 27. Exporter un classeur Excel incorporé dans une diapositive PowerPoint vers Excel
- 28. Demander un avis: Une séquence pour toutes les tables
- 29. Adapt Remplacer toutes les chaînes dans toutes les tables pour travailler avec du texte
- 30. Exporter un classeur Excel avec de nombreuses feuilles de calcul au format XML ou CSV
Ooh, un downvote. Après plus de cinq ans, c'est un changement rafraîchissant;) – GSerg
En effet .. c'est rafraîchissant .. quelqu'un essaie même de fermer cette question hors-sujet ... Ce n'est pas comme si je demandais de le faire seulement en utilisant la souris ou quoi que ce soit : D – Lipis
Fantastique, j'ai dû l'utiliser car je voulais rafraîchir les pivots APRÈS avoir obtenu de nouvelles données externes, alors ThisWorkbook.RefreshAll ne fonctionnait pas pour moi. – Yasskier