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 :

Création de séries [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de horemheb
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Par défaut Création de séries
    Bonjour,
    Je suis en train de développer un programme de gestion d'index de production de panneaux solaires.
    A chaque début d'année je crée une nouvelle courbe (série) dans mon graphique.

    Je me heurte à un problème de notation :
    Alors qu'il accepte la notation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SeriesCollection(1).Values = Worksheets("Tableaux production").Range("C5:C17")
    il refuse celle qui me semble équivalente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SeriesCollection(1).Values = Worksheets("Tableaux production").Range(Cells(5, 3), Cells(17, 3))
    Pouvez-vous m'éclairer à ce sujet

    Merci

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par horemheb Voir le message
    il refuse celle qui me semble équivalente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SeriesCollection(1).Values = Worksheets("Tableaux production").Range(Cells(5, 3), Cells(17, 3))
    Erreur classique de débutant on l'a tous faite ) et qui revient fréquemment sur le forum.

    Le problème c'est que tu essayes de construire une référence de zone (Range) qui se trouverait dans la feuille "Tableaux production" mais utilisant des cellules se trouvant dans la feuille active qui, je suppose, n'est pas "Tableaux production" à ce point du code.
    En plus, si je comprends bien ton code, la feuille active à cet instant est un Graph qui, pas nature, ne contient pas d'objet Cells.

    L'erreur vient du fait que tu ne précise pas la feuille des objets Cells.
    Pour toi (et pour moi aussi), il semble évident qu'elles sont identiques à celle du Range mais pour VBA, il faut plus de rigueur.

    Ton code corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("Tableaux production")
        ActiveChart.SeriesCollection(1).Values = .Range(.Cells(5, 3), .Cells(17, 3))
    End With
    Personnellement, je préconiserais plutôt l'usage de variable de type Worksheet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim WS_Source As Worksheet
    Set WS_Source = Worksheets("Tableaux production")
    ActiveChart.SeriesCollection(1).Values = WS_Source.Range(WS_Source.Cells(5, 3), WS_Source.Cells(17, 3))
    Utiliser aussi une variable de type Sheet pour désigner la feuille contenant le graphe, ce serait plus propre que ActiveChart.

  3. #3
    Membre confirmé Avatar de horemheb
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Par défaut
    Merci pour ces informations, je vais étudier celà

  4. #4
    Membre confirmé Avatar de horemheb
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Par défaut
    Menhir, comme tu l'a deviné, j'ai mon graphique "Graphique 1" dans une feuille et mes données dans une autre feuille "Tableaux production". Pour les objets Range et Cells, j'ai compris le problème et rectifié. Par contre je coince sur le graphique, mes notions concernant les objets et collections d'objets étant très superficielles.

    J'ai essayé une déclaration de type Sheet
    j'obtiens l'erreur "Type non défini"

    Avec une déclaration de type Chart
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Graphique As Chart
    Set Graphique = Charts("Graphique 1")
    J'obtiens l'erreur "l'indice n'appartient pas à la sélection"
    de même avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Graphique = Charts(1)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Graphique = Sheets("Graphique 1")
    Bref je patauge. J'ai contourné le problème de la façon suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Production As Worksheet
    Dim Graphique As Chart
     
    Set Production = Worksheets("Tableaux production")
    Worksheets("Accueil").Activate
    ActiveSheet.ChartObjects("Graphique 1").Activate
    Set Graphique = ActiveChart
    Je pense qu'il y a plus "élégant" pour affecter le graphique à ma variable. Peux-tu me mettre sur la bonne voie

    Merci

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par horemheb Voir le message
    Menhir, comme tu l'a deviné, j'ai mon graphique "Graphique 1" dans une feuille et mes données dans une autre feuille "Tableaux production". Pour les objets Range et Cells, j'ai compris le problème et rectifié. Par contre je coince sur le graphique, mes notions concernant les objets et collections d'objets étant très superficielles.

    J'ai essayé une déclaration de type Sheet
    j'obtiens l'erreur "Type non défini"
    J'ai répondu un peu vite et sans vérifier.
    Effectivement, le type d'objet Sheet n'existe pas. C'est soit Worksheet (pour les feuilles de calcul) soit Graph (pour les graphiques).
    Lire ça :
    https://docs.microsoft.com/fr-FR/off...i/excel.sheets
    https://docs.microsoft.com/fr-FR/off....chart(object)

    Avec une déclaration de type Chart
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Graphique As Chart
    Set Graphique = Charts("Graphique 1")
    J'obtiens l'erreur "l'indice n'appartient pas à la sélection"
    Ce type d'erreur signale généralement une erreur dans le nom d'onglet.

    Est-ce qu'il s'agit d'un onglet graphique ou d'un graphique placé dans une feuille de calcul ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Production As Worksheet
    Dim Graphique As Chart
     
    Set Production = Worksheets("Tableaux production")
    Worksheets("Accueil").Activate
    ActiveSheet.ChartObjects("Graphique 1").Activate
    Set Graphique = ActiveChart
    Ce code semble répondre à ma question précédente : ton graph n'est pas une feuille indépendant mais un objet dans une Worksheet, ce qui n'est pas la même chose.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Production As Worksheet
    Dim Graphique As ChartObject
     
    Set Production = Worksheets("Tableaux production")
    Set Graphique = Worksheets("Accueil").ChartObjects("Graphique 1")

  6. #6
    Membre confirmé Avatar de horemheb
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Par défaut
    Merci pour ton aide

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

Discussions similaires

  1. Créations automatique de séries pour graphique
    Par tyros25 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/10/2016, 16h45
  2. Création/Test d'existence de séries dans un graphique
    Par jambonland dans le forum Excel
    Réponses: 2
    Dernier message: 18/07/2013, 10h20
  3. RXTX et création dynamqique de ports séries
    Par e-zaz dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 29/12/2011, 11h22
  4. Tracé de graphes par macro - Création de séries obsolètes
    Par cyrille31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/12/2008, 11h00
  5. [chart] Débutant sur les création de séries
    Par titiyo dans le forum Débuter
    Réponses: 1
    Dernier message: 25/08/2007, 09h51

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