• Initiateur de la discussion Initiateur de la discussion Serge
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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+++
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
704
Réponses
7
Affichages
361
Réponses
0
Affichages
597
Réponses
5
Affichages
477
Réponses
1
Affichages
607
  • Question Question
Réponses
7
Affichages
371
  • Question Question
Microsoft 365 affichage userform
Réponses
4
Affichages
418
Réponses
4
Affichages
580
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Retour