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 :

Graphique à partir d'une listbox [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut Graphique à partir d'une listbox
    Bonjour,

    Je n'arrive à faire correspondre un choix d'une listbox pour alimenter un graphique. Je présice les series sont en lignes et non en colonnes.

    Si je choisis les 5 series, seul la 2 et la 4 se tracent correctement!

    De plus, la légende ne se crée pas en fonction des choix de la listbox.

    J'ai du mal avec ce code que j'ai récupéré sur le net...

    L'alimentation de la listbox:
    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
     
    'récupération nom du fichier excel actif
    nomfichier = ActiveWorkbook.Name
     
    'permet de faire reference a la feuille sans avoir a tout taper
    Set MaFeuille = Workbooks(nomfichier).Worksheets("global")
     
    'référence à la plage de données
    Set p0 = MaFeuille.Range("a1:m1")
    Set p1 = MaFeuille.Range("a3")
    Set p2 = MaFeuille.Range("a5")
    Set p3 = MaFeuille.Range("a7")
    Set p4 = MaFeuille.Range("a9")
    Set p5 = MaFeuille.Range("a11")
    Set PlageDonnees = Union(p1, p2, p3, p4, p5)
     
    Me.ListBox1.MultiSelect = fmMultiSelectMulti
     
    'rempli les zones de la liste avec les noms des series
    For cmpt = 1 To Cells(Rows.Count, "a").End(xlUp).Row
    If PlageDonnees.Cells(cmpt).Value <> 0 Then
    Me.ListBox1.AddItem PlageDonnees.Cells(cmpt).Value
    End If
    Next cmpt
    Le tracé du graphique en fonction des choix:
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    'permet de faire reference a la feuille sans avoir a tout taper
    Set MaFeuille = Workbooks(nomfichier).Worksheets("Global")
     
     
    'référence à la plage de données
    Set p0 = MaFeuille.Range("b1:m1") 'axe des x
    Set p1 = MaFeuille.Range("b3:m3")
    Set p2 = MaFeuille.Range("b5:m5")
    Set p3 = MaFeuille.Range("b7:m7")
    Set p4 = MaFeuille.Range("b9:m9")
    Set p5 = MaFeuille.Range("b11:m11")
    Set PlageDonnees = Union(p1, p2, p3, p4, p5) 'valeurs des y
    'Application.ScreenUpdating = False
     
    For compteur = 0 To Me.ListBox1.ListCount - 1
        If Me.ListBox1.Selected(compteur) Then
            If MonGraphe Is Nothing Then
     
    Set MonGraphe = Workbooks(nomfichier).Charts.Add
    MonGraphe.ChartArea.Clear
    MonGraphe.ChartType = xlXYScatterSmoothNoMarkers
    End If
     
    Set PlageY = PlageDonnees.Rows(compteur)
            Set PlageX = MaFeuille.Range("b1:m1")
     
     
    Set MaSerie = MonGraphe.SeriesCollection.NewSeries
        With MaSerie
        .Values = PlageY
        .XValues = PlageX
        End With
        With MonGraphe
        .SeriesCollection(compteur).Name = PlageDonnees.Cells(compteur, 1).Value
    End With
    End If
     
    Next compteur
     
    With MonGraphe
        'Titre du graphique
        .HasTitle = True
        With .ChartTitle
        .Text = "Comparaison entre les différents lots"
        '.Border.LineStyle = xlThin
        '.Shadow = True
        End With
        End With
     
     
        With MonGraphe
        'action sur l'axe des X
        Set Axe = .Axes(xlCategory, xlPrimary)
        With Axe
            .HasTitle = True
            .AxisTitle.Text = Workbooks(nomfichier).Worksheets("Global").Range("a1").Value
                    End With
        'action sur l'axe des ordonnées à gauche
        Set Axe = .Axes(xlValue, xlPrimary)
        With Axe
            .HasTitle = True
            .AxisTitle.Text = Workbooks(nomfichier).Worksheets("Global").Range("N3").Value
            End With
     
            End With
    Merci de m'aider sur ce coup...svp

    Tremens

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,
    Une première remarque : Si le premier élément de la listbox est sélectionné, "Compteur" est égal à 0, donc tu va avoir une erreur sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .SeriesCollection(compteur).Name = PlageDonnees.Cells(compteur, 1).Value
    "compteur" est l'index de la position de l'item dans la listbox; si tu as sélectionné le cinquième élément (compteur = 4), tu vas essayé de créeer une série n° 4 alors que c'est la première série.
    Remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .SeriesCollection(compteur).Name = PlageDonnees.Cells(compteur, 1).Value
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maserie.Name = PlageDonnees.Cells(compteur, 1).Value
    puisque tu as défini la série créée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set maserie = mongraphe.SeriesCollection.NewSeries

  3. #3
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    Merci Daniel,

    Et pourtant je l'avais lu...

    Grâce à toi, j'ai mon graphique qui se fait en fonction du choix fait dans la listbox.

    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
     
    'référence à la plage de données
    Set p0 = MaFeuille.Range("a1:m1")
    Set p1 = MaFeuille.Range("a3:m3")
    Set p2 = MaFeuille.Range("a5:m5")
    Set p3 = MaFeuille.Range("a7:m7")
    Set p4 = MaFeuille.Range("a9:m9")
    Set p5 = MaFeuille.Range("a11:m11")
    Set PlageDonnees = Union(p1, p2, p3, p4, p5)
    'Set PlageDonnees = MaFeuille.Range("F13", MaFeuille.Cells(ligne, ncol))
     
    'Application.ScreenUpdating = False
     
    For compteur = 0 To Me.ListBox1.ListCount - 1
        If Me.ListBox1.Selected(compteur) Then
            If MonGraphe Is Nothing Then
            MsgBox compteur
     
    Set MonGraphe = Workbooks(nomfichier).Charts.Add
    MonGraphe.ChartArea.Clear
    MonGraphe.ChartType = xlXYScatterSmoothNoMarkers
    End If
     
    Set PlageY = PlageDonnees.Rows(compteur * 2 + 1)
            Set PlageX = MaFeuille.Range("a1:m1")
     
     
    Set MaSerie = MonGraphe.SeriesCollection.NewSeries
        With MaSerie
        .Values = PlageY
        .XValues = PlageX
        End With
        With MonGraphe
        MaSerie.Name = PlageDonnees.Cells(compteur * 2 + 1, 1).Value
     
    End With
     
    With MonGraphe
        .HasLegend = True
        .Legend.position = xlLegendPositionRight
    End With
    Il me reste encore quelque chose qui ne marche pas. C'est les valeurs des abscisses dans mon graphique. Pourtant je les ai bien déclarées...

    Merci Daniel

    Tremens

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Tu avais mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set PlageX = MaFeuille.Range("b1:m1")
    et tu as modifié en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set PlageX = MaFeuille.Range("a1:m1")
    à part ça, quelle est l'erreur ?

  5. #5
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    C'est que j'ai 1,2,3,.... au lieu d'avoir Ampoule,.....

    Pourquoi??? je ne voie pas.

    Tremens

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Je ne comprends pas très bien; peux-tu mettre un classeur exemple en pièce jointe ?

  7. #7
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    Bonjour Daniel,

    Voillà le fichier légèrement épuré...

    Merci

    Tremens
    Fichiers attachés Fichiers attachés

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Dans un graphique en nuage de points, les valeurs des abscisses doivent être numériques. Change le type de graphique (en courbe, par exemple) et tu verras les bonnes valeurs apparaître.

  9. #9
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    Merci Daniel pour l'info...

    Résolu

    Tremens

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/07/2006, 11h22
  2. Photo à partir d'une listbox dans formulaire
    Par alex.a dans le forum IHM
    Réponses: 17
    Dernier message: 17/05/2006, 09h50
  3. [VBA-A]récuperation de champs à partir d'une listbox
    Par jouf dans le forum VBA Access
    Réponses: 10
    Dernier message: 05/04/2006, 15h43
  4. Réponses: 5
    Dernier message: 05/04/2006, 12h23
  5. [JpGraph] Générer un graphique à partir d'une requête
    Par shun dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 31/01/2006, 19h24

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