Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Bizarrerie VBA ?

6 réponses
Avatar
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

6 réponses

Avatar
michdenis
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" a écrit dans le message de groupe de 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
Avatar
Daniel.C
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" a écrit dans le message de groupe de
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


Avatar
michdenis
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" a écrit dans le message de groupe de
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


Avatar
Daniel.C
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" a écrit dans le message de groupe de
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




Avatar
michdenis
http://cjoint.com/?kxtsDTiSpH



"Daniel.C" a écrit dans le message de groupe de 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" a écrit dans le message de groupe de
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




Avatar
Daniel.C
Ca marche, merci.
Daniel

http://cjoint.com/?kxtsDTiSpH



"Daniel.C" a écrit dans le message de groupe de
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" a écrit dans le message de groupe de
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