Bizarrerie VBA ?

Le
Daniel.C
Bonjour.
Dans le code suivant, je veux récupérer la valeur d'un point d'une
série de graphique pour la mettre en étiquette :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim pt As Point
If Intersect(Target, [D3:D7]) Is Nothing Then Exit Sub
With ActiveSheet.ChartObjects("Graphique
1").Chart.SeriesCollection(1)
For i = 1 To .Points.Count
If .Points(i).DataLabel.Text = "#N/A" Then
.Points(i).DataLabel.Text = ""
Else
Var = .Values
.Points(i).DataLabel.Text = Var(i)
End If
Next i
End With
End Sub

La macro fonctionne.
Par contre si je mets directement :
.Points(i).DataLabel.Text = .Values(i)
j'obtiens une erreur 451 :
"La rpocédure Property Let n'est pas définie et la procédure Get n'a
pas renvoyé d'objet".
Je suis obligé depasser par :
Var = .Values
.Points(i).DataLabel.Text = Var(i)
Merci de m'expliquer pourquoi.
Cordialement.
Daniel
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #20409031
Bonjour Daniel,

Tu n'utilises pas la bonne propriété...

Essaie comme ceci
.Points(i).DataLabel.Text = .XValues(i)

C'était en passant !



"Daniel.C"
Bonjour.
Dans le code suivant, je veux récupérer la valeur d'un point d'une
série de graphique pour la mettre en étiquette :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim pt As Point
If Intersect(Target, [D3:D7]) Is Nothing Then Exit Sub
With ActiveSheet.ChartObjects("Graphique
1").Chart.SeriesCollection(1)
For i = 1 To .Points.Count
If .Points(i).DataLabel.Text = "#N/A" Then
.Points(i).DataLabel.Text = ""
Else
Var = .Values
.Points(i).DataLabel.Text = Var(i)
End If
Next i
End With
End Sub

La macro fonctionne.
Par contre si je mets directement :
.Points(i).DataLabel.Text = .Values(i)
j'obtiens une erreur 451 :
"La rpocédure Property Let n'est pas définie et la procédure Get n'a
pas renvoyé d'objet".
Je suis obligé depasser par :
Var = .Values
.Points(i).DataLabel.Text = Var(i)
Merci de m'expliquer pourquoi.
Cordialement.
Daniel
Daniel.C
Le #20409151
Bonjour Denis,
"XValues" représente les valeurs d'abscisse. Ce sont les valeurs
d'ordonnées qui m'intéressent.
En notant :
Var = .Values
Je récupère bien un tableau avec ces valeurs, mais impossible
d'utiliser directement Var = .Values(i) pour ne prendre qu'une seule
valeur.
Daniel

Bonjour Daniel,

Tu n'utilises pas la bonne propriété...

Essaie comme ceci
.Points(i).DataLabel.Text = .XValues(i)

C'était en passant !



"Daniel.C" discussion :
Bonjour.
Dans le code suivant, je veux récupérer la valeur d'un point d'une
série de graphique pour la mettre en étiquette :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim pt As Point
If Intersect(Target, [D3:D7]) Is Nothing Then Exit Sub
With ActiveSheet.ChartObjects("Graphique
1").Chart.SeriesCollection(1)
For i = 1 To .Points.Count
If .Points(i).DataLabel.Text = "#N/A" Then
.Points(i).DataLabel.Text = ""
Else
Var = .Values
.Points(i).DataLabel.Text = Var(i)
End If
Next i
End With
End Sub

La macro fonctionne.
Par contre si je mets directement :
.Points(i).DataLabel.Text = .Values(i)
j'obtiens une erreur 451 :
"La rpocédure Property Let n'est pas définie et la procédure Get n'a
pas renvoyé d'objet".
Je suis obligé depasser par :
Var = .Values
.Points(i).DataLabel.Text = Var(i)
Merci de m'expliquer pourquoi.
Cordialement.
Daniel


michdenis
Le #20409671
Ceci fonctionne chez moi,

Dim X As SeriesCollection
Set X = ActiveSheet.ChartObjects("Graphique 2").Chart.SeriesCollection
t = X(1).Values(3)

Ou pour ton exemple :
.Points(i).DataLabel.Text = X(1).Values(i)


"Daniel.C" discussion :
Bonjour.
Dans le code suivant, je veux récupérer la valeur d'un point d'une
série de graphique pour la mettre en étiquette :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim pt As Point
If Intersect(Target, [D3:D7]) Is Nothing Then Exit Sub
With ActiveSheet.ChartObjects("Graphique
1").Chart.SeriesCollection(1)
For i = 1 To .Points.Count
If .Points(i).DataLabel.Text = "#N/A" Then
.Points(i).DataLabel.Text = ""
Else
Var = .Values
.Points(i).DataLabel.Text = Var(i)
End If
Next i
End With
End Sub

La macro fonctionne.
Par contre si je mets directement :
.Points(i).DataLabel.Text = .Values(i)
j'obtiens une erreur 451 :
"La rpocédure Property Let n'est pas définie et la procédure Get n'a
pas renvoyé d'objet".
Je suis obligé depasser par :
Var = .Values
.Points(i).DataLabel.Text = Var(i)
Merci de m'expliquer pourquoi.
Cordialement.
Daniel


Daniel.C
Le #20409861
Microclimat (XL2007) ?
Voici mon code remanié avec le tien :

Sub test()
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
Set X = ActiveSheet.ChartObjects("Graphique
1").Chart.SeriesCollection
For i = 1 To .Points.Count
.Points(i).DataLabel.Text = X(1).Values(i)
Next i
End With
End Sub

Le plantage se fait dès la première valeur de i (1).
Le fichier est à l'adresse :
http://www.cijoint.fr/cjlink.php?file=cj200910/cijzifntJv.xls
Daniel

Ceci fonctionne chez moi,

Dim X As SeriesCollection
Set X = ActiveSheet.ChartObjects("Graphique 2").Chart.SeriesCollection
t = X(1).Values(3)

Ou pour ton exemple :
.Points(i).DataLabel.Text = X(1).Values(i)


"Daniel.C" discussion :
Bonjour.
Dans le code suivant, je veux récupérer la valeur d'un point d'une
série de graphique pour la mettre en étiquette :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim pt As Point
If Intersect(Target, [D3:D7]) Is Nothing Then Exit Sub
With ActiveSheet.ChartObjects("Graphique
1").Chart.SeriesCollection(1)
For i = 1 To .Points.Count
If .Points(i).DataLabel.Text = "#N/A" Then
.Points(i).DataLabel.Text = ""
Else
Var = .Values
.Points(i).DataLabel.Text = Var(i)
End If
Next i
End With
End Sub

La macro fonctionne.
Par contre si je mets directement :
.Points(i).DataLabel.Text = .Values(i)
j'obtiens une erreur 451 :
"La rpocédure Property Let n'est pas définie et la procédure Get n'a
pas renvoyé d'objet".
Je suis obligé depasser par :
Var = .Values
.Points(i).DataLabel.Text = Var(i)
Merci de m'expliquer pourquoi.
Cordialement.
Daniel




michdenis
Le #20410291
http://cjoint.com/?kxtsDTiSpH



"Daniel.C" uMmVK1$
Microclimat (XL2007) ?
Voici mon code remanié avec le tien :

Sub test()
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
Set X = ActiveSheet.ChartObjects("Graphique
1").Chart.SeriesCollection
For i = 1 To .Points.Count
.Points(i).DataLabel.Text = X(1).Values(i)
Next i
End With
End Sub

Le plantage se fait dès la première valeur de i (1).
Le fichier est à l'adresse :
http://www.cijoint.fr/cjlink.php?file=cj200910/cijzifntJv.xls
Daniel

Ceci fonctionne chez moi,

Dim X As SeriesCollection
Set X = ActiveSheet.ChartObjects("Graphique 2").Chart.SeriesCollection
t = X(1).Values(3)

Ou pour ton exemple :
.Points(i).DataLabel.Text = X(1).Values(i)


"Daniel.C" discussion :
Bonjour.
Dans le code suivant, je veux récupérer la valeur d'un point d'une
série de graphique pour la mettre en étiquette :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim pt As Point
If Intersect(Target, [D3:D7]) Is Nothing Then Exit Sub
With ActiveSheet.ChartObjects("Graphique
1").Chart.SeriesCollection(1)
For i = 1 To .Points.Count
If .Points(i).DataLabel.Text = "#N/A" Then
.Points(i).DataLabel.Text = ""
Else
Var = .Values
.Points(i).DataLabel.Text = Var(i)
End If
Next i
End With
End Sub

La macro fonctionne.
Par contre si je mets directement :
.Points(i).DataLabel.Text = .Values(i)
j'obtiens une erreur 451 :
"La rpocédure Property Let n'est pas définie et la procédure Get n'a
pas renvoyé d'objet".
Je suis obligé depasser par :
Var = .Values
.Points(i).DataLabel.Text = Var(i)
Merci de m'expliquer pourquoi.
Cordialement.
Daniel




Daniel.C
Le #20410631
Ca marche, merci.
Daniel

http://cjoint.com/?kxtsDTiSpH



"Daniel.C" discussion : uMmVK1$
Microclimat (XL2007) ?
Voici mon code remanié avec le tien :

Sub test()
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
Set X = ActiveSheet.ChartObjects("Graphique
1").Chart.SeriesCollection
For i = 1 To .Points.Count
.Points(i).DataLabel.Text = X(1).Values(i)
Next i
End With
End Sub

Le plantage se fait dès la première valeur de i (1).
Le fichier est à l'adresse :
http://www.cijoint.fr/cjlink.php?file=cj200910/cijzifntJv.xls
Daniel

Ceci fonctionne chez moi,

Dim X As SeriesCollection
Set X = ActiveSheet.ChartObjects("Graphique 2").Chart.SeriesCollection
t = X(1).Values(3)

Ou pour ton exemple :
.Points(i).DataLabel.Text = X(1).Values(i)


"Daniel.C" discussion :
Bonjour.
Dans le code suivant, je veux récupérer la valeur d'un point d'une
série de graphique pour la mettre en étiquette :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim pt As Point
If Intersect(Target, [D3:D7]) Is Nothing Then Exit Sub
With ActiveSheet.ChartObjects("Graphique
1").Chart.SeriesCollection(1)
For i = 1 To .Points.Count
If .Points(i).DataLabel.Text = "#N/A" Then
.Points(i).DataLabel.Text = ""
Else
Var = .Values
.Points(i).DataLabel.Text = Var(i)
End If
Next i
End With
End Sub

La macro fonctionne.
Par contre si je mets directement :
.Points(i).DataLabel.Text = .Values(i)
j'obtiens une erreur 451 :
"La rpocédure Property Let n'est pas définie et la procédure Get n'a
pas renvoyé d'objet".
Je suis obligé depasser par :
Var = .Values
.Points(i).DataLabel.Text = Var(i)
Merci de m'expliquer pourquoi.
Cordialement.
Daniel






Publicité
Poster une réponse
Anonyme