Selection données VBA

Fermé
froosties - 5 janv. 2017 à 14:34
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 - 6 janv. 2017 à 17:28
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

4 réponses

ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 430
Modifié par ccm81 le 5/01/2017 à 15:57
Bonjour

un petit exemple qui définit les plages de données d'un graphique de type nuage de points
Public 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
0
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"....
0
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 430
5 janv. 2017 à 18:35
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 ailleurs
Public 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
0
Le problème étant la retranscription des données. Comment dire à excel/VBA que 2 = colonne B, 3 = colonne C etc...?
Car dans l'exemple que tu cites, cox et coy sont directement des lettres, or j'ai ces même données sous forme de chiffre.

cordialement
0
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 430
6 janv. 2017 à 17:28
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
0