SeriesCollection

Résolu
Patrice H Messages postés 42 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 24 juin 2011 - 23 juin 2011 à 19:43
Patrice H Messages postés 42 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 24 juin 2011 - 24 juin 2011 à 16:44
Bonjour,

J'ai un graphique avec plein de séries. Je passe ne revue ces séries et récupère leur nom. Voici mon problème
Chaque série est définie par une plage de type "A1:B100" par exemple

La ligne suivante :

NomSerie = series(Index).Name

renvoie une erreur 1004 lorsque la plage référence ne comporte pas de valeurs. Pourtant quand je clique droit sur le graphique pour obtenir les données sources, la série en question est bien présente avec son nom et la plage définie pour X et Y (bien sûr on ne la voit pas puisqu'il n'y a pas de points). Où peut bien être stocké ce nom qui n'est pas accessible par la propriété SeriesCollection du graphique.

Bien sûr pour la ligne en question il y a une affectation préalable :
Set series = ThisWorkbook.Charts("Graph1").SeriesCollection

Merci de vos lumières.

Imagine le pire, tu n'es jamais déçu, il peut même t'arriver d'être heureusement surpris.
Si vous êtes intéressé par l'histoire, visitez mon site http://histoiremondiale.free.fr

9 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
24 juin 2011 à 15:14
euh oui je n'est pas fait gaffe à ton histoire d'affectation !

pour le reste il est vrai que je n'ai jamais eu a creuser la question... mais voila cette fois c'est fait


'cette erreur 1004 est du à des cellules vides qu'excel essai d'interpreter comme des valeurs
'Pour éviter cette interpretation il existe une propriété .DisplayBlanksAs qui avec la valeur xlZero force excel 
'à interpreter les cellule vide comme des valeurs = à 0.
'L'idee ici est donc de temporairement passer .DisplayBlanksAs= xlZero
Sub ReDEmo()
    Dim MaSerie As Series
    Dim DisplayBlanksOldValue As Long

    With ActiveChart
    If Not .DisplayBlanksAs = xlZero Then
        DisplayBlanksOldValue = .DisplayBlanksAs
        .DisplayBlanksAs = xlZero
    End If
    Set MaSerie = .SeriesCollection(1)
    NomSerie = MaSerie.Name
       MsgBox NomSerie
    If Not .DisplayBlanksAs DisplayBlanksOldValue Then .DisplayBlanksAs DisplayBlanksOldValue
    End With
End Sub


A+
3
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
24 juin 2011 à 10:41
Salut,

tu ne peux pas utiliser l'object series de cette façon

voici un exemple:

Sub demo()
    Dim MaSerie As Series
    
    Set MaSerie = ActiveChart.SeriesCollection(1)
    NomSerie = MaSerie.Name
    MsgBox NomSerie
End Sub


mais ATTENTION le nom renvoyé par le code precedent n'est pas le même que le nom renvoyé par:

NomSerie = ActiveChart.SeriesCollection(1).Name
MsgBox NomSerie


A+
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
24 juin 2011 à 11:14
Re,

euh oui j'ai un peu oublié de répondre à la question

à ma connaissance si il n'y as pas de valeur dans la zone de valeurs toute tentative de récupération de valeurs ou autre par macro renvoi une erreur 1004.

je ne connais qu'une solution:

Sub demo()
    Dim MaSerie As Series
    on error resume next
    Set MaSerie = ActiveChart.SeriesCollection(1)
    NomSerie = MaSerie.Name
    If err=0 then 
       MsgBox NomSerie
    Else
       err.clear
    end if
    on error goto 0
End Sub


A+
0
Patrice H Messages postés 42 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 24 juin 2011
24 juin 2011 à 14:20
Message 1)Dans la suite du message je précisais bien que series était affecté globalement par set. Tu as l'air de dire qu'on ne peut pas référencé la collection de séries d'un graphique ... je suis dubitatif

Message 2) Cela ne répond pas vraiment à ma question. J'ai effectivement utilisé ce que tu indiques mais ce que je veux comprendre c'est comment le graphique connait encore le nom des séries alors que l'accès nous en est interdit (même pas en lecture). Il doit y avoir des propriétés privées de l'objet Chart là dessous.

Imagine le pire, tu n'es jamais déçu, il peut même t'arriver d'être heureusement surpris.
Si vous êtes intéressé par l'histoire, visitez mon site http://histoiremondiale.free.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
24 juin 2011 à 15:31
oups une p'tit erreur

Sub ReDEmo()
    Dim MaSerie As Series
    Dim DisplayBlanksOldValue As Long

    With ActiveChart
    DisplayBlanksOldValue = .DisplayBlanksAs
    If Not .DisplayBlanksAs xlZero Then .DisplayBlanksAs xlZero
    Set MaSerie = .SeriesCollection(1)
    NomSerie = MaSerie.Name
       MsgBox NomSerie
    If Not .DisplayBlanksAs DisplayBlanksOldValue Then .DisplayBlanksAs DisplayBlanksOldValue
    End With
End Sub


A+
0
Patrice H Messages postés 42 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 24 juin 2011
24 juin 2011 à 15:45
Le problème c'est que chacune des séries comportent des trous qui indiquent des points non contigus et pour lesquels il est indispensable de laisser cette propriété sur xlNotPlotted

Maintenant c'est vrai qu'il semble que ta manipulation soit juste le temps de récupérer le nom de la série. Je vais donc tester ta solution. Tu avoueras quand même qu'il est étrange que l'on ait pas accès à cette propriété (ainsi d'ailleurs qu'à XValues et Values) alors que les valeurs de ces propriétés sont conservées par le graphique.

Imagine le pire, tu n'es jamais déçu, il peut même t'arriver d'être heureusement surpris.
Si vous êtes intéressé par l'histoire, visitez mon site http://histoiremondiale.free.fr
0
Patrice H Messages postés 42 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 24 juin 2011
24 juin 2011 à 15:49
Pour revenir à ton code, je ferai plutôt

Sub ReDEmo()
    Dim MaSerie As Series
    Dim DisplayBlanksOldValue As Long

    With ActiveChart
    DisplayBlanksOldValue = .DisplayBlanksAs
    .DisplayBlanksAs = xlZero
    Set MaSerie = .SeriesCollection(1)
    NomSerie = MaSerie.Name
       MsgBox NomSerie
    .DisplayBlanksAs = DisplayBlanksOldValue
    End With
End Sub


Pourquoi accéder à la variable (test) pour ensuite changer sa valeur. Autant y accéder pour changer (éventuellement la valeur)

J'ai appris à programmer avec 16KO de mémoire vive donc il m'en est resté des réflexes d'économie de code.

Imagine le pire, tu n'es jamais déçu, il peut même t'arriver d'être heureusement surpris.
Si vous êtes intéressé par l'histoire, visitez mon site http://histoiremondiale.free.fr
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
24 juin 2011 à 16:21
Ok si tu veux... d'autant que l'idée première, était de répondre à ta question

mon inconscience et ce gaspillage de mémoire vive, doit venir des 64Ko du C64 sur le quel j'ai commencé

"it makes sense"

A+
0
Patrice H Messages postés 42 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 24 juin 2011
24 juin 2011 à 16:44
Tout à fait. Ce n'était pas une critique mais juste un réflexe. J'ai pu tester, ton idée marche très bien. Ca reste un peu bizarre comme idée mais pas plus finalement que de référencer des séries qui ne comportent aucun point.

Merci.


Imagine le pire, tu n'es jamais déçu, il peut même t'arriver d'être heureusement surpris.
Si vous êtes intéressé par l'histoire, visitez mon site http://histoiremondiale.free.fr
0
Rejoignez-nous