Position étiquette de données sur le graph en fonction du numéro du point de donnée : paire ou impaire

WIsh_

XLDnaute Occasionnel
Bonjour,

Je suis entrain de réaliser un graphique sur lequel j'ai beaucoup de "point de donnée". Les étiquettes de données s'affichent donc les unes sur les autres.
J'aimerais pouvoir mettre une macro qui indique:
- Si valeur du point paire, mettre l'étiquette au-dessus ;
- Si valeur du point impaire, mettre l'étiquette en-dessous;
ceci afin de simplifier ce qui suit, et de ne pas devoir modifier chaque fois la macro si j'ajoute de nouvelles données à mon graphique :

VB:
Private sub position()
ActiveSheet.ChartObjects("CE").Activate
    ActiveChart.FullSeriesCollection(1).Points(10).DataLabel.Select
    Selection.Position = xlLabelPositionBelow
    ActiveChart.FullSeriesCollection(1).Points(9).DataLabel.Select
    Selection.Position = xlLabelPositionAbove
    ActiveChart.FullSeriesCollection(1).Points(8).DataLabel.Select
    Selection.Position = xlLabelPositionBelow
    ActiveChart.FullSeriesCollection(1).Points(7).DataLabel.Select
    Selection.Position = xlLabelPositionAbove
    ActiveChart.FullSeriesCollection(1).Points(6).DataLabel.Select
    Selection.Position = xlLabelPositionBelow
    ActiveChart.FullSeriesCollection(1).Points(5).DataLabel.Select
    Selection.Position = xlLabelPositionAbove
    ActiveChart.FullSeriesCollection(1).Points(4).DataLabel.Select
    Selection.Position = xlLabelPositionBelow
    ActiveChart.FullSeriesCollection(1).Points(3).DataLabel.Select
    Selection.Position = xlLabelPositionAbove
    ActiveChart.FullSeriesCollection(1).Points(2).DataLabel.Select
    Selection.Position = xlLabelPositionBelow
    ActiveChart.FullSeriesCollection(1).Points(1).DataLabel.Select
    Selection.Position = xlLabelPositionAbove
End sub

Merci d'avance pour vos idées,
Wish
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Wlsh, Cisco,
SeriesCollection(1).Points.Count permet de compter le nombre de points sur la courbe.
Donc comme le dit Cisco, une boucle et un test :
VB:
Sub Test()
Dim NbPts, i
' Compte le nombre de points sur la courbe
NbPts = Worksheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count
ActiveSheet.ChartObjects(1).Activate
For i = 1 To NbPts
    If i And 0 = 0 Then
        ' Si point pair
        ActiveChart.FullSeriesCollection(1).Points(i).DataLabel.Select
        Selection.Position = xlLabelPositionBelow
    Else
        ' Si point impair
        ActiveChart.FullSeriesCollection(1).Points(i).DataLabel.Select
        Selection.Position = xlLabelPositionAbove
    End If
End Sub
 

CISCO

XLDnaute Barbatruc
Bonjour à tous, bonjour sylvanu

Est-ce que tu as essayé de faire tourner la macro en pas à pas pour voir si elle passait bien dans les deux parties, une fois dans If..., une fois dans Else... On dirait que ce n'est pas le cas.

@ plus
 

WIsh_

XLDnaute Occasionnel
Bonjour,

Ci-joint mon fichier test.
Je me dis que je bloque peut-être l'instruction avec des instructions contraires liées à mes checkboxs ou au togglebutton.

L'idée est que les valeurs apparaissent quand le bouton valeur est coché.
Si la 1ère checkbox est cochée, alors on a que les valeurs pour la 1ère série de donnée, etc.
Si je décoche la checkbox cochée, les valeurs doivent aussi réapparaitre pour toutes les séries.

Vous saisirez l'idée en ouvrant le fichier. Pour le moment ça ne marche pas et comme je suis nul en vba le code est plutôt lourd.

Merci d'avance pour votre aide,
Wish

ps: si des idée pour simplifier le code n'hésitez pas, je ne m'en sors pas.
 

Pièces jointes

  • test.xlsm
    198 KB · Affichages: 10

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
En PJ un essai;
J'en ai profité pour mettre les labels à 45°, à voir, cela me semblait plus lisible.
[Edit] sur la version précédente : i and 0 donne ... toujours 0 ! :( j'aurais du faire i and 1.
 

Pièces jointes

  • test (22).xlsm
    212.2 KB · Affichages: 13
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 912
Membres
101 837
dernier inscrit
Ugo