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 :

[VBA] Graph Excel avec données en X et Y


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 9
    Points : 9
    Points
    9
    Par défaut [VBA] Graph Excel avec données en X et Y
    Bonjour,

    Depuis ce matin j'essaie de faire une macro me permettant de tracer un graph avec des données en X et en Y en fonction du nombre de valeurs contenu ds la feuille. J'ai utilisé l'enregistreur de macro pour voir comment cela fonctionnait (je découvre vba depuis ce matin je précise) mais impossible à arriver à automatiser cette tache.

    Voici mon code:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Sub Macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 01/04/2008 par thierry
    '
    
    '
    Dim feuille
    Set feuille = Sheets(1)
    
        Range("E4").Select
        Range(Selection, Selection.End(xlDown)).Select
        Charts.Add
        ActiveChart.ChartType = xlLineMarkers
        ActiveChart.SetSourceData Source:=feuille.Range("E4:E4732") _
            , PlotBy:=xlColumns
        ActiveChart.SeriesCollection(1).XValues = "=" & feuille & "!R4C1:R4732C1"
        ActiveChart.SeriesCollection(1).Name = "=""toto"""
        ActiveChart.Location Where:=xlLocationAsNewSheet
        With ActiveChart
            .HasTitle = True
            .ChartTitle.Characters.Text = "toto"
            .Axes(xlCategory, xlPrimary).HasTitle = False
            .Axes(xlValue, xlPrimary).HasTitle = False
            
        End With
    End Sub
    Cela plante à la ligne rouge (propriété ou methode non géré par cet objet). Si je remplace & feuille & par le vrai nom de la feuille cela fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SeriesCollection(1).XValues = "='6-Acquisition-130500.acq'!R4C1:R4732C1"
    Dans la variable "feuille" je récupère bien le nom de la feuille puisque la ligne de code précédent l'erreur ne plante pas ???? Le graph se trace mais plante au moment d'attribuer les données en X.

    Au moment ou il crée le graph, ma variable feuille ne fait peut etre plus appelle à la feuille originale mais a la feuille graphique nouvellement crée? Comment récupérer le nom de la premiere feuille alors (cette derniere a un nom variable et n'est pas de type feuill1)

    Merci d'avance,
    Thierry

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    J'ai retrouvé un bout de code dans le fond d'un tiroir, adapte les propriétés à ta sauce et teste le
    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
    17
    18
    19
    Sub Graph()
    Application.ScreenUpdating = False
     
    Charts.Add 'insertion du graphique
    ActiveChart.ChartType = xlColumnClustered 'type de graphique, ici modèle classique
    ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("A1:D32"), PlotBy:=xlColumns 'ce qu'on veut voir apparaître dans le graphique
    ActiveChart.Location Where:=xlLocationAsNewSheet 'emplacement du graphique, dans ce cas sur une nouvelle feuille
    With ActiveChart
        .HasTitle = True 'oui on veut nommer le graph.
        .ChartTitle.Characters.Text = "Test Graphique" 'nom du graph.
        .Axes(xlCategory, xlPrimary).HasTitle = True 'oui on veut nommer l'axe des absisses (X)
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Dates" 'nom de l'axe X
        .Axes(xlValue, xlPrimary).HasTitle = True 'oui on veut nommer l'axe des ordonnées (Y)
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Valeurs" 'nom de l'axe Y
    End With
     
    Sheets("Feuil1").Activate
    Application.ScreenUpdating = True
    End Sub

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Merci,
    mais en fait je bloque au moment ou je veux rajouter les données en X. Quand j'appelle la "fonction" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SeriesCollection(1).XValues = "=" & feuille & "!R4C1:R4732C1"
    Ca plante car je pense que ma variable feuille n'est pas du type qu'il attends (cf feuille = Sheets(1).

    Thierry

  4. #4
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Ok, essaye ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim feuille As String
    feuille = Sheets(1).Name

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    re,

    cela change l'erreur (Impossible de définir la propriété Xvalues de la classe séries au lieu de précedemment Prop ou méthode non gérée par cette objet.

    Je recopie le code que j'ai 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Sub EDR()
    '
    ' EDR Macro
    ' Macro enregistrée le 01/04/2008 par thierry
    '
     
    '
     
        Dim feuille
        Set feuille = Sheets(1)
     
        Dim feuille1 As String
        feuille1 = Sheets(1).Name
     
        Charts.Add
        ActiveChart.ChartType = xlXYScatterSmooth
        ActiveChart.SetSourceData Source:=feuille.Range("A1"), _
            PlotBy:=xlRows
        ActiveChart.SeriesCollection(1).XValues = "=" & feuille1 & "!R4C1:R4732C1"
        ActiveChart.SeriesCollection(1).Values = "=" & feuille1 & "!R4C6:R4732C6"
        ActiveChart.SeriesCollection(1).Name = "=""Acc Y"""
        ActiveChart.Location Where:=xlLocationAsNewSheet
        With ActiveChart
            .HasTitle = True
            .ChartTitle.Characters.Text = "Acc Y"
            .Axes(xlCategory, xlPrimary).HasTitle = False
            .Axes(xlValue, xlPrimary).HasTitle = False
        End With
        ActiveChart.SeriesCollection(1).Select
        With Selection.Border
            .Weight = xlThin
            .LineStyle = xlAutomatic
        End With
        With Selection
            .MarkerBackgroundColorIndex = xlAutomatic
            .MarkerForegroundColorIndex = xlAutomatic
            .MarkerStyle = xlNone
            .Smooth = True
            .MarkerSize = 5
            .Shadow = False
        End With
    End Sub
    C'est toujours à cette ligne que ça plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SeriesCollection(1).XValues = "=" & feuille1 & "!R4C1:R4732C1"

  6. #6
    Membre émérite
    Avatar de cb_60
    Homme Profil pro
    Chargé de mission technique
    Inscrit en
    Juillet 2007
    Messages
    1 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chargé de mission technique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 253
    Points : 2 377
    Points
    2 377
    Billets dans le blog
    14
    Par défaut
    Bonsoir
    regarde si cela peut te faire avancer?
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Sub Macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 01/04/2008 par thierry
    '
     
    '
    Dim feuille
    Dim titi
    Set feuille = Sheets(1)
     
        Range("d4:e4").Select
        titi = Range(Selection, Selection.End(xlDown)).Select
        Charts.Add
        With ActiveChart
            .ChartType = xlLineMarkers
            .SeriesCollection(1).Name = "toto"
            .HasTitle = True
            .ChartTitle.Characters.Text = "toto"
            .Axes(xlCategory, xlPrimary).HasTitle = False
            .Axes(xlValue, xlPrimary).HasTitle = False
     
        End With
    End Sub

  7. #7
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Ce qui pose sans doute problème également (j"y vais par suppositions parce que je ne manipule jamais les graphiques) c'est "R4C1:R4732C1"

    Change ces valeurs par les adresses de cellules correspondantes

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 9
    Points : 9
    Points
    9
    Par défaut


    Ca marche !

    J'ai remplacé par ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SeriesCollection(1).XValues = feuille.Range("A4:A4732")
    Merci !

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

Discussions similaires

  1. [XL-2000] graphe automatique avec données sources variables
    Par Rrrroh dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/08/2010, 10h14
  2. Creation Mail depuis Excel avec données de tableau
    Par anopaname dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/03/2010, 22h50
  3. Liaison Excel avec données alphanumeriques
    Par franckaccess dans le forum Modélisation
    Réponses: 1
    Dernier message: 31/05/2007, 15h43
  4. vba Graph Excel (valeur des axes)
    Par maxtin dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 20/12/2006, 21h50
  5. [VBA]macro Word avec données de MySQL
    Par Taz_8626 dans le forum VBA Word
    Réponses: 3
    Dernier message: 17/07/2006, 11h39

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