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 :

Range sur demande pour un chart


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    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
    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 : 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
     
    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")

  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
    Bonsoir,

    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
    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")

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Exemple
    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
    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

  4. #4
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    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
    Par défaut
    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

Discussions similaires

  1. [XL-2010] Range comprenant 1 cellule sur 2 pour valeurs d'un graphique
    Par YanBos dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/02/2014, 19h18
  2. Réponses: 3
    Dernier message: 16/01/2014, 10h15
  3. Demande de Tuto sur TCD pour regroupement
    Par yanou91 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/02/2013, 14h40
  4. Demande d'avis sur prix pour petit site
    Par cuisto44000 dans le forum Devis
    Réponses: 11
    Dernier message: 23/08/2010, 22h56
  5. Réponses: 2
    Dernier message: 11/04/2007, 21h59

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