Le graphique ne sera pas mis à jour dans Excel (2007))
j'ai un document Excel (2007) avec un graphique (colonne groupée) qui obtient ses séries de données à partir de cellules contenant des valeurs calculées
les valeurs calculées ne changent jamais directement, mais seulement à la suite du changement d'autres cellules de la feuille
quand je change d'autres cellules dans la feuille, les cellules de la série de données sont recalculées, et montrent de nouvelles valeurs - mais le graphique basé sur cette série de données refuse de mettre à jour automatiquement
je peux mettre à jour le graphique en sauvegardant/fermant, ou en basculant l'un des paramètres (comme inverser l'axe x/y puis le remettre en place), ou en re-sélectionnant la série de données
chaque solution que j'ai trouvée en ligne ne fonctionne pas
- Oui, j'ai de Calcul définie à automatique
- Ctrl+Alt+F9 mises à jour de tout bien, SAUF le graphique
- j'ai recréé la carte plusieurs fois, et sur différents ordinateurs
j'ai essayé les scripts VBA comme:
Application.Calculate
Application.CalculateFull
Application.CalculateFullRebuild
ActiveWorkbook.RefreshAll
DoEvents
aucune de ces mises à jour ou rafraîchir le graphique
je remarque que si je tape sur mes séries de données, les nombres réels au lieu des calculs, il va mettre à jour le tableau - C'est comme si Excel ne veut pas reconnaître les changements dans les calculs
quelqu'un A vécu cela avant ou savoir ce que je pourrais faire pour résoudre le problème? Je vous remercie
30 réponses
j'ai rencontré ce même problème-Je ne sais pas pourquoi, et quand il se produit la seule façon que j'ai eu le chart pour forcer la mise à jour est de changer quelque chose dans la définition de chart elle-même, ce qui peut facilement être fait via VBA comme dans:
Dim C As ChartObject: Set C = Me.ChartObjects("chart name")
C.Chart.ChartTitle.Text = C.Chart.ChartTitle.Text + "1"
Il peut y avoir une meilleure réponse qui va au fond du problème - mais j'ai pensé que cela pourrait aider. En travaillant sur la feuille je ferais un CTRL-X Rapide, Ctrl-V sur un morceau de la carte (ou le tout) pour forcer la carte à mettre à jour.
C'est la seule chose que j'ai trouvé pour mettre à jour régulièrement un graphique. Il coupe la cause profonde du problème (je suppose): les données de série sont mises en cache dans le graphique. En forçant le graphique à réévaluer la série, nous nettoyons la cache.
' Force the charts to update
Set sht = ActiveSheet
For Each co In sht.ChartObjects
co.Activate
For Each sc In ActiveChart.SeriesCollection
sc.Select
temp = sc.Formula
sc.Formula = "=SERIES(,,1,1)"
sc.Formula = temp
Next sc
Next co
j'ai eu ce problème en générant plus de 1000 graphiques à travers VBA
. J'ai généré les graphiques et assigné une fourchette à leur série. Cependant, lorsque la feuille recalculé les graphiques ne serait pas mis à jour que les gammes de données ont changé les valeurs.
Solution -- > j'ai éteint WrapText avant le For...Boucle suivante qui génère les graphes et qui les rallume à nouveau après la boucle.
Workbooks(x).Worksheets(x).Cells.WrapText=False
et après...
Workbooks(x).Worksheets(x).Cells.WrapText=True
c'est une bonne solution parce que il met à jour plus de 1000 graphiques à la fois sans boucler à travers eux tous et de changer quelque chose individuellement.
en outre, Je ne suis pas vraiment sûr pourquoi cela fonctionne; je suppose que lorsque WrapText change une propriété de la gamme de données il fait la mise à jour du graphe, bien que je n'ai pas de documentation à ce sujet.
j'ai eu le même problème avec un simple graphique.
aucune des macros n'a fonctionné que j'ai essayé. Rien n'a fonctionné sur cut
,pasting
,relocating
graphique.
LA solution que j'ai trouvée était d'éditer le texte du graphique, de supprimer les étiquettes, puis de sélectionner de nouveau les étiquettes. Une fois relues, elles ont été mises à jour.
c'est un bug absurde qui entrave sérieusement mon travail avec Excel.
basé sur les solutions de rechange postées, je suis venu aux actions suivantes comme la façon simplist d'aller de l'avant...
cliquez sur le graphique que vous voulez mettre à jour - Sélectionnez CTRL-X, CTRL-V pour couper et coller le graphique en place... il sera forcé de mise à jour.
cela fonctionne très bien pour moi -- il renverse les axes sur toutes les cartes et puis les renverse, ce qui les fait se rafraîchir sans changer du tout.
'Refresh all charts
For Each mysheet In ActiveWorkbook.Sheets
mysheet.Activate
For Each mychart In ActiveSheet.ChartObjects
mychart.Activate
ActiveChart.PlotArea.Select
ActiveChart.PlotBy = xlRows
ActiveChart.PlotBy = xlColumns
ActiveChart.PlotBy = xlRows
Next
Next
C'est un bug Excel...
le meilleur et le plus rapide contournement est le Columns.AutoFit
- Trick:
Sub Update_Charts()
Application.ScreenUpdating = False
Temp = ActiveCell.ColumnWidth
ActiveCell.Columns.AutoFit
ActiveCell.ColumnWidth = Temp
Application.ScreenUpdating = True
End Sub
j'ai un autre problème de refonte des cartes. Lors de la génération automatique des graphiques, certains graphiques apparaissent au-dessus et mettent en cache le texte dans la feuille. Il se trouve que c'est un problème de rafraîchissement des graphiques générés. Quand je zoome dedans ou dehors, je peux obtenir les résultats attendus. Donc je poste la solution ici si cela intéresse quelqu'un. Par programmation, j'ai ajouté ce après la génération de graphiques :
ActiveWindow.Zoom = ActiveWindow.Zoom + 1
ActiveWindow.Zoom = ActiveWindow.Zoom - 1
j'ai fait face au même problème. Le problème est dû à la restriction aucune. des formules calculées dans votre feuille. vous pouvez résolu à l'aide de deux façons:
force manuelle recalculer:
Press SHEFT + F9
Macro à force de re-calculer: ajouter le code ci-dessous à la fin de la fonction qui change les données
Activesheet.Calculate
j'ai trouvé la solution: À partir des options excel assurez-vous de changer les options de calcul comme ci-dessous. Il a changé parfois à Manuel après le travail lourd dans excel.
Ce problème est ridicule! La solution de personne n'a fonctionné pour moi en 2010, mais j'ai basé la mienne sur celle de tpascale:
Dim C As ChartObject
Set C = ActiveSheet.ChartObjects("CTR_Chart")
C.Chart.SetSourceData Source:=Range( _
"KeywordBreakdown!$A:$A,KeywordBreakdown!$E:$E")
simplement redéfini la gamme de données Source. Si c'est une plage nommée, qui pourrait être raisonnablement propre. Je suppose que la meilleure solution est de continuer à essayer de modifier les différentes propriétés du graphique jusqu'à ce qu'il se rafraîchisse.
Ok j'ai une solution, vraiment....
j'ai trouvé que le problème avec mes cartes Pas de mise à jour d'abord s'est produit peu de temps après que j'ai caché quelques colonnes de données alimentant la carte, et ai coché "montrer des données cachées dans les rangées et les colonnes" dans le tableau "choisir la Source de données" Boîte msg).
j'ai trouvé que si je suis retourné dans la boîte" choisir la Source de données "msg et non vérifié/revérifié le" montrer des données cachées dans les lignes et les colonnes" que le graphique rafraîchir.
programmatically j'ai inséré ce qui suit dans une Macro à laquelle j'ai relié un bouton, il rafraîchit tous mes charts assez rapidement pour une solution de contournement à un bogue connu. Ce code suppose qu'un tableau par feuille de travail, mais un autre énoncé pour les tableaux 1 à N pourrait être ajouté si désiré:
Sub RefreshCharts()
Application.ScreenUpdating = False
For I = 1 To ActiveWorkbook.Worksheets.Count
Worksheets(I).Activate
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.PlotVisibleOnly = True
ActiveChart.PlotVisibleOnly = False
Next I
Application.ScreenUpdating = True
End Sub
j'ai eu ce problème et j'ai constaté qu'il était causé par le fait que deux applications excel fonctionnaient en même temps. Si je fermais tout et que j'ouvrais juste le dossier, j'avais des problèmes avec les charts où dynamic devrait être. Peut-être que cela aide
nous avons trouvé une solution qui n'implique pas VBA: multiplier un élément de la plage de données du graphique par TODAY()-TODAY()+1
.
bien que la fourchette ait été recalculée sans cela, la nature volatile de TODAY()
en quelque sorte, donne un coup de pouce supplémentaire qui déclenche le graphique recalcul.
cela a fonctionné pour moi, il coupe et re-colle les graphiques sur la feuille de travail active. J'ai basé ça sur le code de Jason et a blog j'ai trouvé dans une recherche rapide de Google.
Sub RepasteCharts()
Dim StrTemp As String
Dim IntTempTop As Integer
Dim IntTempLeft As Integer
Set sht = ActiveSheet
For Each co In sht.ChartObjects
'Activate the chart
co.Activate
'Grab current position on worksheet
IntTempTop = ActiveChart.Parent.Top
IntTempLeft = ActiveChart.Parent.Left
'Cut and paste
ActiveChart.Parent.Cut
ActiveSheet.Paste
'Reposition to original position
ActiveChart.Parent.Top = IntTempTop
ActiveChart.Parent.Left = IntTempLeft
Next co
End Sub
à Partir d'Excel 2013, il y a le Chart.Refreh
méthode (https://msdn.microsoft.com/de-de/library/office/ff198180.aspx) qui a fonctionné pour moi:
Dim cht As ChartObject
For Each cht In ThisWorkbook.ActiveSheet.ChartObjects
cht.Chart.Refresh
Next cht
j'ai une macro qui modifie les valeurs qui sont les données d'un graphique. Tout a bien fonctionné dans Excel 2003, mais dans Excel 2007 le graphique semble perdre toute connexion à ses données, bien que changeant manuellement les valeurs de données dans deux colonnes a déclenché un recalc.
ma solution a été de rendre toutes les cartes sur la feuille active invisible avant le changement de données, puis les rendre à nouveau visibles et appeler rafraîchissement de carte pour une bonne mesure. ( Il ne semble être des graphiques visibles qui ont ce problème de mise à jour ).
cela fonctionne pour moi et gère également des problèmes similaires avec des graphiques ainsi que des objets graphiques. Le rafraîchissement peut ne pas être nécessaire - plus de tests nécessaires.
Dim chrt As Chart
Dim chrtVis As XlSheetVisibility
Dim sht As Worksheet
Dim bChartVisible() As Boolean
Dim iCount As Long
Dim co As ChartObject
On Error Resume Next
Set chrt = ActiveChart
If Not chrt Is Nothing Then
chrtVis = chrt.Visible
chrt.Visible = xlSheetHidden
End If
Set sht = ActiveSheet
If Not sht Is Nothing Then
ReDim bChartVisible(1 To sht.ChartObjects.Count) As Boolean
iCount = 1
For Each co In sht.ChartObjects
bChartVisible(iCount) = co.Visible
co.Visible = False
iCount = iCount + 1
Next co
End If
DO MACRO STUFF THAT CHANGES DATA
If Not sht Is Nothing Then
iCount = 1
For Each co In sht.ChartObjects
co.Visible = bChartVisible(iCount)
co.Chart.Refresh
iCount = iCount + 1
Next co
End If
If Not chrt Is Nothing Then
chrt.Visible = chrtVis
chrt.Refresh
If chrt.Visible Then
chrt.Select
End If
End If
On Error GoTo 0
j'ai eu le même problème que l'affiche. En gros, j'exécute un tableau de bord, et j'ai un tas de gammes nommées qui sont peuplées avec des valeurs de retour de certains UDFs. Sur le tableau de bord, il y a quelques diagrammes circulaires avec des séries de données liées à des cellules qui contiennent ces plages nommées (le problème se produit également si les cellules cibles des séries de données contiennent les UDFs directement, en contournant les plages nommées).
je change une valeur de cellule qui contient, par exemple, la plage de date pour baser le tableau de bord sur, et les gammes nommées et UDFs sont forcés de calculer. Cependant, les diagrammes circulaires ne sont pas mis à jour--pour une raison quelconque, d'autres types de diagrammes le sont. Et au fait, ce sont des objets de carte, pas des feuilles de carte. Quoi qu'il en soit, coupons à la solution:
Je ne voulais pas changer de façon visible le titre du graphique ou un autre aspect de celui-ci, et de toute façon j'ai remarqué que ce n'était pas une mise à jour constante de mes graphiques. Parfois, la première fois que j'ai déclenché le calcul, les EPÉ se mettraient à jour, mais avec des calculs ultérieurs les tartes ne le serait pas. J'ai remarqué, cependant, que chaque fois que je faisais un changement dans le code mon tableau de bord fonctionnait. Donc:
Solution:
With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.AddFromString "'test"
.DeleteLines 1
End With
si vous utilisez le module Workbook (Je ne l'étais pas dans ce cas), créez simplement un nouveau module et référencez-le à la place.
j'ai connu le même problème avec mon travail la semaine dernière quand j'ai ajouté un peu plus de calcul à ma feuille. Après cela, l'utilisation de boutons radio pour sélectionner les données à présenter sur les graphiques n'a plus mis à jour les graphiques.
La meilleure explication que j'ai pu trouver jusqu'à présent est-ce: http://support.microsoft.com/kb/243495
si je l'ai bien compris, S'il y a plus de 65536 formules qui ont une autre cellule comme référence dans votre fichier, Excel commence à optimiser le calcul et dans certains cas les graphiques ne sont plus mis à jour correctement.
S'il y a une solution pour contourner cela sans utiliser les macros VBA, je serais heureux d'entendre cela (je ne peux pas les utiliser car les fichiers doivent être partagés par SharePoint sans macros VBA).
ce qui a fonctionné pour moi était d'utiliser une macro pour insérer/supprimer une colonne dans la table de données pour le graphique. Cela entraînera la mise à jour de la sélection des données.
j'ai trouvé que c'était le moyen le plus rapide de le réparer.
j'ai eu le même problème en travaillant sur un tutoriel (très frustrant quand on suit les étapes et qu'on n'obtient pas le résultat attendu).
le tutoriel pour créer un diagramme à secteurs voulait que je choisisse la gamme A3:A10
, puis sélectionnez également la plage non adjacente E3:E10
. Je l'ai fait. J'ai eu le graphique.
il m'a alors demandé de changer une valeur et de regarder le pourcentage de changement, puis de regarder le diagramme circulaire et de voir la mise à jour.
Il n'a pas de mise à jour.
je j'ai regardé la source de données du diagramme à secteurs, et la portée était bizarre. Il avait l' A3:A10
portée correctement notée, mais la E10
la référence de la cellule a été répétée plusieurs fois, et elle avait toutes les E
cellules énumérés dans un ordre aléatoire. Il ressemblait
=SERIES(,(Revenue!$A:$A,Revenue!$E,Revenue!$E,Revenue!$E,Revenue!$E,Revenue!$E,Revenue!$E,Revenue!$E,Revenue!$E,Revenue!$E,Revenue!$E,Revenue!$E,Revenue!$E),1
j'ai changé la source de données à lire:
=SERIES(,Revenue!$A:$A,Revenue!$E:$E,1)
Problème résolu. Parfois, il s'agit de nettoyer votre code pour que le processeur de calculs ait moins de choses à trier.
j'ai lutté avec ce problème, aussi. Finalement résolu en recalculant la feuille qui a les données du graphique après la fonction personnalisée a recalculé. Ainsi, dans la Feuille 1, j'ai une cellule qui contient
=ComputeScore()
dans le module VBA, la fonction est définie comme Volatile, pour s'assurer que ComputeScore() s'exécute après toute mise à jour de la feuille de calcul.
Function ComputeScore() As Double
Application.Volatile True
. . . do some stuff to get a total . . .
ComputeScore = theTotal
End Function
puis, dans la VBA de la feuille 1, Ceci:
Private Sub Worksheet_Calculate()
'Recalculate the charts data page to force the charts to update.
'Otherwise, they don't update until the next change to a sheet, and so
'chart data is always one update behind the user's data changes.
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlManual
Sheets("Charts Data").Calculate
Application.Calculation = xlAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
ainsi, la feuille nommée données graphiques, quelles références la cellule de fonction personnalisée de la feuille 1, fera un nouveau calcul après que la fonction ComputeScore() a mis à jour la cellule de la feuille 1, Puisque Worksheet_Calculate() démarre après le recalc ComputeScore (). Ce cycle de calcul supplémentaire des données de la carte provoque la carte à mettre à jour maintenant, plutôt que plus tard ou pas du tout. Le réglage D'Enablevents et de xlManual permet d'éviter l'apparition de boucles recalc infinies et d'autres problèmes d'événements.
cela peut sembler extrêmement basique mais je viens d'essayer le calcul manuel sur la feuille de calcul où les cartes étaient (en appuyant sur F9) et cela a fonctionné! Tha code VBA pour c'est simplement:
Calculer
;)
comme j'ai essayé à peu près toutes les solutions présentées et puisque aucune n'a fonctionné dans mon cas, je vais ajouter mes deux cents ici aussi. Espérons que cela aide quelqu'un d'autre.
le consensus sur cette question semble être que nous devons d'une manière ou d'une autre forcer excel à reformuler le graphique puisqu'il ne le fait pas quand il le devrait.
ma solution était de tuer les données de L'axe X et de les remplacer par rien, avant de les changer à ce que je voulais. Voici mon code:
With wsReport
.Activate
.ChartObjects(1).Activate
ActiveChart.FullSeriesCollection(1).XValues = "=" 'Kill data here
.Range("A1").Select 'Forwhatever reason a Select statement was needed
.ChartObjects(1).Activate
ActiveChart.FullSeriesCollection(1).XValues = "=tblRef[Secs]"
End With
End Sub
mes deux cents pour ce problème--j'avais un problème similaire avec un graphique sur un rapport Access 2010. Je construisais dynamiquement un querydef, en définissant cela comme la source de rowsource sur mon rapport et en essayant ensuite de boucler à travers chaque série et de définir les propriétés de chaque série. Ce que j'ai finalement eu à faire était de séparer la création de querydef et la mise en place de la propriété en sous-marins séparés. En outre, j'ai mis un
SendKeys ("{DOWN}")
SendKeys ("{UP}")
au bas de chacun des deux par.
sur la modification des valeurs des données sources, le graphique n'a pas été mis à jour en conséquence. Juste fermé toutes les instances d'excel et redémarré, le problème a disparu.
j'ai eu un problème similaire - les tableaux n'ont pas semblé être mis à jour. J'ai essayé à peu près tout sur ce fil sans succès. J'ai finalement réalisé que les graphiques que je copiais et collais étaient liés aux données source, et c'est pourquoi ils montraient tous les mêmes résultats.
assurez-vous que vous copiez et collez des images avant de passer par tous les autres mouvements....
j'ai juste eu le même problème, et j'ai aussi trouvé que la ligne ne s'affichait que si je mettais de mauvaises données (des caractères au lieu des nombres). Cela a provoqué l'apparition de la ligne, mais le fait de revenir à des données valides l'a fait disparaître à nouveau.
ce que j'ai trouvé c'est que si j'ai double-cliqué la ligne (apparaissant avec de mauvaises données), il m'a montré qu'il était sur l'axe secondaire pour une raison quelconque. Changer ça en axe primaire a résolu mon problème.
les graphiques ne sont pas des changements" sentimentaux " avec des valeurs d'insertion directe pour supporter des cellules avec macro. Vous devez envoyer des valeurs hors des cellules de graphique et après ce code d'utilisation comme ceci
feuilles de travail("feuille 1").Fourchette ("A1: K1")=feuilles de travail ("sheet2").Portée ("A4: K4").Valeur
j'avais un problème similaire aujourd'hui avec un fichier 2010 avec un grand nombre de formules et plusieurs connexions de base de données. L'axe du graphique qui ne mettait pas à jour les références s'étend avec des colonnes cachées, semblables à d'autres dans cette chaîne, et les étiquettes affichaient le mois et l'année "MMM-YY" des données dynamiques. J'ai essayé toutes les solutions listées à l'exception des options VBA que je préférerais résoudre sans code.
j'ai pu résoudre les problèmes en encapsulant Mes dates (les étiquettes de l'axe) dans une formule de texte comme telle: =texte(A10,"MMM-YY"). Et tout se met immédiatement à jour lorsque les valeurs changent. Jours heureux à nouveau!!!
en lisant les questions des autres contributeurs ci-dessus, j'ai commencé à penser que les graphiques avaient des problèmes avec le type de données DATE en particulier, et donc la conversion des valeurs en texte avec la fonction texte a résolu mon problème. J'espère que cela peut vous aider. Il suffit de changer le format dans les guillemets doubles (deuxième argument de la fonction Texte) à en fonction de vos besoins.
il suffit d'activer la feuille où le graphique est:
Sheets(1).Activate
et votre problème disparaît.
j'ai eu le même problème et aucune des choses que vous avez mentionnées en question n'a fonctionné pour moi jusqu'à ce que je vienne d'activer le drap. La réponse acceptée n'a pas fonctionné pour moi non plus.
alternativement vous pouvez faire:
ActiveCell.Activate