[RESOLU] changer la source d'un graphique selon des Optionbutton

Enerjp

XLDnaute Junior
Bonjour le forum,

Alors voila, j'ai fais un petit programme pour présenter des résultats à des clients. Celui-si les affiche les résultats d'une étude communale et peu les afficher suivantes des répartitions différantes. Par ville, rue ou par habitation. Je calcule les différentes sommes avec un TCD et copier juste les valeurs dans mon programme (le tableau ville dans une feuille "ville", le tableau rue, feuille "ruue ,etc..).

Un userform permet de faire la sélection. Il y à d'abord un frame avec trois optionbutton (Ville,Rue et Habitation) qui va sélectionner une des trois feuilles. Puis deux combobox (selection de la ville et de la rue) qui vont alimenter les filtres.

Jusque là pas de problème, les ghraphiques affichent les donées visibles de la pages. le oproblème vien poue le cas par cas, car comme vous pourrez le voir le chois de l'habitation ce fais par list box, et je n'arrive pas à alimenter les graphiques.

je vais mettre un fichier exemple ce sera plus claire.

mais la ou j'ai besoin d'aide c'est pour faciliter la modification des graphiques. Mon chef est assez indécis et donc je me retrouve à changer tout le temps les donnes des graphes... pouriez vous me donner une bonne solution pour faciliter cette tache?

De même pour le programme en génarale, je dois faire quelque chose que le client ne peu pas toucher, sans avoir acces aux données, si vous activez le principe actuel dans le module 3 sub "cacher", mais jai souvent un probleme de mise a jours des donnes que je ne sais pas enlever, bref que des bugs^^ mais bon.

Voici encore un exemple pour les graphiques alimenté selon optionbutton
le code pour ouvrir le fichier est 4448

Code:
Sub graphiqueinstalle()
Dim textstring As String
    
    Sheets("Ville").Rows("1:1").AutoFilter
    Sheets("Rue").Rows("1:1").AutoFilter
    Sheets("Total").Rows("1:1").AutoFilter
    
    With Sheets("Impression").ChartObjects("1")
        .Visible = True
        .Activate
    End With
    
    With Selection
    
If .OptionButtonRue = True Then
        
    Sheets("Total").Range("A1:c1").AutoFilter Field:=1, Criteria1:=.ComboVille.Value
    Sheets("Total").Range("A1:c1").AutoFilter Field:=2, Criteria1:=.ComboRue.Value
        
    With ActiveChart
    .SetSourceData Source:=Sheets("Total").Range("A1")
    .HasTitle = True
    .ChartTitle.Text = "Installation(s) solaire(s) de : " & Selection.ComboRue.Value & " (" & Selection.ComboVille.Value & ")"
    .ApplyLayout (3)
    .SeriesCollection(1).XValues = "='Total'!$C$2:$C$786"
    .SeriesCollection(1).Name = "=""NB de panneaux TH"""
    .SeriesCollection(1).Values = "='Total'!$J$2:$J$786"
    .SeriesCollection.NewSeries
    .SeriesCollection(2).Name = "=""NB de panneau PV"""
    .SeriesCollection(2).Values = "='Total'!$M$2:$M$786"
    .Axes(xlValue).HasTitle = True
    .Axes(xlValue).AxisTitle.Text = "Répartition des installations existantes"
    .Axes(xlCategory).HasTitle = True
    .Axes(xlCategory).AxisTitle.Text = "N° de rue"
    .PlotVisibleOnly = True
    .Refresh
    End With
    
ElseIf .OptionButtonVille = True And .ComboVille.Value = "Total général" Then
    
    Sheets("Ville").Rows("1:1").AutoFilter
    
    With ActiveChart
    .PlotVisibleOnly = False
    .SetSourceData Source:=Sheets("Ville").Range("A1")
    .HasTitle = True
    .ChartTitle.Text = "Installation(s) solaire(s) répartie par localitées"
    .ApplyLayout (3)
    .SeriesCollection(1).XValues = "='Ville'!$a$2:$a$6"
    .SeriesCollection(1).Name = "=""NB de panneaux TH"""
    .SeriesCollection(1).Values = "='Ville'!$i$2:$i$6"
    .SeriesCollection.NewSeries
    .SeriesCollection(2).Name = "=""NB de panneau PV"""
    .SeriesCollection(2).Values = "='Ville'!$l$2:$l$6"
    .Axes(xlValue).HasTitle = True
    .Axes(xlValue).AxisTitle.Text = "Répartition des installations existantes"
    .Axes(xlCategory).HasTitle = True
    .Axes(xlCategory).AxisTitle.Text = "Localités"
    .Refresh
    End With
    
ElseIf .OptionButtonVille = True Then
        
    Sheets("Rue").Range("A1:c1").AutoFilter Field:=1, Criteria1:=.ComboVille.Value
    textstring = "rues de " & Selection.ComboVille.Value
        
    With ActiveChart
    .SetSourceData Source:=Sheets("Rue").Range("A1")
    .HasTitle = True
    .ChartTitle.Text = "Installation(s) solaire(s) de : " & Selection.ComboVille.Value
    .ApplyLayout (3)
    .SeriesCollection(1).XValues = "='Rue'!$b$2:$b$68"
    .SeriesCollection(1).Name = "=""NB de panneaux TH"""
    .SeriesCollection(1).Values = "='Rue'!$j$2:$j$61"
    .SeriesCollection.NewSeries
    .SeriesCollection(2).Name = "=""NB de panneau PV"""
    .SeriesCollection(2).Values = "='Rue'!$m$2:$m$61"
    .Axes(xlValue).HasTitle = True
    .Axes(xlValue).AxisTitle.Text = "Répartition des installations existantes"
    .Axes(xlCategory).HasTitle = True
    .Axes(xlCategory).AxisTitle.Text = textstring
    .PlotVisibleOnly = True
    .Refresh
    End With
    
ElseIf .OptionButtonTotal = True Then
    
    Sheets("Impression").ChartObjects("1").Visible = False
    
End If
End With

Sheets("Impression").Range("b2").Activate

End Sub
 
Dernière édition:

Enerjp

XLDnaute Junior
Re : changer la source d'un graphique selon des Optionbutton

J'ai trouvé deux méthodes:
Pour les graph alimentés par lignes, avec plage de données horizontale sur une ligne variable
(par exemple les camemberts)

ou par colonnes, plusieurs série contenu dans des colonnes

NB: il faux que les graphique soit crées. la source du graphique doit être une variable Range et le reste une variable String

en rappelant que ici les graphique son alimenté par choix de listbox

Code:
[B]Sub GraphFromage()

Dim nomserie, source As String

nomserie = "Répartition des améliorations possibles"
j = Sheets("Feuil1").Range("j1").Value   'Numéro de ligne
k = Sheets("Feuil1").Range("k1").Value   'Nom de la feuille

With Selection
    If .OptionButtonVille = True Then
        source = "='" & k & "'!$Al" & j & ":$Ar" & j
        
    ElseIf .OptionButtonRue = True Then
        source = "='" & k & "'!$AM" & j & ":$AS" & j
    
    ElseIf .OptionButtonTotal = True Then
        source = "='" & k & "'!$An" & j & ":$At" & j
    End If
End With

Sheets("Feuil2").ChartObjects("1").Activate
    With ActiveChart
        .SeriesCollection(1).Name = nomserie
        .SeriesCollection(1).Values = source
        .SeriesCollection(1).XValues = "='Feuil1'!$d$9:$j$9"
        .Refresh
    End With

End Sub
Sub GraphRepartitionSolaire()

Dim nom1, nom2, nom3, valeur1, valeur2, valeur3, pretitre, titre, Xnom, Ynom, Yvaleur As String
Dim source As Range
    
    With Sheets("Impression").ChartObjects("2")
        .Visible = True
        .Activate
    End With
    
    pretitre = "Installation(s) solaire(s) existante(s) "
    Xnom = ""
    nom1 = "Solaire thermique (m²)"
    nom2 = "Solaire photovoltaïque (kWp)"
    nom3 = "Surface encore disponible sur le toit (m²)"
    
    With Selection

Set source = Nothing

If .OptionButtonRue = True Then
        
    Sheets("Total").Range("A1:c1").AutoFilter Field:=1, Criteria1:=.ComboVille.Value
    Sheets("Total").Range("A1:c1").AutoFilter Field:=2, Criteria1:=.ComboRue.Value
    
Set source = Sheets("Total").Range("A1")
    titre = pretitre & "de " & StrConv(Selection.ComboRue.Value, vbProperCase) & " (" & StrConv(Selection.ComboVille.Value, vbUpperCase) & ")"
    Ynom = "Numéro(s) de Rue"
    Yvaleur = "='Total'!$c$2:$c$789"
    valeur1 = "='Total'!$m$2:$m$789"
    valeur2 = "='Total'!$x$2:$x$789"
  '  valeur3 = "='Total'!$u$2:$u$789"
    
ElseIf .OptionButtonVille = True And .ComboVille.Value = "Total général" Then
    
    Sheets("Ville").Rows("1:1").AutoFilter
    
Set source = Sheets("Ville").Range("A1")
    titre = pretitre & "pour l'ensemble de la commune"
    Ynom = "Localité(s)"
    Yvaleur = "='Ville'!$a$2:$a$9"
    valeur1 = "='Ville'!$k$2:$k$9"
    valeur2 = "='Ville'!$v$2:$v$9"
  '  valeur3 = "='Ville'!$s$2:$s$9"
    
ElseIf .OptionButtonVille = True Then
        
   Sheets("Rue").Range("A1:c1").AutoFilter Field:=1, Criteria1:=.ComboVille.Value
    
Set source = Sheets("Rue").Range("A1")
    titre = pretitre & "de " & StrConv(Selection.ComboVille.Value, vbUpperCase)
    Ynom = "Nom(s) de Rue(s)"
    Yvaleur = "='Rue'!$b$2:$b$67"
    valeur1 = "='Rue'!$l$2:$l$67"
    valeur2 = "='Rue'!$w$2:$w$67"
  '  valeur3 = "='Rue'!$t$2:$t$67"
        
ElseIf .OptionButtonTotal = True Then
    
    Sheets("Impression").ChartObjects("Graphique 4").Visible = False
    Exit Sub
End If

    With ActiveChart
    .PlotVisibleOnly = True
    .SetSourceData source:=source
    .HasTitle = True
    .ChartTitle.Text = titre
    .ApplyLayout (3)
    .SetElement (msoElementPrimaryCategoryGridLinesMajor)
    .SetElement (msoElementDataLabelOutSideEnd)
    .SeriesCollection(1).XValues = Yvaleur
    .SeriesCollection(1).Name = nom1
    .SeriesCollection(1).Values = valeur1
    .SeriesCollection.NewSeries
    .SeriesCollection(2).Name = nom2
    .SeriesCollection(2).Values = valeur2
    .Axes(xlValue).HasTitle = True
    .Axes(xlValue).AxisTitle.Text = Xnom
    .Axes(xlCategory).HasTitle = True
    .Axes(xlCategory).AxisTitle.Text = Ynom
    .Refresh
    End With
    

    

End With

End Sub[/B]
 

Discussions similaires

Réponses
1
Affichages
122
Réponses
0
Affichages
83