Bonjour à tous,
Après de nombreuses recherches sur ce forum et sur internet, je n'ai malheureusement pas trouvé de solution à mon problème :
J'ai rédigé une macro me permettant d'afficher un diagramme de gantt à partir de taches rentrées par l'utilisateur sur une feuille excel. Ce dernier rentre à la main le nom de chaque tâche, son début et sa durée, puis la date de fin est calculée par le fichier.
Ma macro permet d'afficher un diagramme de Gantt à partir de ces données, sous la forme suivante :
Avec en abscisses de mon graphe, l'axe du temps :
L'utilisateur a ensuite la possibilité de rentrer un % d'accomplissement devant chaque tâche (illustration sur la photo : il écrit 50% devant la tâche 3 sur la feuille de données par exemple, et celle-ci va changer de couleur sur ses 50 premiers % sur le graphe).
Tout cela fonctionne très bien, jusqu'au moment ou je veux gérer la place des étiquettes du graphe (qui représentent la durée de chaque tâche). En effet, sur les graphe de type xlBarStacked comme celui que j'utilise, il est seulement possible de placer des étiquettes à l'intérieur de la barre de donnée, avec les paramètres "xlLabelPositionInsideBase" (au début de la barre de données), "xlLabelPositionCenter" (centré dans la barre de données) et "xlLabelPositionInsideEnd"(à la fin de la barre de données comme sur ma photo).
J'aimerais pouvoir décaler mes étiquettes de données à la fin de la barre de données, mais à l'extérieur de cette dernière pour plus de lisibilité, c'est à dire que j'aimerais pouvoir décaler les étiquettes de données de quelques points vers la droite par rapport à ce qu'on observe sur la photo.
J'ai essayé de définir la position des étiquettes sur "xlLabelPositionInsideEnd" puis de les décaler vers la droit en incrémentant la propriété "Left" des datalabels, mais sans succès.
J'obtiens en effet le résultat suivant avec ce code, qui nèst pas sitisfaisant puisque toutes les étiquettes de données ne sont pas décallées de la même distance vers la droite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 With Activechart.SeriesCollection(3) For i = 1 To .Points.Count With .Points(i) .HasDataLabel = True .DataLabel.Text = Plage_Total.Cells(Ind(i - 1), 6) .DataLabel.Position = xlLabelPositionInsideEnd .DataLabel.Left = .DataLabel.Left + 10 End With Next i End With
J'ai aussi essayé de définir la position sur "xlLabelPositionInsideBase", puis de décaler les étiquettes vers la droite en fonction de la durée de la tâche concernée, mais sans succès non plus.
J'obtiens alors le résultat suivant, pas non plus satisfaisant pour les mêmes raisons :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 With Activechart.SeriesCollection(3) For i = 1 To .Points.Count With .Points(i) .HasDataLabel = True .DataLabel.Text = Plage_Total.Cells(Ind(i - 1), 6) .DataLabel.Position = xlLabelPositionInsideBase .DataLabel.Left = .DataLabel.Left + CDbl(Plage_Total.Cells(Ind(i - 1), 17)) * 4 'Plage_Total.Cells(Ind(i - 1), 17) correspond à la durée de la tâche en jours sur mon fichier de données, 'que je convertis en double et que je multiplie par un facteur d'échelle (le nombre de points ne correspond pas à des jours : il faut faire la conversion) End With Next i End With
Quelqu'un saurait-il me dire comment faire? Ou alors pourquoi cela ne fonctionne pas dans mon code (peut-être une erreur de compréhension d'objets de ma part)?
Par avance merci pour votre aide !
Partager