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 31/01/2012, 18h42   #1
Invité de passage
 
Homme
Chargé d'affaire
Inscription : janvier 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Chargé d'affaire
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : janvier 2012
Messages : 4
Points : 0
Points : 0
Par défaut Range sur demande pour un chart

Bonjour!

Je tente de faire un macro qui crée un graphique utilisant des plages au choix de l'utilisateur. Mon idée est de "construire" le range en ajoutant les cellules une par une dans un enchainement de "If check_box=1 then". Après je passe le tout dans les sources du chart.

Cependant comme vous le constaterez, ma syntaxe est assurément erronée mais je ne trouve aucune ressource à ce sujet...

Merci de votre aide!

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
If zvz_box = 1 Then
    myNameRange = myNameRange + "G2"
    myValueRange = myValueRange + "J2"
End If
 
If zvt_box = 1 Then
    myNameRange = myNameRange + "G3"
    myValueRange = myValueRange + "J3"
End If
 
If zvp_box = 1 Then
    myNameRange = myNameRange + "G4"
    myValueRange = myValueRange + "J4"
End If
 
' Blablabla et ensuite déterminer le range du chart en passant la variable
 
myChart.Chart.SeriesCollection.NewSeries
myChart.Chart.SeriesCollection(1).XValues = Sheets("metadata").Range(myValueRange)
myChart.Chart.SeriesCollection(1).Values = Sheets("metadata").Range(myNameRange)
myChart.Chart.SeriesCollection(1).Name = Sheets("metadata").Range("H1")
vincedm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 21h30   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonsoir,

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
If zvz_box = 1 Then
    If myNameRange Is Nothing Then
        Set myNameRange = [G2]
    Else
        Set myNameRange = Union(myNameRange, [G2])
    End If
    If myValueRange Is Nothing Then
        Set myValueRange = [J2]
    Else
        Set myValueRange = Union(myValueRange, [J2])
    End If
End If
 
If zvt_box = 1 Then
    If myNameRange Is Nothing Then
        Set myNameRange = [G3]
    Else
        Set myNameRange = Union(myNameRange, [G3])
    End If
    If myValueRange Is Nothing Then
        Set myValueRange = [J3]
    Else
        Set myValueRange = Union(myValueRange, [J3])
    End If
End If
 
If zvp_box = 1 Then
    If myNameRange Is Nothing Then
        Set myNameRange = [G4]
    Else
        Set myNameRange = Union(myNameRange, [G4])
    End If
    If myValueRange Is Nothing Then
        Set myValueRange = [J4]
    Else
        Set myValueRange = Union(myValueRange, [J4])
    End If
End If
 
' Blablabla et ensuite déterminer le range du chart en passant la variable
 
myChart.Chart.SeriesCollection.NewSeries
myChart.Chart.SeriesCollection(1).XValues = Sheets("metadata").Range(myValueRange)
myChart.Chart.SeriesCollection(1).Values = Sheets("metadata").Range(myNameRange)
myChart.Chart.SeriesCollection(1).Name = Sheets("metadata").Range("H1")
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/01/2012, 21h54   #3
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Exemple
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
Sub Graphique2()
Dim Plage As String
Dim MyChart As ChartObject
 
 
With Worksheets("metadata")
    If .zvz_box Then Plage = "G2"
    If .zvt_box Then Plage = Plage & ",G3"
    If .zvp_box Then Plage = Plage & ",G4"
    If Plage <> "" Then
        If Left(Plage, 1) = "," Then Plage = Mid(Plage, 2)
        Set MyChart = .ChartObjects("Graphique 2")    'à adapter
        With MyChart.Chart
            If .SeriesCollection.Count > 0 Then .SeriesCollection(1).Delete
            With .SeriesCollection.NewSeries
                .XValues = Worksheets("metadata").Range(Plage).Offset(0, 2)
                .Values = Worksheets("metadata").Range(Plage)
                .Name = Worksheets("metadata").Range("H1")
            End With
        End With
        Set MyChart = Nothing
    End If
End With
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/02/2012, 14h04   #4
Invité de passage
 
Homme
Chargé d'affaire
Inscription : janvier 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Chargé d'affaire
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : janvier 2012
Messages : 4
Points : 0
Points : 0
Bonjour mercatog,

Merci pour ta solution, elle me plait beaucoup! Cependant j'ai encore un problème:

J'ai toujours une erreur lors de l'attribution du range au chart. Après quelques tests, j'ai constaté qu'il accepte les ranges au format "G2:G5" mais pas "G2,G3,G4,G5"

J'envisage une solution assez tourtueuse, penses-tu qu'il existe un chemin plus simple vers une finalité fonctionnelle?

Merci!
Vincent
vincedm 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 +2. Il est actuellement 11h28.


 
 
 
 
Partenaires

Hébergement Web