IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

ajout: manipulation des données des séries [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2011
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 258
    Par défaut ajout: manipulation des données des séries
    Bonjour à tous,

    J'ai cherché à accéder aux données des séries de chaque graph pour la feuille en cours, j'ai donc écris au départ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub réinitGraphs()
     
        With Sheets(1)
            For Each obj In .ChartObjects
                With obj
                    For Each serie In .SeriesCollection
     
                        Debug.Print serie.Name
     
                    Next serie
                End With
            Next obj
     
        End With
     
    End Sub
    Puis j'ai réussi à le débugger en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub réinitGraphs()
    
        With Sheets(1)
            For Each obj In .ChartObjects
                obj.Activate
                    For Each serie In ActiveChart.SeriesCollection
                
                        Debug.Print serie.Name
                
                    Next serie
            
            Next obj
            
        End With
    
    End Sub
    (Changements en rouge)

    Je ne comprends pas pourquoi le premier ne fonctionne pas. Je ne vois pas vraiment la différence, d'un coté j'ai un with sur le graph en cours, et je tente d'accéder à ses séries, mais ça ne fonctionne pas, de l'autre j'active le graph en cours et accède à ses séries.

    Voilou, si quelqu'un a une explication ça m'intéresse de savoir!

    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    as tu essayé de simplement supprimer le with?
    la boucle for each next n'active t elle pas l'object?

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2011
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 258
    Par défaut
    Coucou,

    C'était bien ça,

    en utilisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        With Sheets(1)
            For Each obj In .ChartObjects
                    For Each serie In ActiveChart.SeriesCollection
     
                        Debug.Print serie.Name
     
                    Next serie
            Next obj
     
        End With
    Ca fonctionne Merci

    Un souci sur ce même sujet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For Each serie In ActiveChart.SeriesCollection
                       
                     Select Case obj.Index
                            
                            Case 1
                                            
                                            serie.XValues = "=" & nom & "!R2C2:R2C14"
                                            serie.Values = "=" & nom & "!R3C2:R3C14"
                                            serie.Name = "=" & nom & "!R3C1"
    
                           ...
    J'ai une erreur: "impossible de définir la propriété values de la classe Series"

    Si je fais un debug.Print serie.Name ça fonctionne, si je fais serie.Values par contre non.

    Avez vous une idée?

    J'ai cherché sur le forum, vu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      with .SeriesCollection(1)
        .Name = "prévu"
        .Values = Range("B5:B12")
        .XValues = Range("A5:A12")
      end with
    Qui à priori fonctionne mais pas pour moi

    J'ai tenté comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	nom = ActiveSheet.Name
     
    	With Sheets(nom)
     
    		'on parcoure les graphs
    		For Each obj In .ChartObjects
     
     
    			obj.Activate
    			With obj
    				.SeriesCollection(1).Values = Sheets(nom).Range("B2:B14")
    			End With
    		Next obj
    	End With
    Toujours sans succès, la même erreur "Erreur d'exécution '438': Propriété ou méthode non gérée par cet objet". Je ne comprends pas.

    Edit: J'ai cherché pas mal sur différents forums, certains ont résolu le souci en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        With Sheets(2)
            Dim Plage As Range, plageX As Range
     
            Set plageX = .Range("A2")
            Set Plage = .Range("B2:B14")
            ActiveSheet.ChartObjects(1).Activate
     
            ActiveChart.SeriesCollection(1).Name = plageX
            ActiveChart.SeriesCollection(1).XValues = Plage
     
        End With
    Mais toujours une erreur:

    "Erreur d'exécution '1004': Impossible de définir la propriété Name de la classe Series."

    Edit2:

    Tenté juste de changer le nom d'une série, en nommant tout, en vérifiant les noms des graphs au cas où...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        With Sheets(2)
            Dim Plage As Range, plageX As Range
     
            Set plageX = .Range("A2")
            Set Plage = .Range("B2:B14")
            For Each c In ActiveSheet.ChartObjects
     
                Debug.Print c.Name
     
            Next c
            ActiveSheet.ChartObjects("synthese").Activate
            ActiveChart.SeriesCollection(1).Name = "lol"
     
        End With
    J'ai donc "Impossible de définir la propriété Name de la classe Series."

    Edit3 (:o):

    J'ai généré un code avec un enregistrement de macro. CE CODE NE S'EXÉCUTE PAS NON PLUS. :o Erreur: "Impossible de définir la propriété Values de la classe Series"

    Je commençais à me dire qu'il y avait vraiment un souci avec le code que j'écrivais, mais à priori non.

    Donc le changement nom, valeur de séries fonctionne en manuel mais pas en vba.

    Le code généré:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub omg()
    '
    ' omg Macro
    ' Macro enregistrée le 27/07/2011 par Elodie
    '
     
    '
        ActiveSheet.ChartObjects("synthese").Activate
        ActiveChart.ChartArea.Select
        ActiveChart.SeriesCollection(1).Values = "=Feuil2!R7C2:R7C7"
    End Sub
    Si quelqu'un a une idée je suis pas contre...

  4. #4
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    pas vraiment d'idée ( les graphique je ne les manipule que par fonction feuille)
    mais essayes peut etre ça
    n
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    om = ActiveSheet.Name
     
    	With Sheets(nom)
     
    		'on parcoure les graphs
    		For Each obj In .ChartObjects
     
     
    			SeriesCollection(1).Values = Sheets(nom).Range("B2:B14")
     
    		Next obj
    	End With

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2011
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 258
    Par défaut
    Coucou,

    Merci de t'intéresser à mon problème.

    Donc j'ai testé tel quel, erreur "Sub ou Function non définie" sur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SeriesCollection(1).Values = Sheets(nom).Range("B2:B14")
    J'ai testé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .SeriesCollection(1).Values = Sheets(nom).Range("B2:B14")
    Erreur: "Propriété ou méthode non gérée par cet objet"

    Puis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    obj.SeriesCollection(1).Values = Sheets(nom).Range("B2:B14")
    Erreur: "Propriété ou méthode non gérée par cet objet"

    Puis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SeriesCollection(1).Values = Sheets(nom).Range("B2:B14")
    Erreur: "Impossible de définir la propriété Values de la classe Series."

    Du nouveau:

    En fait, les valeurs des séries sont bien changées, mais j'ai tout de même l'erreur

    "Erreur d'exécution '1004':
    Impossible de définir la propriété Values de la classe Series."

    Code utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub lol()
        nom = ActiveSheet.Name
     
        With Sheets(nom)
     
            'on parcoure les graphs
            For Each obj In .ChartObjects
     
     
                ActiveChart.SeriesCollection(3).Values = Sheets(nom).Range("B2:B14")
     
            Next obj
        End With
    End Sub
    C'est bien que ça fonctionne, même si il y a une erreur, mais je ne peux pas m'en servir étant donné que dans ma "vraie" macro c'est une d'une dizaine de nom/valeur de série à changer, ça bloquera à la première.

    Bref si ce fait peut faire avancer le schmilblick! ^^

    Edit:

    En changeant la plage, ça donne une nouvelle erreur:

    "Variable objet ou variable de bloc With non définie"

    sur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SeriesCollection(3).Values = plage
    code de test utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub lol()
        Dim plage As Range
        Set plage = Sheets(2).Range(Cells(5, 2), Cells(5, 14))
        With Sheets(2)
     
            'on parcoure les graphs
            For Each obj In .ChartObjects
     
     
                ActiveChart.SeriesCollection(3).Values = plage
     
            Next obj
        End With
    End Sub

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2011
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 258
    Par défaut
    Fixed!

    Ce code fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        With Sheets(2)
     
            'on parcoure les graphs
            For Each obj In .ChartObjects
                obj.Activate
                Select Case obj.Index
                    Case 1
                        ActiveChart.SeriesCollection(1).Values = Sheets(2).Range("B5:N5")
                    Case Else
                End Select
            Next obj
        End With
    Ne me demandez pas pourquoi celui ci fonctionne et les autres non... ^^

    Si ça peut servir à d'autres!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/08/2014, 22h32
  2. Réponses: 6
    Dernier message: 03/06/2010, 23h35
  3. Comment manipuler et sauvegarder des données?
    Par jlm57 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 21/06/2009, 20h12
  4. Réponses: 4
    Dernier message: 14/01/2008, 01h15
  5. [MySQL] Utilisation des fonctions des récupérations des données
    Par Konrad Florczak dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/10/2006, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo