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

Redimension de la source du graphique

2 réponses
Avatar
Alain
Bonjour,

Excel XP

Une fonction crée un graphique à ligne brisée (illustrant le prix des
actions) sur chacune des 4 pages d'un document Excel. Les données sont
dans les colonnes A et B.

Une autre fonction crée un graphique à colonnes (illustrant le volume
d'actions échangées, et nommé: grVolume) sur les 4 mêmes pages. Les
données sont dans les colonnes A et C.

Jusqu'ici, tout va bien.

À mesure que des données sont ajoutées, j'utilise une troisièm fonction
qui met à jour la source du premier graphique de chaque page. Encore
parfait.
Ensuite une quatrième fonction met à jour les données du graphique des
volumes de chaque page. MAIS impossible de mettre à jour ce graphique
sur la PREMIÈRE page; la source des données de ce graphique reste
toujours la série des données utilisée lors de la création du graphique.
Aucune erreur dans l'exécution de la fonction. La mise à jour s'effectue
sans problème sur les autres pages.

Pourquoi? Comment corriger cette situation?

Merci.

Alain

Voici la fonction. Le paramètre d'appel est transmis correctement.

Public Function RedefSourceVolume(NomPage As String) As Boolean
' redéfinit (redimensionne) la source de données du graphique volume

Dim gr As ChartObject
Dim MinVolume, MaxVolume As Double
Dim volRange As Range
Dim MySheet As Worksheet
Dim ok As Boolean
Dim Nb, i As Integer
Dim txt As String

On Error GoTo errFonction
ok = True
Set MySheet = Worksheets(NomPage)
MySheet.Activate
MySheet.Range("a1").Activate
'Pour éviter que le graphique reste activé
Nb = Application.WorksheetFunction.CountA(Range("a:a"))
Set gr = MySheet.ChartObjects("grVolume")
'définition des valeurs max et min de l'ordonnée
Set volRange = MySheet.Range("C2:C" & Nb)
MinVolume = Application.WorksheetFunction.Min(volRange)
MaxVolume = Application.WorksheetFunction.Max(volRange)
With gr.Chart.Axes(xlValue)
.MinimumScale = 0.9 * MinVolume
.MaximumScale = 1.1 * MaxVolume
End With 'With .Axes(xlValue)
'redéfinition des données source; Nb a la bonne valeur
'mais ça ne change pas la série du graphique de la page 1
Set volRange = MySheet.Range("A1:A" & Nb, "C1:C" & Nb)
gr.Activate
gr.Chart.ChartArea.Select
gr.Chart.SetSourceData Source:=volRange, PlotBy:=xlColumns
gr.Chart.Refresh

Sortie:
RedefSourceVolume = ok
Exit Function

errFonction:
MsgBox ("Erreur no: " & Err.Number & vbCrLf _
& Err.Description)
ok = False
GoTo Sortie

End Function 'RedefSourceVolume

2 réponses

Avatar
j
avec ce que tu dis, on ne peut pas t'aider, il doit y avoir une erreur
quelque part qui fait que la page 1 n'a pas exactement la même structure que
mla page 2
as-tu vérifié si après passage de la macro les données source du graphique
sont modifiées ou non (en x et en y) ?
si non, avant gr.Chart.SetSourceData Source:=volRange, PlotBy:=xlColumns,
essaie de voir si ta variable est bien définie en insérant
msgbox volrange.address
et pourquoi fais tu une fonction et pas un Sub ?
comment lances-tu cette macro ?

http://jacxl.free.fr


"Alain" a écrit dans le message de news:

Bonjour,

Excel XP

Une fonction crée un graphique à ligne brisée (illustrant le prix des
actions) sur chacune des 4 pages d'un document Excel. Les données sont
dans les colonnes A et B.

Une autre fonction crée un graphique à colonnes (illustrant le volume
d'actions échangées, et nommé: grVolume) sur les 4 mêmes pages. Les
données sont dans les colonnes A et C.

Jusqu'ici, tout va bien.

À mesure que des données sont ajoutées, j'utilise une troisièm fonction
qui met à jour la source du premier graphique de chaque page. Encore
parfait.
Ensuite une quatrième fonction met à jour les données du graphique des
volumes de chaque page. MAIS impossible de mettre à jour ce graphique
sur la PREMIÈRE page; la source des données de ce graphique reste
toujours la série des données utilisée lors de la création du graphique.
Aucune erreur dans l'exécution de la fonction. La mise à jour s'effectue
sans problème sur les autres pages.

Pourquoi? Comment corriger cette situation?

Merci.

Alain

Voici la fonction. Le paramètre d'appel est transmis correctement.

Public Function RedefSourceVolume(NomPage As String) As Boolean
' redéfinit (redimensionne) la source de données du graphique volume

Dim gr As ChartObject
Dim MinVolume, MaxVolume As Double
Dim volRange As Range
Dim MySheet As Worksheet
Dim ok As Boolean
Dim Nb, i As Integer
Dim txt As String

On Error GoTo errFonction
ok = True
Set MySheet = Worksheets(NomPage)
MySheet.Activate
MySheet.Range("a1").Activate
'Pour éviter que le graphique reste activé
Nb = Application.WorksheetFunction.CountA(Range("a:a"))
Set gr = MySheet.ChartObjects("grVolume")
'définition des valeurs max et min de l'ordonnée
Set volRange = MySheet.Range("C2:C" & Nb)
MinVolume = Application.WorksheetFunction.Min(volRange)
MaxVolume = Application.WorksheetFunction.Max(volRange)
With gr.Chart.Axes(xlValue)
.MinimumScale = 0.9 * MinVolume
.MaximumScale = 1.1 * MaxVolume
End With 'With .Axes(xlValue)
'redéfinition des données source; Nb a la bonne valeur
'mais ça ne change pas la série du graphique de la page 1
Set volRange = MySheet.Range("A1:A" & Nb, "C1:C" & Nb)
gr.Activate
gr.Chart.ChartArea.Select
gr.Chart.SetSourceData Source:=volRange, PlotBy:=xlColumns
gr.Chart.Refresh

Sortie:
RedefSourceVolume = ok
Exit Function

errFonction:
MsgBox ("Erreur no: " & Err.Number & vbCrLf _
& Err.Description)
ok = False
GoTo Sortie

End Function 'RedefSourceVolume



Avatar
Alain
Bonjour

Tu dis: «il doit y avoir une erreur quelque part»
Il y a en tout cas un problème évident.

Tu ajoutes:
«as-tu vérifié si après passage de la macro les données source du
graphique sont modifiées ou non (en x et en y) ?»

J'ai vérifié (avec des MsgBox par exemple), et les fonctions reçoivent
les paramètres corrects à chaque appel (ex: gr.Chart.SetSourceData
Source:=volRange, PlotBy:=xlColumns) mais, dans la première page,
l'appel est sans effet: les séries ne sont pas modifiées, alors qu'elles
le sont sur les autres pages.

«pourquoi fais tu une fonction et pas un Sub ?»
La fonction retourne une valeur booléenne qui indique à la fonction
appelante si elle a réussi ou s'il y a eu erreur. Et dans le cas de la
page 1, il n'y a ni erreur ...ni réussite! Puisque la source du
graphique n'est pas modifiée.

«comment lances-tu cette macro ?»
Les 4 fonctions sont appelées depuis une application Delphi par OLE.
Tout fonctionne, sauf une fonction sur la page 1!

Il doit y avoir un problème!!!!

Merci de ta réponse.

Alain

a écrit:
avec ce que tu dis, on ne peut pas t'aider, il doit y avoir une erreur
quelque part qui fait que la page 1 n'a pas exactement la même structure que
mla page 2
as-tu vérifié si après passage de la macro les données source du graphique
sont modifiées ou non (en x et en y) ?
si non, avant gr.Chart.SetSourceData Source:=volRange, PlotBy:=xlColumns,
essaie de voir si ta variable est bien définie en insérant
msgbox volrange.address
et pourquoi fais tu une fonction et pas un Sub ?
comment lances-tu cette macro ?

http://jacxl.free.fr


"Alain" a écrit dans le message de news:


Bonjour,

Excel XP

Une fonction crée un graphique à ligne brisée (illustrant le prix des
actions) sur chacune des 4 pages d'un document Excel. Les données sont
dans les colonnes A et B.

Une autre fonction crée un graphique à colonnes (illustrant le volume
d'actions échangées, et nommé: grVolume) sur les 4 mêmes pages. Les
données sont dans les colonnes A et C.

Jusqu'ici, tout va bien.

À mesure que des données sont ajoutées, j'utilise une troisièm fonction
qui met à jour la source du premier graphique de chaque page. Encore
parfait.
Ensuite une quatrième fonction met à jour les données du graphique des
volumes de chaque page. MAIS impossible de mettre à jour ce graphique
sur la PREMIÈRE page; la source des données de ce graphique reste
toujours la série des données utilisée lors de la création du graphique.
Aucune erreur dans l'exécution de la fonction. La mise à jour s'effectue
sans problème sur les autres pages.

Pourquoi? Comment corriger cette situation?

Merci.

Alain

Voici la fonction. Le paramètre d'appel est transmis correctement.

Public Function RedefSourceVolume(NomPage As String) As Boolean
' redéfinit (redimensionne) la source de données du graphique volume

Dim gr As ChartObject
Dim MinVolume, MaxVolume As Double
Dim volRange As Range
Dim MySheet As Worksheet
Dim ok As Boolean
Dim Nb, i As Integer
Dim txt As String

On Error GoTo errFonction
ok = True
Set MySheet = Worksheets(NomPage)
MySheet.Activate
MySheet.Range("a1").Activate
'Pour éviter que le graphique reste activé
Nb = Application.WorksheetFunction.CountA(Range("a:a"))
Set gr = MySheet.ChartObjects("grVolume")
'définition des valeurs max et min de l'ordonnée
Set volRange = MySheet.Range("C2:C" & Nb)
MinVolume = Application.WorksheetFunction.Min(volRange)
MaxVolume = Application.WorksheetFunction.Max(volRange)
With gr.Chart.Axes(xlValue)
.MinimumScale = 0.9 * MinVolume
.MaximumScale = 1.1 * MaxVolume
End With 'With .Axes(xlValue)
'redéfinition des données source; Nb a la bonne valeur
'mais ça ne change pas la série du graphique de la page 1
Set volRange = MySheet.Range("A1:A" & Nb, "C1:C" & Nb)
gr.Activate
gr.Chart.ChartArea.Select
gr.Chart.SetSourceData Source:=volRange, PlotBy:=xlColumns
gr.Chart.Refresh

Sortie:
RedefSourceVolume = ok
Exit Function

errFonction:
MsgBox ("Erreur no: " & Err.Number & vbCrLf _
& Err.Description)
ok = False
GoTo Sortie

End Function 'RedefSourceVolume