Formulaire de demande d'aide

Bonjour

Voici une nouvelle question envoyée à l'aide du formulaire de demande d'aide (http://fr.libreoffice.org/assistance/).
Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que le demandeur reçoive une copie de votre réponse.

De la part de : -
- andr55@laposte.net

Texte de la question : -
- Je veux accéder une plage d'un tableur avec un macro en basic (ou autre langage) pour faire une simple fonction pas possible directement dans le tableur.
La plage doit s'ajuster automatiquement si des lignes/colonnes sont insérées ou supprimées.
J'ai trouvé une façon de s'ajuster en envoyant les numéros de colonnes et lignes, mais pas la plage directement.
Maintenant je ne trouve pas comment accéder la plage depuis basic.
Je voulais définir la feuille (ou plage) courante automatiquement, mais il semblait pas marcher, alors j'ai défini la feuille par son nom, utilisant
oFeuille = thisComponent.Sheets.getByName("nom-de-feuille").
Mais
print oFeuille.getCellByPosition(col,ligne)
donne l'erreur «valeur de propriété incorrect»
Je n'ai aucune idée comment dépasser ça.
La documentation est totalement inutile. Rien ne défini précisément l'interface entre calc et basic.
Je veux simplement faire
f(plage) en calc
et passe la plage à basic
pour faire quelque chose simple et retourner un simple valeur.

Si quelqu'un a une idée, il serait bien apprécié

Bonjour

Message du 28/04/14 21:52
Je veux accéder une plage d'un tableur avec un macro en basic (ou autre langage)
...
La plage doit s'ajuster automatiquement si des lignes/colonnes sont insérées
ou supprimées. J'ai trouvé une façon de s'ajuster en envoyant les numéros de
colonnes et lignes, mais pas la plage directement.

Calc ne transmet que les *valeurs* de la plage et non *l'objet* plage
(ni les *objets* cellule composant la plage).

Par exemple avec un appel de fonction du type: =MAFONCTION(B6:D7)
le programme ne reçoit que les valeurs contenues dans cette plage
sous la forme d'un tableau de variant. Chaque élément du tableau
sera du type STRING ou DOUBLE selon que la cellule contient du
texte ou autre chose.

Conséquence implicite : si B6 contient par exemple 23/07/2011
la macro ne récupère *que* 40747.

Concernant la mise à jour des références lors de l'ajout ou
suppression de lignes/colonnes, il sera répercuté sur un appel
du type =MAFONCTION(B6:D7). Il n'y a rien de spécial à faire.

Autre point important : une fonction "utilisateur" ne peut que
renvoyer une valeur (DOUBLE ou STRING, voire un tableau) à la
cellule appelante (celle qui contient l'appel de la fonction).

Il n'est pas possible, là encore, de modifier *l'objet* (ni
aucun autre, par exemple la couleur de la cellule d'à côté).

Si tu veux accéder à des objets, il faut en effet passer les
références à la fonction. Par exemple avec un appel du type:
=MAFONCTION(FEUILLE();A1:C7;CELLULE("adresse";A1);CELLULE("adresse";C7))

Autrement dit, on passe le numéro de feuille, la plage sous forme
de valeur (ce qui permettra l'actualisation de la fonction si la
plage est modifiée), l'adresse de la cellule de début, celle de fin.

Ce type d'appel sera mis à jour automatiquement en cas d'insertion
ou suppression de ligne/colonnes.

Nota: comme déjà indiqué la fonction ne pourra modifier que la
valeur de la cellule appelante. Il existe une possibilité de
traitement asynchrone que je n'évoque que pour mémoire.

j'ai défini la feuille par son nom, utilisant
oFeuille = thisComponent.Sheets.getByName("nom-de-feuille").
Mais print oFeuille.getCellByPosition(col,ligne) donne l'erreur
«valeur de propriété incorrect»

Avec cette syntaxe tu demandes d'afficher (print) un objet complexe
ce qui est impossible. Tu pourrais faire par exemple :

print oFeuille.getCellByPosition(col,ligne).string

Nota: ceci pourrait s'envisager lors de la mise au point de la
formule mais pas en fonctionnement "réel"...

Pour terminer, si des traitements sur les objets (ajouts de
données, modification de format, etc.) doivent être effectués
lors de mise à jour de cellules, il est souvent préférable
de recourir à des macros "sur événement" qu'à des fonctions.

Si tu réponds, merci de penser à utiliser la fonction "répondre à tous"
du logiciel de courrier électronique ou du webmail de façon que la liste
reçoive la réponse.

Cordialement
Pierre-Yves

Je retransfère la réponse d'André à sa demande