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

Macros et VBA Excel Discussion :

Résultat d'une fonction : formule ne s'interpète pas


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    Par défaut Résultat d'une fonction : formule ne s'interpète pas
    Bonjour,

    J'ai fait une fonction qui crée une formule en concaténant du texte et des variables. La fonction m'affiche bien la formule dans la cellule mais ne l'interprète pas. Voici la formule que j'obtiens dans la cellule:
    =CIQ("ID1234";"IQ_TOTAL_REVENUE";"IQ_LTM";"01/01/2015";;;REPORTED)

    Elle peut paraître étrange mais mais le =CIQ fait appel à un add-on et va chercher des données dans une base de données externe.

    Voici mon code:
    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
    Function formulaIQ(ID_IQ As String, ratio_IQ As String, period_IQ As String, date_IQ As Date) As String
     
    Dim myformula As String
     
    Select Case ratio_IQ
        Case "Ope01"
        myratio = "IQ_TOTAL_REV"
        Case "Ope02"
        myratio = "IQ_TOTAL_EQUITY"
        Case Else
        myratio = ""
    End Select
     
    formulaIQ = "=CIQ(" & Chr(34) & ID_IQ & Chr(34) & Chr(59) & Chr(34) & myratio .........
     
    End Function
    Le problème est donc, comment demander à Excel d'exécuter la formule plutôt que de simplement l'écrire?

    Merci

  2. #2
    Membre chevronné Avatar de pasdechances
    Homme Profil pro
    Alternant, Ingénieur en systèmes Informatiques et Industriels
    Inscrit en
    Septembre 2015
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant, Ingénieur en systèmes Informatiques et Industriels
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 218
    Par défaut
    Bonjour,
    j'ai rencontré le même problème que toi.
    le string n'ai pas exécutable, tu oblige excel a lire la case comme une chaine de caractere.
    et j'ai fini par trouver une solution =).

    utilise donc sa : ActiveCell.FormulaR1C1 = "contenu"

    dit moi se que tu en pense ou si sa marche.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    Par défaut
    Oui j'ai déjà essayé ça dans une procédure "Sub" mais ça ne va pas dans une fonction (ou je ne code pas bien). Si je fais ceci j'obtiens # VALEUR! car je ne termine pas ma fonction par formulaIQ=qqchose mais je ne vois pas comment faire autrement:

    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
    17
    18
     
    Function formulaIQ(ID_IQ As String, ratio_IQ As String, period_IQ As String, date_IQ As Date) As String
     
    Dim myformula As String
     
    Select Case ratio_IQ
        Case "Ope01"
        myratio = "IQ_TOTAL_REV"
        Case "Ope02"
        myratio = "IQ_TOTAL_EQUITY"
        Case Else
        myratio = ""
    End Select
     
    myformula = "=CIQ(" & Chr(34) & ID_IQ & Chr(34) & Chr(59) & Chr(34) & ..."
    ActiveCell.FormulaR1C1 = myformula
     
    End Function

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    la fonction doit te permettre de construire la formule, et de la transmettre au format String à la procédure appelante

    c'est dans la procédure appelante que tu l'insère dans le .FormulaR1C1


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sub InsereFormule()
    Range("A1").FormulaR1C1 = formulaIQ("ta liste d'arguments à utiliser dans la fonction")
    si la fonction a vocation a être utilisée directement dans une feuille de calcul, regarde du côté de la propriété ThisCell de l'objet Application

    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
     
    Function formulaIQ(ID_IQ As String, ratio_IQ As String, period_IQ As String, date_IQ As Date)
     
    Select Case ratio_IQ
        Case "Ope01"
        myratio = "IQ_TOTAL_REV"
        Case "Ope02"
        myratio = "IQ_TOTAL_EQUITY"
        Case Else
        myratio = ""
    End Select
     
    ThisCell.FormulaR1C1 =  "=CIQ(" & Chr(34) & ID_IQ & Chr(34) & Chr(59) & Chr(34) & ..."
     
    End Function
    Ps : je n'ai pas testé les codes, je ne dispose pas de l'add on dont tu fais mention


    EDIT : ma proposition avec ThisCell ne pourra pas fonctionner en fait (je pense) .... réécrire une formule dans une cellule recevant déjà une formule ça me semble étrange en y repensant

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    Par défaut
    Hum... je me demande si on ne s'écarte pas du but poursuivi. L'idée était quand dans une feuille Excel, au lieu de taper une formule compliquée, je puis indiquer simplement =formulaIQ(arg1;arg2;arg3...) et que ça me donne directement le résultat. Comment faire pour appeler la Sub "InsereFormule" que tu proposes, je n'ai pas envie de devoir chaque fois faire appel à un bouton de macro.

    Merci pour votre aide

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    si tu capture ta formule par l'enregistreur de macro, ça donne quoi ?

    1) démarrer l'enregistreur
    2) écrire dans une cellule la formule complète
    3) valider la saisie


    l'idée serait de savoir s'il est possible de manipuler cette formule directement comme les WorkSheetFunction ... mais je ne sais pas si cette formule provenant d'un add-on sera dans cette collection, dans une autre, ou nul part


    s'il existe une collection la contenant, on pourrait voir à créer une procédure de ce type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function formulaIQ(ID_IQ As String)
     
    Select Case ID_IQ
        Case "SOMME"
            formulaIQ = Application.WorksheetFunction.Sum([A2:B2])
        Case "MOYENNE"
            formulaIQ = Application.WorksheetFunction.Average([A2:B2])
        Case Else
            formulaIQ = "Paramètre non intégré : " & ID_IQ
    End Select
     
    End Function

    Bon, j'ai simplifié les arguments, et pris l'exemple basique d'une somme et d'une moyenne
    reste à savoir dans quelle collection se trouverait ta formule

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 15
    Par défaut
    Si je l'enregistre, j'ai ceci mais il n'y aura pas de fonction dans le Workbook car la structure est la suivante:

    =CIQ("identifiant_société";"élémente_du_bilan_à_charger";"période couvrir";"d'autres_options")
    Donc l'appel est toujours le même hormis les arguments qu'on y passe ensuite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub Macro2()
        ActiveCell.FormulaR1C1 = "=CIQ(R[-3]C[-7],""IQ_TOTAL_REV"",R[-3]C[-5],R[-8]C[-2])"
        Range("I10").Select
    End Sub

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/10/2006, 13h13
  2. [Système] retour de résultats par une fonction
    Par maximenet dans le forum Langage
    Réponses: 7
    Dernier message: 18/09/2006, 22h32
  3. Affecter résultat d'une fonction à une variable ?
    Par ctobini dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 07/09/2006, 15h45
  4. Récupérer le résultat d'une fonction dans une balise html
    Par Hayato dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/06/2006, 18h04
  5. Réponses: 6
    Dernier message: 08/06/2006, 11h07

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