Utilisation des fonctions CALC dans BASIC

Bonjour,

Je cherche à découvrir l’usage de basic autre que pour gérer des macros. Mes premiers essais pour une fonction simple ne sont vraiment pas concluants : message d’erreur systématique “Sous-procédure ou procédure fonction non définie.”.
La ligne qui est refusée est (pour les tests, Indx est -1):

Valeur = DECALER (Adresse, Indx, -1)

Où est mon erreur ?

Nota : j’ai aussi essayé avec des ; mais cela donne aussi une erreur : “Erreur de parenthèses.”

Cordialement,

La réponse est ici:
https://help.libreoffice.org/6.4/en-US/text/sbasic/shared/03131600.html
Ne vous effrayez pas du 6.4 dans l’URL, seule la page d’aide est nouvelle. L’exemple donné est supporté depuis bien plus longtemps.

Bonjour

Je me permets de compléter car l’aide est un peu concise et tu commences (pour découvrir…) avec quelque chose de particulièrement compliqué : la mise en oeuvre de la fonction DECALER.

  • Le service CallFunction attend en paramètre un nom de fonction en anglais (même si ton interface est en français)
  • Les arguments doivent être passés dans un tableau
  • Le premier paramètre est le tableau de données de la plage à décaler
  • Suivent, comme dans l’interface, les lignes & col. à décaler puis la hauteur/largeur de la plage retournée
  • Ce qui est retourné est en effet une plage même s’il n’y a qu’une cellule, d’où la syntaxe permettant d’afficher le résultat (instruction PRINT).

Voici un exemple :

sub MyoffSet()

dim oFA as object,oData as object
dim oRetour as object

oData = thiscomponent.sheets.getByName("Feuille1").getCellRangeByName("A1:B10").getDataArray()

oFA = createunoservice("com.sun.star.sheet.FunctionAccess")

' premier argument pour CallFunction est le nom de la fonction en anglais'
' second argument les paramètres à passer sous la forme de tableau'

oRetour = oFA.callFunction("OFFSET", Array(oData, 1, 0, 1 , 1))

print "En A2 : " & oRetour(0)(0)

oRetour = oFA.callFunction("OFFSET", Array(oData, 6, 1, 1 , 1))

print "En B7 : " & oRetour(0)(0)

end sub

[Ajout 17:50]

Appeler DECALER en basic est quand même le plus souvent inutile : si on connait la plage de départ et le décalage, il est plus rapide d’accéder directement à la plage “cible” soit par son son nom, soit par ses coordonnées. Je te conseille la page du wiki qui regroupe l’essentiel des ressources disponibles et où tu devrais trouver plein d’informations et d’exemples…

Cordialement