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
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 !
(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 ?
J’ai pris le temps de faire un exemple simple :
Nota : il semble qu’il y ait un bug dans cette version de LibreOffice car, hors macro :
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 ! … 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! … merci … mais fais en fonction de ton temps ! ce petit problème n’a rien d’urgent ni d’important !
Philippe
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
après la mise à jour des charts ce qu’il y a en data continue correct avec ses 4 éléments!
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
Et si !
voir 3 messages au-dessus, avec image en prime !
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 ! les faits ont la tête dure !
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).
ne nous emballons pas !
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 !
pour l’histoire de copie, c’est compliqué ! j’ai écrit un paquet dessus et je viens de tout effacer !!
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