Problème pour afficher courbes dans graph dans le désordre (macro)

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

camillepaps

XLDnaute Nouveau
Bonjour le forum,

J'ai un problème avec un graphique sur lequel j'affiche plusieurs courbes à l'aide de case à cocher. Je sais d'ou vient le probleme mais je me sais pas comment le résoudre.
J'ai une macro affectée à chaque case à cocher qui permet d'afficher une courbe. (et supprimer la courbe lorsque case décochée)
Mes macros contiennent alors toutes cela :
ActiveChart.SeriesCollection(1).Name = "=""janv-15""" pour la premiere
ActiveChart.SeriesCollection(2).Name = "=""févr-15""" pour la deuxieme
Sauf que lorsque le graph est vide et que je veux commencer par tracer la deuxieme courbe, cela ne fonctionne pas car on crée une premiere série mais on desire renommer la deuxieme qui n'existe pas..

L'idéal aurait alors été de créer une variable i (ActiveChart.SeriesCollection(i).Name ) qui s'incrémente dès qu'une macro se déclenche mais je ne sais pas si c'est possible..

Je vous joins mon fichier exemple.


Un grand merci aux personnes qui voudront m'aider.
 

Pièces jointes

Re : Problème pour afficher courbes dans graph dans le désordre (macro)

Bonjour.

Votre type de graphique est en nuage de points, or vous essayez d'affecter à XValue la colonnes C qui ne contient que des textes. Ne serait-ce pas plutôt un graphique en courbe ou en barres d'histogramme qu'il vous faudrait ?

En supprimant les cases à cocher, mettre à la place une police Wingdings rouge en D2:O2, avec MeFC vert sombre si la valeurs de la cellule est ="ü", ce code dans le module de la feuille a l'air pas mal :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim NomSér As String, G As Chart, S As Series, PlgXVal As Range
If Target.Columns.Count <> 1 Then Exit Sub
If Intersect(Me.[D2:O2], Target) Is Nothing Then Exit Sub
NomSér = Format(DateSerial(Me.Name, Target.Column - 3, 1), "mmm-yy")
Set G = Me.ChartObjects("Graphique 1").Chart
On Error Resume Next
Set S = G.SeriesCollection(NomSér)
On Error GoTo 0
If Target.Value <> "ü" Then
   Target.Value = "ü"
   If S Is Nothing Then Set S = G.SeriesCollection.NewSeries: S.Name = NomSér
   Set PlgXVal = Me.Range(Me.[C5], Me.[C5000].End(xlUp))
   S.XValues = "=" & PlgXVal.Address(True, True, xlR1C1, True)
   S.Values = "=" & PlgXVal.Offset(, Target.Column - 3).Address(True, True, xlR1C1, True)
Else
   Target.Value = "û"
   If Not S Is Nothing Then S.Delete
   End If
Me.[D2:O2].Select
End Sub
 
Dernière édition:
Re : Problème pour afficher courbes dans graph dans le désordre (macro)

Merci de porter attention à mon problème.

C'est vrai que j'ai tellement l'habitude d'utiliser un graphique en nuage de points que je ne me suis même pas poser la question.
Je l'ai remplacé par un graphique en courbe mais le même problème se pose.
 
Re : Problème pour afficher courbes dans graph dans le désordre (macro)

Si vous risquez d'avoir plusieurs feuilles strucurées exactement de la même façon pour différentes années vous pouvez mettre dans un module standard :
VB:
Sub MàJSéries(ByVal Target As Range)
Dim F As Worksheet, NomSér As String, G As Chart, S As Series, PlgXVal As Range
If Target.Columns.Count <> 1 Then Exit Sub
Set F = Target.Worksheet
If Intersect(F.[D2:O2], Target) Is Nothing Then Exit Sub
NomSér = Format(DateSerial(F.Name, Target.Column - 3, 1), "mmm-yy")
Set G = F.ChartObjects("Graphique 1").Chart
On Error Resume Next
Set S = G.SeriesCollection(NomSér)
On Error GoTo 0
If Target.Value <> "ü" Then
   Target.Value = "ü"
   If S Is Nothing Then Set S = G.SeriesCollection.NewSeries: S.Name = NomSér
   Set PlgXVal = F.Range(F.[C5], F.[C5000].End(xlUp))
   S.XValues = "=" & PlgXVal.Address(True, True, xlR1C1, True)
   S.Values = "=" & PlgXVal.Offset(, Target.Column - 3).Address(True, True, xlR1C1, True)
Else
   Target.Value = "û"
   If Not S Is Nothing Then S.Delete
   End If
F.[D2:O2].Select
End  Sub
et dans les modules des feuilles simplement :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As  Range)
MàJSéries Target
End Sub
N'hésitez pas à me demander s'il y a certaines instructions dont vous ne comprenez pas le fonctionnement.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour