mise à jour automatique de graphiques

Discussions à propos du tableur Calc.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
gabresmal
Fraîchement OOthentifié
Messages : 3
Inscription : 01 mars 2006 09:46
Localisation : AYE - BELGIQUE

mise à jour automatique de graphiques

Message par gabresmal »

Bonjour,

En date du 06/03/2006, je vous faisais part d'un besoin.
J'ai bien eu des information, mais pas de solution.
Je re-tente une nouvelle demande Les informations complémentaires sont en italique.
Merci d'avance à tout qui pourra m'aider

Sur base d'un fichier OOO Calc constitué de cours de bourse ( > 100
titres suivis) je souhaite établir des graphiques d'évolution des cours
des-dits titres. Le mode de détermination de la plage de données servant
à établir le graphe est fixe - ex.: a1;a50 -
Vu l'ajout régulier de cours, le graphe ne se met pas automatiquement à
jour. Imaginez le boulot pour modifier les plages des > 100 titres
suivis.
Aux temps héroïques de LOTUS-1-2-3 sous DOS, il existait une "fonction"
très simple pour déterminer une plage "mobile". Dans l'exemple
ci-dessus, il suffisait d'écrire : a1;{end}{down} et le programme
reconnaissait la plage entière - suite ininterrompue - .
Aujourd'hui, je pédale dans la choucroute. J'ai bien lu dans le livre
EXCEL 2002 FORMULAS de John WALKENBACH une solution utilisant les
mots-clés OFFSET, COUNTA et SERIES.
Ces termes ont-ils un correspondant en OOo et quelle est leur
équivalence francisée?


Merci d'avance
Georges-Albert BRESMAL



OOo 2.0 sous LINUX Kubuntu/Win XP SP2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25175
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: mise à jour automatique de graphiques

Message par Dude »

gabresmal a écrit :J'ai bien lu dans le livre EXCEL 2002 FORMULAS de John WALKENBACH une solution utilisant les mots-clés OFFSET, COUNTA et SERIES.
OFFSET = DECALER
COUNTA = NBVAL

Je n'ai pas de fonction SERIES ni sous Calc, ni sous MS-Excel 2000. Peux-tu nous donner un descriptif de ce que fait celle-ci ?
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Bonjour

L'adaptation de la source de données d'un graphique peut être faite par une macro. Le code suivant peut paraître un peu complexe si on n'est pas initié aux macros, toutefois, il suffit de modifier dans ce code les valeurs des constantes situées au début.

Dans cet exemple je suppose que le graphique à modifier à été nommé (clic droit sur le graphique puis "nommer l'objet") "cours". Ceci est indispensable pour pouvoir "retrouver" le graphique dans la macro.

Ne connaissant rien aux cours de la bourse je ne "visualise" pas comment sont présentées les données. Je suppose aussi dans l'exemple que la source de données du graphique est A1:F

Nota :
- Ces références sont paramétrées par les constantes PysDebCol=0, PysDebLig=0, PysFinCol=5
- le numéro de ligne de fin est calculé par la macro

Le principe de la macro est le suivant :
- "aller" à la fin de la plage utilisée
- récupérer le numéro de ligne
- retrouver le graphique par son nom
- modifier le titre du graphique pour ajouter la date et l'heure
- modifier la plage source de données

Code : Tout sélectionner

sub PysModifierGrapheCours
'Adapter le nom de la feuille, du graphe, du bloc source de données du graphe
const PysNomFeuille="Test", PysNomGraphe="cours", PysDebCol=0, PysDebLig=0, PysFinCol=5

dim PysClasseur as Object, PysFeuille as Object, PysGraph as Object, PysPlage as Object,  PysRef
dim PysCellCursor as object, PysCellRangeAddress as object
Dim PysData(0) as new com.sun.star.table.CellRangeAddress
dim PysNomObjet as string
dim PysColFin as integer, PysLigFin as integer

PysClasseur = thisComponent
PysFeuille = PysClasseur.sheets.getByName(PysNomFeuille)

PysCellCursor = PysFeuille.createCursor()
PysCellCursor.gotoEndOfUsedArea(False)

'Ci-dessous mis en commentaire car non utilisé ici, juste pour l'exemple
'PysColFin=PysCellCursor.getRangeAddress().EndColumn
PysLigFin=PysCellCursor.getRangeAddress().EndRow

PysPlage=PysFeuille.getCellRangeByPosition(PysDebCol, PysDebLig, PysFinCol, PysLigFin)
PysRef=PysPlage.RangeAddress

PysGraph=PysFeuille.DrawPage(PysNomGraphe)
PysNomObjet = PysGraph.PersistName

PysGraph=PysFeuille.Charts.getByName(PysNomObjet)
PysGraph.embeddedObject.Title.String="Graphe du " & now

PysData(0)=PysRef 
PysGraph.setranges(PysData())

end sub