Writer : changer plage de graphique par macro

Désolé, pas le temps de déboguer ton programme mais si tu réduis la plage de données tu dois sans doute supprimer les datasequences “en trop” par exemple :
oDiag.DataSequences(3).dispose

Nota : commencer par la fin bien entendu

pas de souci ! je ne suis pas pressé !

merci pour le tuyau … je teste !

bon travail,
Philippe

j’ai essayé … propriété ou méthode dispose n’existe pas
j’ai vu avec MRI que release existe … mais ça me donne le même message

j’ai essayé erase oDiag.DataSequences(3) … il ne réclame pas … mais après mise à jour il y a toujours 7 séquences !

ceci étant je ne pense pas que cela puisse être le chemin ! … redim doit suffire ! (les objects en trop sont sans doute disposés du reste ou sinon cela n’influence pas sur la taille de l’array dataSequences.

ne devrait-on pas monter un nouveau dataSequences complet et remplacer l’ancien par le nouveau ?

je vais essayer plus tard !

bien à vous … ne vous croyez pas obligé d’interrompre vos activités pour me répondre … je répète, je ne suis pas pressé ! et j’ai déjà beaucoup abusé !
Philippe

vérifie (double clic sur le graphique) que la plage est bonne (Donnees.A1:G5) puis fait cet appel à mri :

sub ModifSourceDiagramme(colonnes, derniereLigne as integer)

dim o, oExt, document, oDiag, oDataProvider, oDataSequences
dim dimDataSequences as integer, numColonne as integer, nc1 as integer, col as string

dim uColonnes as integer : uColonnes = ubound(colonnes)

	' récupère le diagramme (unique dans le document)
	document = ThisComponent.CurrentController.Frame
	o = document.controller.model.embeddedObjects.getByIndex(0)
	oExt = o.ExtendedControlOverEmbeddedObject
	oDiag = oExt.component	

	oDataProvider = oDiag.getDataProvider()
	oDatasequences = oDiag.DataSequences
	
	mri oDiag.DataSequences(6)

Non car c’est “ta” variable que tu redimensionnes

	oDatasequences = oDiag.DataSequences

pas la propriété de l’objet diagramme oDiag.DataSequences

j’ai déjà fait … et j’ai aussi regardé le contenu qui semble tout à fait convenable !

donc mon idée de recréer DataSequences et de remplacer l’ancienne version semble raisonnable … je vais m’y atteler un peu plus tard !

avec ce commentaire je ne peux savoir si tu as trouvé la méthode dispose ou non… Tu dois obtenir

(padron pour l’envoi antérieur!)

pas de dispose chez moi ! comment est-ce possible … le reste est pourtant égal !

j’en profite … si c’est une copie de dataSequences, comment les modifs que je fais dans la copie peuvent être prises en compte dans l’original ?

2022-05-10 13_54_45-MRI.png

J’ai pris le temps de faire un exemple simple :

  • ouvrir le doc joint
  • vérifier la plage de données (devrait être Tableau2.A1:D5), sortir du mode édition de graphique
  • sélectionner le graphique
  • cliquer sur le bouton A1:C3

Nota : il semble qu’il y ait un bug dans cette version de LibreOffice car, hors macro :

  • créer le diagramme fondé sur Tableau2.A1:D5
  • enregistrer le doc
  • recharger le doc
  • vérifier la plage de données du graphique qui est devenue erronée Tableau2.A2:A5;Tableau2.B1:D5

Ceci dit, en revanche la macro de “réduction” fonctionne correctement en partant de références correctes

RéduireDiagramme.odt (21,9 Ko)

bug … je t’ai parlé de bug il y a quelques jours, c’était celui que tu décris, j’ai ouvert un bug qui a été confirmé.
malgré ce bug tu peux cliquer sur OK que la fenêtre se ferme normalement et le graphique est présenté correctement également. l’erreur vient du montage de la plage à partir du contenu … il se mélange complètement …

depuis j’ai trouvé 2 autres bugs ! :slightly_smiling_face: … en edition du graphique, si tu passes la souris sur les barres la valeur est souvent à 0 alors que la hauteur de la barre est correctte. l’autre, qui n’est quand même peut-être pas un bug mais est différent de Calc, c’est que les minuscules ne sont pas acceptées dans la description de la plage ( Tableau.A1:c3 est rejeté à cause du “c”)

je suis impatient de regarder ton exemple! :slightly_smiling_face: … merci … mais fais en fonction de ton temps ! ce petit problème n’a rien d’urgent ni d’important !

Philippe

tu ne vas pas être surpris !

toujours pas de dispose ici ! :slightly_frowning_face:

ceci étant … j’ai déroulé ma fonction avec le Redim pour avoir A1:C3, à partir de A1:G5

si à la fin de la fonction on regarde dans oDiag on a

  • une propriété usedData qui a encore 7 dataSequences
  • une propriété data qui a bien 4 data
    apparemment les données pour les descriptions d’entête sont correctes

image.pngimage.png

après la mise à jour des charts ce qu’il y a en data continue correct avec ses 4 éléments!

image.png

ma version
Version: 7.3.2.2 (x64) / LibreOffice Community
Build ID: 49f2b1bff42cfccbd8f788c8dc32c1c309559be0
CPU threads: 2; OS: Windows 6.1 Service Pack 1 Build 7601; UI render: Skia/Raster; VCL: win
Locale: fr-FR (pt_BR); UI: pt-BR
Calc: threaded

test avec un notebook w10 a montré la même occurence … pas de dispose. mais c’est la même version de L.O. alors ce n’est pas très conclusif !

Tu ne dis pas si tu as essayé RéduireDiagramme.odt (21,9 Ko)
en suivant

  • ouvrir le doc joint
  • vérifier la plage de données (devrait être Tableau2.A1:D5), sortir du mode édition de graphique
  • sélectionner le graphique
  • cliquer sur le bouton A1:C3

Et si ! :slight_smile:

voir 3 messages au-dessus, avec image en prime ! :slight_smile:

mais j’ai eu le même problème … propriété ou méthode pas rencontré: dispose

mais je ne suis toujours pas sûr que cela soit nécessaire !

dans le dernier message je montre que le redim fonctionne bien.
aprés avoir réduit à 4 séquences avec le redim et fait la mise à jour des graphiques. si l’on revient au diagramme et regarde ce qu’il contient, il n’y a bien que 4 colonnes dans “Data”. mais si l’on passe par oDiag.dataSequences on a vu qu’il retourne encore 7 séquences ! Notez que (voir image au-dessus) dans “usedData” il y a encore 7 séquences !

il faut sans doute mettre à jour “autre chose” pour qu’il passe à fonctionner avec 4 séquences à peine !

tu as donc abandonné l’idée que oDataSequences contient une copie ! :slight_smile: les faits ont la tête dure ! :slight_smile:

Bien à vous, merci encore,
Philippe

Justement ce n’est pas mon programme

ok dernière tentative (après tout chez moi tout fonctionne comme je l’indique).

  • tu crées oDatasequences = oDiag.DataSequences : oDatasequences n’est pas Diag.DataSequences, c’est une variable dont le contenu est identique
  • tu redimensionnes oDatasequences uniquement et tu indiques toi-même que

ne nous emballons pas !

  1. je viens de vérifier, et l’image que j’ai passée est bien avec en fond le code de ReduireDiagramme.odt … il n’y a pourtant pas de raison que dispose existe dans ton code et pas dans le mien !
    2022-05-11 06_37_21-RéduireDiagramme.odt.Standard - LibreOffice Basic

  2. pour l’histoire de copie, c’est compliqué ! j’ai écrit un paquet dessus et je viens de tout effacer !! :frowning:

OUF ! j’ai compris !!!

après vérifications !!

non ce n’est pas une copie ! enfin … pas exactement !

oDiag.dataSequences retourne un tableau qui n’est pas dataSequences original
mais les pointeurs (donc les objects) qui sont dans la copie sont les originaux !

c’est pour cela que votre premier exemple fonctionnait, et pour ça aussi que mon bouton A1:G4 fonctionne !

dans nos macros nous alterons bien les contenus des objets (j’ai vérifié juste après modification que dans l’objet oDiag dans DataSequences les changements que je fais dans ma “copie” y sont présents).

mais quand on change le tableau par redim de la copie, cela n’affecte pas le tableau de l’original dans oDiag !!!

c’est pour ça que le dispose paraît fonctionner sans doute ! … car c’est l’objet original qui est éliminé ! mais ce n’est surement pas le bon chemin car l’intégrité du graphique est violée !

il faut trouver la méthode ou service qui permette de redimensionner l’array original en garantissant l’intégrité de l’ensemble … et là, je ne sais pas quel est le chemin !

excuse de la longueur de mon message !!!
à plus !
Philippe

Content de vous apporter la solution !

Merci à tou.te.s et tout spécialement à PYS pour m’avoir mis sur la voie et à KamilLanda (AskLibreOffice version anglaise) pour avoir apporté la solution … que voici :

ModifSourceDiagrammeSolution.odt (23.8 KB)

Merci et à bientôt,
Philippe

Solution !

ModifSourceDiagrammeSolution.odt (23.8 KB)

encore merci
Philippe