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

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

  • CamilleTEST.xlsm
    126.8 KB · Affichages: 26
  • CamilleTEST.xlsm
    126.8 KB · Affichages: 18

Dranreb

XLDnaute Barbatruc
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:

camillepaps

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

camillepaps

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

J'aurais peut-être dû préciser que j'étais débutante parce que là vous m'avez perdue. Je vais quand même essayer, merci.
 
Dernière modification par un modérateur:

Dranreb

XLDnaute Barbatruc
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:

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 849
Membres
103 974
dernier inscrit
chmikha