IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

Utilisation d'une fonction native Calc en anglais et à deux arguments [LibreOffice][Tableur]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Points : 9
    Points
    9
    Par défaut Utilisation d'une fonction native Calc en anglais et à deux arguments
    Bonjour à tous,

    Ça y est, j'ai sauté le pas et je converti toutes mes anciennes feuilles de calcul VBA en Basic LibreOffice.
    A cet effet, j'essaie d'utiliser les fonctions natives de Calc, et cela fonctionne parfaitement pour les fonctions à un argument comme celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Function MOYENNEPERSO(Vecteur As Double) As Double
    	Dim LFonction As Object
    	LFonction = createUnoService( "com.sun.star.sheet.FunctionAccess" )
    	MOYENNEPERSO = LFonction.CallFunction("AVERAGE",Vecteur)
    End Function
    En revanche, ce même type de fonction statistique à deux arguments génère un signal d'erreur : « com.sun.star.lang.IllegalArgumentException »
    Cet exemple est supposé calculer la pente de la droite passant au plus près des points expérimentaux d'abscisses LVecteur1 et d'ordonnées LVecteur2.
    (Pour simplifier, j'ai déplacé les deux arguments utilisés à l'intérieur de la fonction) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function PENTEPERSO() As Double	
    Dim LVecteur1(4) As Double
    Dim LVecteur2(4) As Double
    Dim LVecteur(1) As Variant
    LVecteur1=Array(0.83, 1.32, 1.81, 1.63, 2.8)
    LVecteur2=Array(0.24, 0.37, 0.49, 0.63, 0.76)
    LVecteur=Array(LVecteur1,LVecteur2)
    	Dim LFonction As Object
    	LFonction = createUnoService( "com.sun.star.sheet.FunctionAccess" )
    	PENTEPERSO = LFonction.CallFunction("SLOPE", LVecteur() )  
    End Function
    La solution est sans doute triviale, mais je rame depuis des heures sur ce problème, alors je sollicite un coup de main.
    En vous remerciant.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 7
    Points : 9
    Points
    9
    Par défaut Solution trouvée
    On trouve une solution bricolée à cette adresse : https://forum-test.openoffice.org/en...p?f=74&t=72284

    Bizarrement, et contrairement à ce qu'on peut faire avec une seule variable, il ne semble pas qu'on puisse faire les calculs à deux variables à partir de tableaux préalablement construits en Basic, mais ils sont réalisables à partir d'une instruction CallFunction() avec comme arguments :
    - Le nom de la fonction en anglais : "SLOPE"
    - un tableau Array constitué des deux adresses des deux plages de cellules des valeurs de X et de Y (que j'ai nommées "cPlageX" et "cPlageY")

    Donc, pour ce calcul de coefficient directeur d'une droite à partir d'instructions en Basic, voici une solution qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SUB COEFFDIRECTEUR()
    Dim LDoc, LFeuille As Object
    Dim a As Double
     
    LDoc = ThisComponent                          ' Désignation du classeur
    LFeuille = LDoc.Sheets("Régression")          ' Désignation de la feuille
     
    'Les valeurs de X et Y se trouvent sur les plages de cellules nommées de la feuille nommée "Régression" :
    ' - sur les cellules que j'ai nommée "cPlageX" on trouve (0.83, 1.32, 1.81, 1.63, 2.8)
    ' - sur les cellules que j'ai nommée "cPlageY" on trouve (0.83, 1.32, 1.81, 1.63, 2.8)
     
        Dim LFonction As Object
        LFonction = createUnoService("com.sun.star.sheet.FunctionAccess")
        a = LFonction.CallFunction("SLOPE",Array(LFeuille.getCellRangeByName("cPlageY"),LFeuille.getCellRangeByName("cPlageX")))
    Print("Fini")     
    End Sub
    Sans doute existe-t-il une solution plus élégante, mais je n'ai pas tout compris.
    Merci à tous ceux qui ont essayé de chercher une solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 29/06/2006, 15h37
  2. Réponses: 3
    Dernier message: 29/04/2006, 13h02
  3. Réponses: 3
    Dernier message: 14/04/2006, 19h36
  4. Utilisation d'une fonction Transact-SQL ds une requête SQL
    Par Fl0ppeur dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/02/2006, 13h42
  5. Utilisation d'une fonction dans une procedure
    Par MaxiMax dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/08/2005, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo