Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 14/03/2010, 13h41   #1
Membre à l'essai
 
Homme Philippe
technicien
Inscription : janvier 2010
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 48
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : technicien
Secteur : Santé

Informations forums :
Inscription : janvier 2010
Messages : 54
Points : 23
Points : 23
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 :
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 :
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

Dernière modification par Philippe JOCHMANS ; 14/03/2010 à 17h45. Motif: Modification des balises : utiliser les balises CODE (#) et non QUOTE
tremens est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 17h50   #2
Membre à l'essai
 
Homme Philippe
technicien
Inscription : janvier 2010
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 48
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : technicien
Secteur : Santé

Informations forums :
Inscription : janvier 2010
Messages : 54
Points : 23
Points : 23
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 :
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

Dernière modification par Philippe JOCHMANS ; 14/03/2010 à 18h05. Motif: Modification des balises : utiliser les balises CODE (#) et non QUOTE
tremens est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 22h07   #3
Membre à l'essai
 
Homme Philippe
technicien
Inscription : janvier 2010
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 48
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : technicien
Secteur : Santé

Informations forums :
Inscription : janvier 2010
Messages : 54
Points : 23
Points : 23
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 :
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

Dernière modification par AlainTech ; 08/05/2010 à 14h58. Motif: Balises [code], pas [quote]
tremens est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 02h01.


 
 
 
 
Partenaires

Hébergement Web