Automatisation traitement adaptation graphiques

Bonjour,
Je suis loin d’être un expert sur libreoffice, encore moins concernant les graphiques, et j’aurais donc besoin de conseils éclairés.

Tous les jours, je récupère en automatique des fichiers csv, dont je recopie manuellement les données dans mon propre tableau qui inclut mise en forme, et graphiques liés à ces données.
Je ne peux donc pas modifier la structure de ces données dans mon fichier puisque je veux pouvoir les incorporer par un simple copier/coller
(je n’ai trouvé aucun moyen d’automatiser ce copier/coller mais ce n’est pas l’objet de mon besoin exposé ici).

J’ai donc tous les jours, une nouvelle ligne dont je veux que mon graphique prenne aussi en compte les nouvelles données du jour.

Pour l’instant, je suis contraint de sélectionner chaque graphique (12 feuilles, soit 24 graphiques au total) pour en modifier manuellement la plage de données qui ressemble à
$Guadeloupe.$A$188:$A$300;$Guadeloupe.$K$1:$M$1;$Guadeloupe.$K$188:$M$300
300 étant la ligne à incrémenter dans ce cas, à la dernière cellule non vide des colonnes A et M.
Comment me conseillez-vous de procéder ? Macro ? Si oui, comment récupérer le numéro de cette fameuse ligne rajoutée ?
Sinon, peut-être existe-t-il une solution plus adaptée à besoin sans avoir besoin de macro ?
Merci d’avance pour tout conseil, qui ne nécessiterait pas par contre de refonte du format de mes données.

Bonjour chris972,

Avec une mise à jour quotidienne et une recherche sur 112 lignes j’imagine que vous faites un suivi sur un trimestre de vos valeurs.

Pour trouver la date la plus récente, que j’imagine se trouve en colonne A,
=MAX(GUADELOUPE.A:A),

pour trouver le début du trimestre,
=MAX(GUADELOUPE.A:A)-112

Avec la formule ci-dessous vous aurez la partie : $Guadeloupe.$A$188:$A$300
=CONCATENER(ADRESSE(EQUIV(MAX(GUADELOUPE.A:A)-112;GUADELOUPE.A:A;0);1;1;1;"GUADELOUPE");":";ADRESSE(EQUIV(MAX(GUADELOUPE.A:A);GUADELOUPE.A:A;0);1;1;1))

Avec la formule ci-dessous vous aurez la partie : $Guadeloupe.$K$188:$M$300
=CONCATENER(ADRESSE(EQUIV(MAX(GUADELOUPE.A:A)-112;GUADELOUPE.A:A;0);11;1;1;"GUADELOUPE");":";ADRESSE(EQUIV(MAX(GUADELOUPE.A:A);GUADELOUPE.A:A;0);13;1;1))

:wink:

Merci pour la tentative d’aide, mais soit je n’ai rien compris, soit je ne vois pas du tout comment ceci affecterait la plage de données de mes graphiques.

De plus, je n’ai pas dit que je voulais 112 lignes. Je veux toutes les lignes, jusqu’à la dernière, en partant de la 188 ème.
Mais ce n’est pas vraiment le sujet de mon interrogation.

Je vais formuler autrement :
J’ai un tableau de X lignes desquelles est produit un graphique.
Si j’ajoute des données sur la ligne X+1, comment faire en sorte que mon graphique en tienne compte, hormis en changeant manuellement la plage de données comme je le fais actuellement ?
Par macro sans aucun doute, mais y a t-il un mécanisme que j’ignorerais et qui soit prévu pour ce cas ?

En attendant, je me suis débrouillé avec une macro.
Mais s’il y avait plus simple et plus adapté, je reste curieux d’apprendre.

Bonjour

Pour la récupération de la dernière ligne utilisée, j’avais rédigé cette fiche sur notre wiki.

Il n’est hélas pas possible actuellement de fonder un graphique sur une plage nommée (ceci devrait être un apport de la future version 7.3 cf. le rapport correspondant).

Le “contournement” habituel est celui décrit au commentaire n°2 du rapport :

  • sélectionner une ligne vide supplémentaire (au-dessus et au-dessous) pour la plage de données du graphique,
  • et cocher l’option Outils▸Options ▸LibreOffice Calc▸Général▸Paramètres de saisie▸Étendre les références lors de l’insertion de nouvelles colonnes/lignes.

L’insertion d’une nouvelle ligne sous la dernière mettra alors automatiquement à jour le graphique comme prévu. Même effet si on insére une nouvelle ligne avant la première ligne de données.

Cordialement

Si je ne dis pas de bêtise, j’ai tenté ce genre de solution, mais, cela me donnait la première ligne vide, et non pas la dernière cellule non-vide d’une colonne.
De toutes les façons, je me suis débrouillé entre temps avec:

oCol = oFeuil.Columns.getByIndex(0)
oBlanks = oCol.queryEmptyCells()
oRg = oBlanks.getByIndex(0)
sLine = oRg.RangeAddress.StartRow

Si je ne m’abuse, ce genre de solution n’est pas directement compatible avec le fait que (désormais, puisque j’ai changé de méthode, je ne fais plus de copier/coller) j’ai lié mon tableau avec le fichier.csv importé.
Du coup, je n’insère plus de lire au sens propre.
De plus, j’avais essayé ce genre de solution et il me semblait que la ligne vide était prise en compte dans les données du graphique.

Bon, à l’heure actuelle, en passant par une macro, ça semble fonctionner, mais j’ai l’impression que j’ai un décalage dans des cellules liées aux cellules concernées par le lien au fichier externe.
Si ça se confirme, je reviendrai poster un autre message parce que ce n’est plus le même sujet.
Merci.