VBA légende et le redimensionnement de la zone de traçage

J'ai un tableau Excel qui change sur les sélections effectuées dans les segments.
J'ai remarqué que la zone de traçage et de la légende de changement de zone en fonction de la sélection faite.

J'ai essayé de corriger la position et la taille de la zone de traçage à l'aide de vba, mais cela ne fonctionne tout simplement pas malheureusement.

De la zone de traçage et de la légende de garder sur le redimensionnement, provoquant la légende de chevauchement de la zone de traçage. Ce qui évidemment je ne veux pas.

J'ai ce code, placé dans la feuille de calcul à la page de l'éditeur vba:

Option Explicit
Private Sub Chart_Calculate()

ChartObjects("grafiek 4").Activate
ActiveChart.PlotArea.Width = 637.783
ActiveChart.Legend.Left = 716.514
ActiveChart.Legend.Width = 176.735
ActiveChart.Legend.Height = 295.334

End Sub

avoir ce code, j'ai pris le redimensionnement automatique serait allé, mais j'ai vu la légende est parfois encore te chevauche la zone de traçage.

Est-il une solution en permanence résout ce problème?

Edit1:

Hier, j'ai simplement ajouté un peu de paramètres pour la zone de traçage. Il semblait fonctionner ensuite. Mais maintenant, j'ai essayé de nouveau, et la légende est le chevauchement de la zone de traçage de nouveau.

J'ai changé le code pour:

Option Explicit
Private Sub Chart_Calculate()

ChartObjects("grafiek 4").Activate
ActiveChart.PlotArea.Top = 33.102
ActiveChart.PlotArea.Left = 67.1
ActiveChart.PlotArea.Width = 637.783
ActiveChart.Legend.Top = 7
ActiveChart.Legend.Left = 716.514
ActiveChart.Legend.Width = 176.735
ActiveChart.Legend.Height = 329.667

End Sub

Donc avec 2 plus paramétrée pour la zone de traçage.

edit2:
J'ai vérifié les propriétés de la légende dans Excel. sous options de la légende "il y a une case à cocher" afficher la légende, sans chevauchement de la zone de traçage (je ne sais pas exactement un texte en anglais).
Cette case est cochée, mais elle ne se chevauchent la zone de traçage.

Pourquoi est-il impossible à atteindre? Ayant fixé la taille de la zone de traçage et de la légende ne doit pas être si dur.

edit 3:
J'ai cette routine maintenant dans mon classeur:

Option Explicit
Private Sub Chart_Calculate()

ChartObjects("grafiek 4").Activate
With ActiveChart
    With .PlotArea
        .Top = 33.102
        .Left = 67.1
        .Width = 637.783
    End With
    With .Legend
        .IncludeInLayout = True
        .Position = xlLegendPositionRight
        .AutoScaleFont = False
        .Font.Size = 8
        .Top = 5
        .Left = 706.899
        .Width = 179.735
        .Height = 336.681
    End With
End With

End Sub
Sub kopieergrafiek()

ActiveSheet.ChartObjects("Grafiek 4").Copy

End Sub

(y compris la suggestion dans les commentaires ci dessous mon post)

Je ne semble pas fonctionner. Ne worksheet_change événement peut-être fonctionne le mieux?

edit 4:
Je n'ai toujours pas de solution pour ce problème. C'est déjà le cas lorsque le nom de 1 des éléments de la légende, c'est long pour s'adapter à l'espace. Et il arrive aussi quand il y a de nombreux éléments dans la légende pour s'adapter à l'espace disponible.

Je pense qu'il n'y a pas de solution pour ce. À moins que je pourrait en quelque sorte dire à excel afin de maximiser le nombre d'éléments dans la légende. ou pour maximiser la longueur du nom de la série.

Peut-être pas exactement ce que vous voulez, mais vous pouvez séparer la légende de la zone de traçage comme ceci: ActiveChart.Legend.IncludeInLayout = True et puis définissez la position comme ceci: ActiveChart.Legend.Position = xlLegendPositionRight

OriginalL'auteur DutchArjo | 2014-10-28