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

18
demandé sur ChrisB 2011-02-04 23:41:46

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.

4
répondu tpascale 2011-03-30 23:38:47

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
12
répondu Jason 2012-07-20 14:21:07

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.

4
répondu João 2011-12-08 05:37:26

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.

4
répondu pb33 2012-10-12 20:09:12

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.

3
répondu Marc 2011-09-13 14:57:27

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
2
répondu Sam 2012-05-22 20:39:32

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
2
répondu Porsche9II 2012-09-22 13:41:47

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
2
répondu toan 2013-05-24 08:56:26

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.

Auto Calculation

2
répondu Ayman Al-Absi 2015-03-21 09:56:23

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.

1
répondu Charles Offenbacher 2011-12-30 11:19:48

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
1
répondu user3063819 2013-12-04 01:04:00

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

1
répondu Greg 2013-12-18 23:27:54

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.

1
répondu vjp07042 2015-04-14 04:34:28

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
1
répondu Ryan Bradley 2016-06-27 21:55:07

à 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    
1
répondu DaveD 2016-07-20 08:21:20

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
0
répondu Tim Read 2011-06-07 17:28:32

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.

0
répondu Matt M 2011-12-21 16:06:11

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).

0
répondu Vesa Siltanen 2012-10-26 16:19:01

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.

0
répondu vanessa06106 2013-02-21 16:17:34

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.

0
répondu JBeez 2013-06-18 18:28:38

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.

0
répondu RealHandy 2013-11-19 00:01:04

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

;)

0
répondu user3012511 2013-11-20 09:45:37

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
0
répondu rohrl77 2014-07-15 12:57:20

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.

0
répondu nwhaught 2014-11-28 20:49:20

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.

0
répondu bharat1010 2015-04-14 13:09:00

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....

0
répondu Matt R. 2015-06-16 15:32:57

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.

0
répondu Mac_Biodiesel 2016-03-07 16:59:42

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

0
répondu Seyhan Mutlu 2016-03-11 12:23:57

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.

0
répondu Daniel_DeHaven 2016-07-29 23:29:33

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
0
répondu Przemyslaw Remin 2016-08-25 20:13:24