Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Array

S

Serge

Guest
Bonjour tout le monde,

J'utilise cette macro pour «passer» des valeurs
à un nuage de points en utilisant Array.

Sub Passer()
With ActiveChart.SeriesCollection(1)
.XValues = Array(1, 2, 3, 4, 5)
.Values = Array(1, 4, 9, 16, 25)
End With
End Sub

Mais si je veux «passer» des milliers de points,
comment faire pour définir mon Array ?

Tentative :

Sub Passer()
Dim X() As Double
Dim Y() As Double
For vx = -1 To 1 Step 0.1
i = i + 1
X(i) = vx
Y(i) = vx ^ 2
Next vx
With ActiveChart.SeriesCollection(1)
.XValues = X ' ???????
.Values = Y ' ???????
End With
End Sub


Merci bien,

Serge
 
Z

ZON

Guest
Salut Serge et le forum,

Comme ceci ça devrait être mieux,

Sub Passer()
Dim X() As Double
Dim Y() As Double,i as long,vx as double
redim X(i),Y(i) 'on déclare les 2 tableaux à 1 dimension
For vx = -1 To 1 Step 0.1
X(i) = vx
Y(i) = vx ^ 2
i = i + 1
redim preserve x(i),y(i)' on redimensionne sans effacer les valeurs
Next vx
With ActiveChart.SeriesCollection(1)
.XValues = X ' ???????
.Values = Y ' ???????
End With
End Sub

Rappel, les tableaux VBA ont comme indice de base 0, pour commencer à 1 on mets option base 1 en haut du module .

On pourrait trés bien déclarer dans le cas présent tes tableaux comme suit redim X(0 to 20) ou encore X(20), X(1 to 21) ,si l'option base 1 est mis X(21) car ta boucle donne 21 valeurs=> pas besoin du redim preserve dans ces cas.

A+++
 
S

Serge

Guest
Bonjour ZON,

Merci bien pour tes éclaircissements, ça fonctionne
impec mais le nombre de valeurs que je peux passer
à Xvalues et Values semble très restreint !
Bizarre, non ?
Voici la macro qui construit le graphique :

Sub ConstruireGraphiqueParTableauxVBA()
Dim X() As Double
Dim Y() As Double, i As Long, vx As Double
ReDim X(i), Y(i)
Application.ScreenUpdating = False
ici = ActiveSheet.Name
For vx = 1 To 80
'******************
'Pour cet exemple,
'plus grand que 80 ???
'******************
X(i) = vx
Y(i) = vx
i = i + 1
ReDim Preserve X(i), Y(i)
Next vx
Charts.Add
With ActiveChart
.ChartType = xlXYScatter
.Location Where:=xlLocationAsObject, Name:=ici
End With
Set ns = ActiveChart.SeriesCollection.NewSeries
With ns
.XValues = X
.Values = Y
End With
Application.ScreenUpdating = True
End Sub

Serge
 

Discussions similaires

Réponses
0
Affichages
271
Réponses
1
Affichages
327
Réponses
29
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…