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 trop grande [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut Formule trop grande
    Bonjour

    Voila j'aimerais savoir comment faire pour que le compilateur vba accepte une grande formule sachant que j'ai essayé de la découper, mais sans succé.
    (je suis sous excel 2003)

    Voila la plus petite des grandes formules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME((REJECT!F4 : F25000<STAT_REJECT!B110)*(REJECT!E4 : E25000>140)*(REJECT!D4 : D25000<STAT_REJECT!B108)*(REJECT!C4 : C25000>30)*(REJECT!C4 : C25000<50)*(REJECT!B4 : B25000=1))
    Et voila la plus grande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME((REJECT!M4 : M25000>=STAT_REJECT!B252)*(REJECT!M4 : M25000<STAT_REJECT!F252)*(REJECT!L4 : L25000>50)*(REJECT!J4 : J25000>STAT_REJECT!B250)*(REJECT!J4 : J25000<STAT_REJECT!F250)*(REJECT!I4 : I25000>3,5)*(REJECT!I4 : I25000<18,5)*(REJECT!H4 : H25000<STAT_REJECT!B248)*(REJECT!G4 : G25000>135)*(REJECT!G4 : G25000<170)*(REJECT!F4 : F25000<STAT_REJECT!B246)*(REJECT!E4 : E25000>100)*(REJECT!E4 : E25000<140)*(REJECT!D4 : D25000<STAT_REJECT!B244)*(REJECT!C4 : C25000>30)*(REJECT!C4 : C25000<50)*(REJECT!B4 : B25000=9))
    Dans le compilateur, j'ai écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("AG118").Select
    formule = "=SOMME((REJECT!F4 : F25000<STAT_REJECT!B110)*(REJECT!E4 : E25000>140)*(REJECT!D4 : D25000<STAT_REJECT!B108)*(REJECT!C4 : C25000>30)*(REJECT!C4 : C25000<50)*(REJECT!B4 : B25000=1))"
    ActiveCell.FormulaArray = formule

    En espérant que vous puissiez m'aider,

    Cordialement
    Jackall

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Bonjour,
    Selon mois c'est le FormulaArray qui cloche, essaies ceci pour voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = formule
    P.S. je t'avoue ne pas avoir essayé

    Edit: je viens d'essayer avec ta petite formule, ça passe, pour l'autre l'idée de Gorfael doit être la bonne.

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut
    merci pour ta réponse, je viens de tester et sa ne fonctionne pas, il me retourne #NOM?
    Le FormulaArray me permettait de faire des formules matricielles.
    Il y a peut être une autre solution mais je ne sais pas laquelle ...

    Cordialement

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut jackall et le forum
    Si je ne me trompe pas, le compilateur n'accepte que des formules limitées à 255 caractères. Il faut donc soit la reduire soit créer une Funtion (avec application.volatile, pour qu'elle se comporte comme une formule). et se sont des formules matricielles. Moi, j'utiliserais Sommeprod

    Pour la réduire, il faut que tu nommes tes plages.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME((REJECT!F4 : F25000<STAT_REJECT!B110)*(REJECT!E4 : E25000>140)*(REJECT!D4 : D25000<STAT_REJECT!B108)*(REJECT!C4 : C25000>30)*(REJECT!C4 : C25000<50)*(REJECT!B4 : B25000=1))
    pourrait devenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD(RJ_F<ST_RJ_B110;RJ_E>140;RJ_D<ST_RJ_B108;RJ_C>30;RJ_C<50;RJ_B=1)
    en nommant "REJECT!F4 : F25000" "RJ_F", etc... qui permet de passer de 180 caractères à 75.

    Si tu nommes tes plages dynamiquement, il faut définir une colonne comme donnant la référence ligne pour toutes, de sorte que toutes les plages aient le même nombre de cellules

    Si tu ne veux pas nommer tes plages, seule la création de Funtion, à mon avis, te permettra de résoudre ton problème.
    A+

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut
    Merci Gorfael, j'ai renommé mes plages dynamiquement, cela me permet de réduire considérablement mes formules.
    Pour le moment j'utilise encore SOMME, mais si un autre problème se présente, j'utiliserais SOMMEPROD.

    Encore merci pour ta solution.

    Cordialement

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut
    Re bonjour le forum ^^

    Le compilateur me donne une erreur lorsque j'écris ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("AG173").Select
    formule = "=SUMPRODUCT((RJ_J>B_114)*(RJ_J<F_114)*(RJ_I<3,5)*(RJ_H<B_112)*(RJ_G>135)*(RJ_G<170)*(RJ_F<B_110)*(RJ_E>100)*(RJ_E<140)*(RJ_D<B_108)*(RJ_C>30)*(RJ_C<50)*(RJ_B=1))"
    ActiveCell.FormulaArray = formule
    Malheuresement je n'arrive pas à trouver mon ou mes erreurs ...

    Pouvez-vous m'éclairer svp ?

    Cordialement

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut jackall et le forum
    Serait pas mal de donner l'erreur, pas assez d'éléments pour la trouver, mais
    RJ_J, RJ_I, RJ_H, RJ_G, RJ_F, RJ_E, RJ_D, RJ_C et RJ_B doivent avoir le même nombre de cellules

    Purquoi utiliser FormulaArray, alors que tu utilises Sommeprod, qui est déjà une formule matricielle ? moi, j'utiliserais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("AG173")..formulalocal = "=Sommeprod((RJ_J>B_114)*(RJ_J<F_114)*(RJ_I<3,5)*(RJ_H<B_112)*(RJ_G>135)*(RJ_G<170)*(RJ_F<B_110)*(RJ_E>100)*(RJ_E<140)*(RJ_D<B_108)*(RJ_C>30)*(RJ_C<50)*(RJ_B=1))"
    Permet de tester directement la formule sur Excel avant d'en faire un copier/coller sur la macro
    A+

  8. #8
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut
    Re Salut ^^

    En fait j'avais pensé faire comme sa, c'est à dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("AG173").Select
    formule = "=SOMMEPROD((RJ_J>B_114)*(RJ_J<F_114)*(RJ_I<3,5)*(RJ_H<B_112)*(RJ_G>135)*(RJ_G<170)*(RJ_F<B_110)*(RJ_E>100)*(RJ_E<140)*(RJ_D<B_108))*(RJ_C>30)*(RJ_C<50)*(RJ_B=1))"
    ActiveCell.FormulaLocal = formule
    Mais dans ma feuille excel, dans la cellule AG173 cela m'indique #NOM?
    J'ai bien fait attention de donner le même nombre de cellule à RJ_J, RJ_I, RJ_H, RJ_G, RJ_F, RJ_E, RJ_D, RJ_C et RJ_B

    J'avou me mélanger un petit peu entre les FormulaArray, le FormulaLocal ...

    Est ce de cette manière que je devais faire ?

    Cordialement

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

Discussions similaires

  1. [CSS]Probleme de contenu trop grand et de pied de page
    Par Drannor dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 30/05/2005, 23h59
  2. Taille d'archive trop grande
    Par mick84m dans le forum Shell et commandes GNU
    Réponses: 14
    Dernier message: 12/05/2005, 16h39
  3. tableau trop grand ?
    Par Praxe dans le forum C++
    Réponses: 17
    Dernier message: 17/03/2005, 14h14
  4. modélisation d'une base : table trop grande
    Par Shabata dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 22/11/2004, 11h44
  5. Surface trop grande
    Par Black_Daimond dans le forum DirectX
    Réponses: 1
    Dernier message: 18/01/2003, 03h02

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