BASIC récupérer un objet par son nom

Bonjour,

J’ai des graphiques (charts) sur les feuilles d’un document.

Je sais les récupérer par quelque chose comme ça et en manipuler les
caractéristiques :

oGraph = oDoc.Sheets(0).Charts.getByName("Object 1").EmbeddedObject

Les graphes sont créés directement dans Calc.

Mon problèmes est que le nom "Object n" est alloué au fur et à mesure de
la création des graphes.

Si je les nomme (clic sur le graphe puis clic-droit -> Nom), je les vois
bien dans le navigateur et je peux les sélectionner depuis-là.

En revanche, getByName avec le nom donné ne fonctionne pas, il faut
toujours donner le nom générique.

Y a-t-il une méthode pour ça ?

Jean-Luc

Bonjour

Nommer les diagrammes dans l'interface permet en effet d'accéder au
graphique en passant par une étape intermédiaire.

En quelque sorte, nommer le diagramme se fait dans la couche "dessin" de la
feuille.
On commence donc par rechercher dans cette "couche" l'objet portant le nom
"utilisateur" (par opposition au nom "interne" donné par LibO lors de la
création du diagramme).
Une fois qu'on a l'objet, on obtient le nom "interne" correspondant par
lequel on peut, via la collection Charts, modifier le graphique.

Ci-joint un exemple mettant en oeuvre cela pour modifier la plage de données
du graphique nommé "barres" dans le classeur.

http://nabble.documentfoundation.org/file/n3947151/ModifierDiagramme.ods
ModifierDiagramme.ods

Cordialement
Pierre-Yves

Bonjour

Je m'aperçois d'une erreur dans mon exemple précédent (accès par son nom à
un élément de la collection DrawPage).
Il me semble que cela fonctionnait auparavant, mais à la réflexion, sans
doute que non...
Donc ci-joint une nouvelle version plus "orthodoxe" parcourant la collection
et testant sur le nom de l'item.

http://nabble.documentfoundation.org/file/n3950151/ModifierDiagramme.ods
ModifierDiagramme.ods

Cordialement
Pierre-Yves

En fait, la solution précédente marche "dans certains cas"...

Mais si on a, par exemple, des objets de différents type (image, graphe,
...), là, il ne trouve pas le drawtable.

Je récupère le drawpage :

  oDrawPage = Feuille.DrawPage

Je boucle pour rechercher le nom qui l’intéresse :

  For i = 0 To oDrawPAge.Count - 1
    oObjet = oDrawPage(i)
    If oObjet.Name = Nom Then
      ' Trouvé
    End
  Next

Si j’ai un objet "Image", par exemple, de même nom que l’objet "Graphe"
que je rechercher, il faut en plus filtrer sur les services possibles
sur l’objet (mais j’évite de donner le même nom à des objets de type
différent).

Je vais regarder ta solution dès que j’ai un moment.

Jean-Luc