[Catégorie modifiée VB6 --> VBA] Copier valeur d'une étiquette données dans cell

Signaler
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
-
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018
-
Bonjour à tous,

Depuis un graphique (Excel2003), je cherche à construire une macro pour récupérer les valeurs dans l'étiquette de données d'une courbe de tendance, et les coller dans une cellule de ma feuille (pour pouvoir les exploiter par macro ensuite).

J'ai essayé par l'éditeur de macro et cherché sur Forums, mais hélas sans résultat...
Sub Macro1()

    ActiveSheet.ChartObjects("Graphique 11").Activate
    ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Select
    ActiveWindow.Visible = False
    Windows("ISO 14520.xls").Activate
    Range("P31").Select
    
    'C'est ici que ça plante !
    '*************************
    ActiveSheet.Paste
    
End Sub

Quelqu'un aurait-il une idée ?

Merci d'avance !


Rataxes64

5 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut
Si ça plante, dis nous quelle erreur.
Si tu utilises Paste, il faut d'abord avoir fait un Copy, par exemple avec un Selection.Copy (à tester)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018

Salut Jack,
Tout à fait d'accord...
Mais un Selection.Copy sur ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Select, ça ne le fait pas...!
Je cherche avec ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.TEXT, mais je galère...
Surtout que pour tout changement de valeur, il faut "effacer" la courbe de tendance, la "rappeler" et retraiter graphiquement l'étiquette!

Si quelqu'un pouvait me donner une piste pour un script (en VBA) qui pourrait extraire directement les facteurs n et R², dès la modification d'un point, ce serait super!
Ce sont uniquement ces valeur qui m'intéressent, et je fais un graphique uniquement pour les récupérer : une grosse perte de temps, mais on fait avec ses moyens...

Merci de la réponse



Rataxes64
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018

Oups!
Merci d'avoir basulé en VBA, j'avais pas fait gaffe...

pour mon problème, j'ai fait ça: C'est pas beau mais ça marche.
Je reste preneur pour toute idée qui pourrait éviter de passer par le graphique
Sub Macro1()
Application.DisplayAlerts = False
Dim Data1 As String, Data2 As String

ActiveSheet.ChartObjects("Graphique 11").Activate
ActiveChart.SeriesCollection(1).Trendlines(1).Select
Selection.Delete
ActiveChart.SeriesCollection(1).Select
ActiveChart.SeriesCollection(1).Trendlines.Add(Type:=xlPower, Forward:=0, _
    Backward:=0, _
    DisplayEquation:=True, _
    DisplayRSquared:=True).Select
Data1 = ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text
Sheets("Data").Range("W31").Value = Data1
Range("W31").Select
With Selection
    .HorizontalAlignment = xlGeneral
    .VerticalAlignment = xlBottom
    .WrapText = False
    .Orientation = 0
    .AddIndent = False
    .IndentLevel = 0
    .ShrinkToFit = False
    .ReadingOrder = xlContext
    .MergeCells = False
End With
Selection.TextToColumns _
    Destination:=Range("X31"), _
    DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, _
    Tab:=False, _
    Semicolon:=False, _
    Comma:=False, _
    Space:=False, _
    Other:=True, _
    OtherChar:="x", _
    FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
    TrailingMinusNumbers:=True
Range("Y31").Select
Selection.Copy
Range("P31").Select
Selection.PasteSpecial _
    Paste:=xlPasteValues, _
    Operation:=xlNone, _
    SkipBlanks:=False, _
    Transpose:=False
Application.CutCopyMode = False
ActiveSheet.ChartObjects("Graphique 11").Activate
    ActiveChart.ChartArea.Select
    ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Select
    Selection.Delete


Merci
Rataxes64
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Tu veux récupérer l'équation de la courbe de tendance.
J'ai fait l'essai avec ce code ressemblant au tien (*) et ça fonctionne correctement.
(*) enregistrement macro
    ActiveSheet.ChartObjects("Graphique 1").Activate
    ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Select
    ActiveWindow.Visible = False
    Windows("Classeur1").Activate
    Range("D7").Select
    ActiveSheet.Paste

Bizare
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018

Non Jack, je veux seulement récupérer les facteurs n et R² de l'équation...
Pourtant, c'est exact, le code qui remonte de "l'enregistrement macro" semble correct, mais fais l'expérience suivante :
Après avoir lancé ton code et que le "Paste" ait fonctionné, refait un copié-collé de n'importe quelle cellule pour ré-initialiser le Clipboard, puis relance la macro...

Et là surprise... "Paste" plante (en fait le Clipborard est vide et il n'y a donc plus rien à "Paster"!)

La seule solution (que j'ai trouvée), c'est de passer par un appel TEXT :
Dim Data as String
Data = ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text
Sheets("Data").Range("W31").Value = Data


Autre problème:
Si une des valeurs de la courbe est modifiée, la nouvelle courbe de tendance ne se recalcule PAS (je ne sais pas pourquoi)...
Pour m'en sortir, je rajoute en tête du script les instructions pour d'abord l'effacer (ainsi que l'étiquette) puis ensuite la reconstruire et régénérer la "nouvelle" étiquette pour en reprendre les nouvelles valeurs n et R².

C'est lourd, mais je n'ai pas trouvé mieux!

Evidemment la "bonne" solution serait de calculer DIRECTEMENT la courbe de tendance et extraire les facteurs n et R², mais je ne connais pas la série d'équations nécessaires pour y parvenir, ni comment les "monter" dans le script d'une macro...
Ah, si un "matheux" pouvaint passer par là... J'essaie sur des forums de math, mais actuellement je reste sans réponse.
Bien sûr si j'ai, je posterai.

Merci en tout cas de m'avoir répondu.

Rataxes64