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 :

problème de création d'un graphique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 problème de création d'un graphique
    Bonjour,

    J'essaye de générer un graphique à l'aide d'un userform, mais celui-ci se plante jamais au même endroit

    Un peu d'aide, merci

    voici le 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
    28
    29
    30
    31
    32
    33
    34
    35
     
    Private Sub UserForm_Initialize()
     
    Dim PlageDonnees As Range, cmpt As Long, MaFeuille As Worksheet
    Dim ligne As Long, ncol As Integer, nomfichier As String
     
    '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("Feuil1")
     
    'detection nombre lignes & colonnes
    ncol = MaFeuille.Cells(13, "F").End(xlToRight).Column
     
    ligne = MaFeuille.Cells(Rows.Count, "F").End(xlUp).Row
     
    Set PlageDonnees = MaFeuille.Range("F13", MaFeuille.Cells(ligne, ncol))
     
    Me.ComboBox3.Style = fmStyleDropDownList
    Me.ComboBox5.Style = fmStyleDropDownList
    Me.ListBox1.MultiSelect = fmMultiSelectMulti
     
    'rempli les zones de la liste avec les noms des series
    For cmpt = 1 To PlageDonnees.Columns.Count
    Me.ComboBox3.AddItem PlageDonnees.Cells(cmpt).Value
    Me.ComboBox5.AddItem PlageDonnees.Cells(cmpt).Value
    Me.ListBox1.AddItem PlageDonnees.Cells(cmpt).Value
    Next cmpt
     
    'bloque la zone d'option tant que chekbox1 n'est pas cochée
    Me.Frame1.Enabled = False
     
     
    End Sub
    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
     
    Private Sub CommandButton2_Click()
    'gère le bouton tracer
    Dim MonGraphe As Chart, MaSerie As Series, compteur As Long, nomfichier As String
    Dim PlageX As Range, PlageY As Range, MaFeuille As Worksheet, PlageDonnees As Range
    Application.ScreenUpdating = False
     
    For compteur = 0 To Me.ListBox1.ListCount - 1
        If Me.ListBox1.Selected(compteur) Then
            If MonGraphe Is Nothing Then
    Set MonGraphe = ThisWorkbook.Charts.Add
    'MaFeuille.ChartObjects.Add(100, 100, 500, 350).Chart
    MonGraphe.ChartArea.Clear
    MonGraphe.ChartType = xlXYScatterSmoothNoMarkers
    End If
     
    Set PlageX = PlageDonnees.Columns(Me.ComboBox1.ListIndex + 1)
    Set PlageY = PlageDonnees.Columns(compteur + 1)
    Set MaSerie = MonGraphe.SeriesCollection.NewSeries
        With MaSerie
        .Values = PlageY
        .XValues = PlageX
    End With
    End If
    Next compteur
     
    If Not MonGraphe Is Nothing Then
    If Len(Me.TextBox1.Text) > 0 Then
    MonGraphe.HasTitle = True
    MonGraphe.ChartTitle.Characters.Text = Range("g6")
    End If
    MonGraphe.HasLegend = Me.CheckBox1.Value
    End If
     
     
     
    End Sub

    Tremens

  2. #2
    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
    Je continue à chercher, j'ai en partie trouvé, mais le code bloque maintenant sur la ligne ncol=........
    Je pensais qu'en écrivant dans userform_initialize, la référence de ma plage de données, elle servirait à tout les modules de l'userform...mais à priori non puisque j'arrive à tracer mon graphe dans la feuille mais avec une erreur (celle citée dans ma 1ère phrase)...

    en italique : ce que j'ai rajouté par rapport au précédent post
    en gras : ligne qui bloque
    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
    
    Private Sub CommandButton2_Click()
    'gère le bouton tracer
    Dim MonGraphe As Chart, MaSerie As Series, compteur As Long, nomfichier As String
    Dim PlageX As Range, PlageY As Range, MaFeuille As Worksheet, PlageDonnees As Range
    Dim ligne As Integer, ncol As Long
    
    '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("Feuil1")
    
    'detection nombre lignes & colonnes
    ncol = MaFeuille.Cells(13, "F").End(xlToRight).Column
    ligne = MaFeuille.Cells(Rows.Count, "F").End(xlUp).Row
    
    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
    'Set MonGraphe = ThisWorkbook.Charts.Add
    Set MonGraphe = MaFeuille.ChartObjects.Add(100, 100, 500, 350).Chart
    MonGraphe.ChartArea.Clear
    MonGraphe.ChartType = xlXYScatterSmoothNoMarkers
    End If
    
    Set PlageX = PlageDonnees.Columns(Me.ComboBox1.ListIndex + 1)
    Set PlageY = PlageDonnees.Columns(compteur + 1)
    Set MaSerie = MonGraphe.SeriesCollection.NewSeries
        With MaSerie
        .Values = PlageY
        .XValues = PlageX
    End With
    End If
    Next compteur
    
    If Not MonGraphe Is Nothing Then
    If Len(Me.TextBox1.Text) > 0 Then
    MonGraphe.HasTitle = True
    MonGraphe.ChartTitle.Characters.Text = Workbooks(nomfichier).Worksheets("Feuil2").Range("g6")
    End If
    MonGraphe.HasLegend = Me.CheckBox1.Value
    End If
    
        
    
    End Sub
    , mon code est-il trop lourd?, que puis-je améliorer?, je vous suis tout ouïe



    Tremens

  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
    J'avance surement mais doucement....

    J'ai réussi à le faire marcher...mais je ne sais pas vraiment comment.
    J'ai faits quelques modifications...voici le code

    Il n'est pas fini entièrement, je dois encore intégrer l'axe secondaire des ordonnées....

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Private Sub CommandButton2_Click()
    'gère le bouton tracer
    Dim MonGraphe As Chart, MaSerie As Series, compteur As Long, nomfichier As String
    Dim PlageX As Range, PlageY As Range, MaFeuille As Worksheet, PlageDonnees As Range
    Dim ligne As Integer, ncol As Long, Axe As Axis
     
    '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("Feuil1")
     
    'detection nombre lignes & colonnes
    ncol = MaFeuille.Cells(13, "F").End(xlToRight).Column
    ligne = MaFeuille.Cells(Rows.Count, "F").End(xlUp).Row
     
    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
     
    Set MonGraphe = MaFeuille.ChartObjects.Add(100, 100, 500, 350).Chart
    MonGraphe.ChartArea.Clear
    MonGraphe.ChartType = xlXYScatterSmoothNoMarkers
    End If
     
    Set PlageX = PlageDonnees.Columns(Me.ComboBox3.ListIndex + 1)
    Set PlageY = PlageDonnees.Columns(compteur + 1)
    Set MaSerie = MonGraphe.SeriesCollection.NewSeries
        With MaSerie
        .Values = PlageY
        .XValues = PlageX
    End With
    End If
    Next compteur
    If Not MonGraphe Is Nothing Then
    If Len(Me.ComboBox1.Text) > 0 Then
    MonGraphe.HasTitle = True
    MonGraphe.ChartTitle.Characters.Text = Workbooks(nomfichier).Worksheets("Feuil2").Range("g6")
    End If
    MonGraphe.HasLegend = Me.CheckBox3.Value
    If MonGraphe.HasLegend And Me.OptionButton1 Then
    MonGraphe.Legend.Position = xlLegendPositionLeft
    End If
    End If
     
     For Each MaSerie In MonGraphe.SeriesCollection
        MaSerie.FormulaR1C1Local = Replace(MaSerie.FormulaR1C1Local, "L13C", "L14C")
        'If InStr(1, MaSerie.Name, "Pression reacteur", vbTextCompare) > 0 Then
        'MaSerie.AxisGroup = xlSecondary
       ' End If
        Next MaSerie
     
        With MonGraphe
        'action sur l'axe des X
        Set Axe = .Axes(xlCategory, xlPrimary)
        With Axe
            .HasTitle = True
            .AxisTitle.Text = ComboBox3
                    End With
        'action sur l'axe des ordonnées à gauche
        Set Axe = .Axes(xlValue, xlPrimary)
        With Axe
            .HasTitle = True
            .AxisTitle.Text = ComboBox6
            End With
        'action sur l'axe des ordonnées de droite
        ' Set Axe = .Axes(xlValue, xlSecondary)
        'With Axe
           ' .HasTitle = True
           ' .AxisTitle.Text = Workbooks(nomfichier).Worksheets("Feuil2").Range("C6").Value
     
        End With
     
    End Sub
    Je l'éditerai demain au bureau pour le comparer sur papier, c'est mieux qu'à l'écran LCD, j'ai les yeus

    je suis toujours ouvert à vos suggestions pour ce code....

    Merci

    Tremens

Discussions similaires

  1. Problème avec création d'un graphique
    Par mathilde13870 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/03/2014, 11h41
  2. Problème de création de série pour graphique à partir de variables
    Par isma616 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/08/2010, 17h18
  3. Problème pour la création d'un graphique
    Par yabiyou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/01/2008, 15h04
  4. problème de création d'un état graphique
    Par bigounet dans le forum Access
    Réponses: 4
    Dernier message: 10/04/2006, 20h23
  5. Réponses: 2
    Dernier message: 29/03/2004, 18h29

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