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 :

Formule de plus de 1024 caractères [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 50
    Par défaut Formule de plus de 1024 caractères
    Bonjour,

    J'ai une formule qui fait plus de 1024 caractères dans mon code VBA, d'où le message d'erreur suivant lorsque je lance ma macro : Erreur d'exécution '7': Mémoire insuffisante.

    Voici ma formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("C6").Value = "=(fishkill_pcm_high!R6C3-(1+fishkill_pcm_high!R7C3*fishkill_pcm_high!R7C3*0.1532*0.1532)*(1.04*(1+(1.88E-08)*(1/(2.50E-07+fishkill_pcm_high!R9C3)-1/(1.77E-07))+(1.09E-15)*(1/((2.50E-07+fishkill_pcm_high!R9C3)*(2.50E-07+fishkill_pcm_high!R9C3))-1/((1.77E-07)*(1.77E-07))))*(1+(-6.98E-09)*(1/(1E-05+fishkill_pcm_high!R8C3)-1/(9.95E-06)))+2*(2.59E-02))-fishkill_pcm_high!R7C3*SQRT(1.04*(1+(1.88E-08)*(1/(2.50E-07+fishkill_pcm_high!R9C3)-1/(1.77E-07))+(1.09E-15)*(1/((2.50E-07+fishkill_pcm_high!R9C3)*(2.50E-07+fishkill_pcm_high!R9C3))-1/((1.77E-07)*(1.77E-07))))*(1+(-6.98E-09)*(1/(1E-05+fishkill_pcm_high!R8C3)-1/(9.95E-06)))+2*(2.59E-02))) - " & _
        "(0.58-(1+0.35*0.35*0.1532*0.1532)*(1.04*(1+(1.88E-08)*(1/(2.50E-07+(-6E-08))-1/(1.77E-07))+(1.09E-15)*(1/((2.50E-07+(-6E-08))*(2.50E-07+(-6E-08)))-1/((1.77E-07)*(1.77E-07))))*(1+(-6.98E-09)*(1/(1E-05+0)-1/(9.95E-06)))+2*(2.59E-02))-0.35*SQRT(1.04*(1+(1.88E-08)*(1/(2.50E-07+(-6E-08))-1/(1.77E-07))+(1.09E-15)*(1/((2.50E-07+(-6E-08))*(2.50E-07+(-6E-08)))-1/((1.77E-07)*(1.77E-07))))*(1+(-6.98E-09)*(1/(1E-05+0)-1/(9.95E-06)))+2*(2.59E-02)))"
    Et voici ce que j'ai essayé de faire, sans succès (je suis un débutant), pour ne pas dépasser les 1024 caractères : utiliser des variables pour faire le calcul par étapes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim result1, result2
        result1 = "=(fishkill_pcm_high!R6C3-(1+fishkill_pcm_high!R7C3*fishkill_pcm_high!R7C3*0.1532*0.1532)*(1.04*(1+(1.88E-08)*(1/(2.50E-07+fishkill_pcm_high!R9C3)-1/(1.77E-07))+(1.09E-15)*(1/((2.50E-07+fishkill_pcm_high!R9C3)*(2.50E-07+fishkill_pcm_high!R9C3))-1/((1.77E-07)*(1.77E-07))))*(1+(-6.98E-09)*(1/(1E-05+fishkill_pcm_high!R8C3)-1/(9.95E-06)))+2*(2.59E-02))-fishkill_pcm_high!R7C3*SQRT(1.04*(1+(1.88E-08)*(1/(2.50E-07+fishkill_pcm_high!R9C3)-1/(1.77E-07))+(1.09E-15)*(1/((2.50E-07+fishkill_pcm_high!R9C3)*(2.50E-07+fishkill_pcm_high!R9C3))-1/((1.77E-07)*(1.77E-07))))*(1+(-6.98E-09)*(1/(1E-05+fishkill_pcm_high!R8C3)-1/(9.95E-06)))+2*(2.59E-02)))"
        result2 = "=(0.58-(1+0.35*0.35*0.1532*0.1532)*(1.04*(1+(1.88E-08)*(1/(2.50E-07+(-6E-08))-1/(1.77E-07))+(1.09E-15)*(1/((2.50E-07+(-6E-08))*(2.50E-07+(-6E-08)))-1/((1.77E-07)*(1.77E-07))))*(1+(-6.98E-09)*(1/(1E-05+0)-1/(9.95E-06)))+2*(2.59E-02))-0.35*SQRT(1.04*(1+(1.88E-08)*(1/(2.50E-07+(-6E-08))-1/(1.77E-07))+(1.09E-15)*(1/((2.50E-07+(-6E-08))*(2.50E-07+(-6E-08)))-1/((1.77E-07)*(1.77E-07))))*(1+(-6.98E-09)*(1/(1E-05+0)-1/(9.95E-06)))+2*(2.59E-02)))"
        Range("C6").Value = "=result1 - result2"
    Quelqu'un voit-il une solution à mon problème (à part renommer la feuille où je prend les données avec un nom plus court) ?
    D'avance merci pour votre aide.

  2. #2
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Par défaut
    Je pense qu'une partie de la solution viendrais en eliminant une partie des operations.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     result2 = "=(0.58-(1+0.35*0.35*0.1532*0.1532)*(1.04*(1+(1.88E-08)*(1/(2.50E-07+(-6E-08))-1/(1.77E-07))+(1.09E-15)*(1/((2.50E-07+(-6E-08))*(2.50E-07+(-6E-08)))-1/((1.77E-07)*(1.77E-07))))*(1+(-6.98E-09)*(1/(1E-05+0)-1/(9.95E-06)))+2*(2.59E-02))-0.35*SQRT(1.04*(1+(1.88E-08)*(1/(2.50E-07+(-6E-08))-1/(1.77E-07))+(1.09E-15)*(1/((2.50E-07+(-6E-08))*(2.50E-07+(-6E-08)))-1/((1.77E-07)*(1.77E-07))))*(1+(-6.98E-09)*(1/(1E-05+0)-1/(9.95E-06)))+2*(2.59E-02)))"
    Ca devrait donner quelque chose comme ca (avec 10 chiffres apres la virgule)

    =-0.8662074151
    D'autre part,tu tiens a avoir la formule dans les cellules ? sinon, je pense que ce serait plus simple et plus pratique d'effectuer le calcul et de poser uniquement le resultat dans la cellule excel

    Romain

  3. #3
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 50
    Par défaut
    Certes,

    Mais je ne souhaite pas le faire.
    Je ne veux pas diminuer le nombre de caractères, je veux garder la formule telle qu'elle est, ou la décomposer en calculs élémentaires.
    Et je ne sais pas comment faire.

    Et je souhaiterais en effet avoir la formule dans la cellule.

    Merci quand même.

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Première remarque quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      Dim result1, result2
        result1 = "=(fishkill_pcm_high!R6C3-(1+fishkill_pcm_high!R7C3*fishkill_pcm_high!R7C3*0.1532*0.1532)*(1.04*(1+(1.88E-08)*(1/(2.50E-07+fishkill_pcm_high!R9C3)-1/(1.77E-07))+(1.09E-15)*(1/((2.50E-07+fishkill_pcm_high!R9C3)*(2.50E-07+fishkill_pcm_high!R9C3))-1/((1.77E-07)*(1.77E-07))))*(1+(-6.98E-09)*(1/(1E-05+fishkill_pcm_high!R8C3)-1/(9.95E-06)))+2*(2.59E-02))-fishkill_pcm_high!R7C3*SQRT(1.04*(1+(1.88E-08)*(1/(2.50E-07+fishkill_pcm_high!R9C3)-1/(1.77E-07))+(1.09E-15)*(1/((2.50E-07+fishkill_pcm_high!R9C3)*(2.50E-07+fishkill_pcm_high!R9C3))-1/((1.77E-07)*(1.77E-07))))*(1+(-6.98E-09)*(1/(1E-05+fishkill_pcm_high!R8C3)-1/(9.95E-06)))+2*(2.59E-02)))"
        result2 = "=(0.58-(1+0.35*0.35*0.1532*0.1532)*(1.04*(1+(1.88E-08)*(1/(2.50E-07+(-6E-08))-1/(1.77E-07))+(1.09E-15)*(1/((2.50E-07+(-6E-08))*(2.50E-07+(-6E-08)))-1/((1.77E-07)*(1.77E-07))))*(1+(-6.98E-09)*(1/(1E-05+0)-1/(9.95E-06)))+2*(2.59E-02))-0.35*SQRT(1.04*(1+(1.88E-08)*(1/(2.50E-07+(-6E-08))-1/(1.77E-07))+(1.09E-15)*(1/((2.50E-07+(-6E-08))*(2.50E-07+(-6E-08)))-1/((1.77E-07)*(1.77E-07))))*(1+(-6.98E-09)*(1/(1E-05+0)-1/(9.95E-06)))+2*(2.59E-02)))"
        Range("C6").Value = "=result1 - result2"
    La cellule C6 contient "=result1 - result2" comme tu met le tout entre guillement c'est un chaine de caractère pas des variables.
    "1+1" ne feras jamais 2
    non plus cela reste =a+b

    de plus en mettant un moins au milieu de deux chaine de caractère tu compte faire quoi? Pif-Paf n'a pas plus de sens

    essaye quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim result1 as string
    dim result2 as double
    result1="=tout ton truc"
    result2=tout ton truc (sans guillemet ni =)
    Range("C6").formula= result1 & "-" & result2
    Sinon il faudrait que tu explique ce que tu appelle calcule élémentaire

    Tu peux mettre par exemple
    a la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "..." & (2*15+35) & "...."
    tu remplacera dans la chaine de caractère (2*15+35) par le résultat 65 du cgagne quelque caractère et ta formule reste compréhensible si l'utilisateur a besoin de contrôler les formule

  5. #5
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 50
    Par défaut
    Concernant la remarque, je l'ai dit je suis débutant, d'où les guillemets. Je ne savais pas que ça faisait une chaine de caractères, d'où le moins entre result1 et result2.

    Concernant ta solution, si je comprend bien result2 est calculé d'abord et c'est ce résultat qui est utilisé pour rentrer la formule dans C6 ?

    Sinon décomposer la formules en calculs élementaires c'est ce que j'essaye de faire en utilisant result1 et result2, ça décompose la formules en 3 calculs : d'abord result1, ensuite result2, puis leur différence.

  6. #6
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Oui je calcule d'abord résult2 puis je l'attache a la fin de la chaine de caractère

    "chaine1" & "chaine2" donne le "chaine1chaine2"

    Mais ce qui serait intéressant de savoir c'est pourquoi tu veux conserver une formule et pas te contenter du résultat, pour savoir jusqu'où on peu aller dans la simplification.
    Car ce que tu as dit
    Je ne veux pas diminuer le nombre de caractères, je veux garder la formule telle qu'elle est, ou la décomposer en calculs élémentaires.
    Est loin d'être claire

    Pour ce que tu essaye de faire comme dit tant que tu met des guillemet tu ne calcule rien
    De plus fishkill_pcm_high!R6C3 ne fonctionne pas en VBA
    il faut que tu fasse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets(" fishkill_pcm_high").Cells(6,3)

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour tous,
    Faudrait d'abord que tu explique ce que tu veux mettre dans ta cellule... parec que tu met "=...." dans ce cas c'est comme si tu veux incorporer une fonction Excel dans la cellule, mais alors il faut employer Formula ou FormulaLocal et pas Value.
    Si c'est le résultat que tu veux dans ta cellule c'est tout à fait autre chose..
    Tu dis.
    A+

  8. #8
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 50
    Par défaut
    Je vais vous mettre un exemple pour que vous expliquer (pas en vba) :

    Admettons que la formule est la suivante, et que le nombre de caractères est supérieur à 1024 (ici il n'y en a que 27 si je compte bien) :

    =abc*de+(fghij/klmno-pqrst)

    Je voulais que dans C6 apparaisse exactement cette formule, mais comme elle est trop longue j'aurais voulu faire :

    var1=abc*de
    var2=(fghij/klmno-pqrst)
    C6=var1+var2

    et que lorsque que l'on sélectionne C6, on ne voit pas le résultat de var1 + le résultat de var2 mais bien la forumle entière.

    Mais a priori celà n'est pas possible.

    Par contre mon fishkill_pcm_high!R6C3 fonctionne, je n'ai pas de problème.

    Quoi qu'il en soit, admettons que quelqu'un ait une formule qui dépasse 1024 caractères, qu'il ne puisse pas diminuer le nombre de caractères, qu'il ne puisse pas non plus faire de calculs intermédiaires, etc.
    Comment fait-il ?

  9. #9
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Donc ta question est comment entrer une formule de plus de 1024 caractères sans la simplifier c'est bien ca?

    Du coup je ne peux pas t'aider je suis obligé de cédé a la place en espérant que quelqu'un pourras te répondre. Moi je sèche. Désolé

  10. #10
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 50
    Par défaut
    Merci quand même.

    Mais cette question c'est juste pour aller au bout de la chose, de mon coté j'ai fini par opter pour une réduction du nombre de caractères, ce qui est finalement la solution qui me convient le mieux vu la complexité de la chose.

    Je vais mettre le sujet en résolu, ça m'étonnerait fort que quelqu'un puisse répondre.

    Merci pour votre aide à tous.

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

Discussions similaires

  1. [xsl][xslfo][fop]pas plus de 512 caractères
    Par Invité dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/01/2006, 17h02
  2. SQL de plus de 255 caractères dans un recordset
    Par acama dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 05/01/2006, 15h50
  3. JDBC : requete de plus de 4000 caractères
    Par Endymion222 dans le forum JDBC
    Réponses: 1
    Dernier message: 01/12/2005, 17h00
  4. [SQL] Problème de requête SQL de plus de 8060 caractères ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 06/04/2005, 15h07
  5. [langage] pas plus de 1024 caractères?
    Par Kinethe dans le forum Langage
    Réponses: 8
    Dernier message: 15/07/2004, 11h50

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