Selection données VBA
froosties
-
ccm81 Messages postés 11033 Statut Membre -
ccm81 Messages postés 11033 Statut Membre -
Bonjour,
Je bloque totalement sur un bout de code VBA (je suis novice) et un problème de syntaxe.
Mon problème étant la création d'un graphique (Y=f(X)) en sélectionnant au préalable X et Y dans 2 "bout" de colonnes.
On a 4 entiers fixé par l'utilisateur tel que :
[a,b] intervalle des lignes à sélectionner
C,D 2 nombres correspondant au numéro des colonnes.
Je veux définir la plage :
X = (.Cells(a,C):.Cells(b,C))
Y= (.Cells(a,D):.Cells(b,D))
Et tracer Y=X
Le code pour le graphe (vous l'aurez compris le Range me pose soucis) :
Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=Range(xxxxxx) , PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Graphe"
ActiveChart.HasLegend = True
Si quelqu'un à la syntaxe correcte je suis preneur!:)
Merci
Je bloque totalement sur un bout de code VBA (je suis novice) et un problème de syntaxe.
Mon problème étant la création d'un graphique (Y=f(X)) en sélectionnant au préalable X et Y dans 2 "bout" de colonnes.
On a 4 entiers fixé par l'utilisateur tel que :
[a,b] intervalle des lignes à sélectionner
C,D 2 nombres correspondant au numéro des colonnes.
Je veux définir la plage :
X = (.Cells(a,C):.Cells(b,C))
Y= (.Cells(a,D):.Cells(b,D))
Et tracer Y=X
Le code pour le graphe (vous l'aurez compris le Range me pose soucis) :
Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=Range(xxxxxx) , PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Graphe"
ActiveChart.HasLegend = True
Si quelqu'un à la syntaxe correcte je suis preneur!:)
Merci
4 réponses
-
Bonjour
un petit exemple qui définit les plages de données d'un graphique de type nuage de pointsPublic Sub OK()
Dim gr As Object
Dim plageX As String, plageY As String, a As Long, b As Long
a = 3
b = 10
plageX = "E" & a & ":" & "E" & b
plageY = "F" & a & ":" & "F" & b
Set gr = ActiveSheet.ChartObjects(1).Chart
With gr.SeriesCollection(1)
.XValues = Range(plageX)
.Values = Range(plageY)
End With
End Sub
Cdlmnt -
Ce n'est pas exactement la réponse que j'attendais, dans ton exemple les colonnes sont fixées (F et E). Dans mon cas ce sont des variables.
Mon code "test" :
Set A=Range(.Cells(borne1,colonne1),.Cells(borne2,colonne1):.Cells(borne1,colonne2),.Cells(borne2,colonne2))
Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=A, PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsNewSheet
ActiveChart.Move After:=Sheets(Sheets.Count)
ActiveChart.HasLegend = True
Mon A=Range ne marche toujours pas...
J'ai voulu contourner le probleme en copiant les 2 "bouts" de colonnes de ma plage de donnée sur une feuille afin de pouvoir les sélectionner ensemble(vu qu'elles seraient alors collées et à la ligne 1).
Cependant je n'arrive toujours pas a selectionner uniquement un "fragment" d'une colonne pour finaliser ce "bricolage".... -
les colonnes sont fixées (F et E). Dans mon cas ce sont des variables.
il suffit d'utiliser des variables pour les colonnes aussi, mais bon, le problème est peut être ailleursPublic Sub OK()
Dim gr As Object
Dim plageX As String, plageY As String, a As Long, b As Long, cox As String, coy As String
a = 3
b = 10
cox = "A"
coy = "B"
plageX = cox & a & ":" & cox & b
plageY = coy & a & ":" & coy & b
Set gr = ActiveSheet.ChartObjects(1).Chart
With gr.SeriesCollection(1)
.XValues = Range(plageX)
.Values = Range(plageY)
End With
End Sub
Cdlmnt -
Public Sub OK()
Dim gr As Object
Dim plageX As String, plageY As String, a As Long, b As Long, cox As Long, coy As Long
a = 3
b = 8
cox = 1
coy = 2
plageX = ActiveSheet.Range(Cells(a, cox), Cells(b, cox)).Address
plageY = ActiveSheet.Range(Cells(a, coy), Cells(b, coy)).Address
Set gr = ActiveSheet.ChartObjects(1).Chart
With gr.SeriesCollection(1)
.XValues = Range(plageX)
.Values = Range(plageY)
End With
End Sub
Cdlmnt