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 :

Taille de formule limitée en VBA?


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 26
    Par défaut Taille de formule limitée en VBA?
    Bonjour.

    J'aimerais intégrer une formule assez costaud dans une de mes macros mais la deuxième ligne de formule est en rouge.

    http://www.casimages.com/img.php?i=1...4734493590.jpg

    Avez-vous une explication?

  2. #2
    Membre éprouvé
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 174
    Par défaut
    Bonjour,

    Pourquoi y a-t-il une 2e ligne ? Tu vas à la ligne juste avec le bouton entrée ?

    Car si tel est le cas, ça ne fonctionne pas comme cela sur VBA, il faut faire "_" en bout de ligne précédé d'un espace, puis seulement après, aller à la ligne.
    Sinon, il n'associe pas le début de formule à la 2e ligne (ou vice & versa

    A+
    elise

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 26
    Par défaut
    Bonjour Elise, Merci pour ta réponse,

    J'ai fait ce que tu m'as dit.
    Malheureusement, j'ai toujours du texte en rouge.

    code initial:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Macro5()
    '
    ' Macro5 Macro
    '
     
    '
    ActiveCell.FormulaR1C1 = _
    "=IF(RC[-1]=R[-1]C[-1],"""",IF(AND(RC[-1]=R[7]C[-1],RC[-1]=R[6]C[-1],RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[7]C[-6])+(1/R[6]C[-6])+(1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(RC[-1]=R[6]C[-1],RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[6]C[-6])+(1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(R[3]C[-1]=RC[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(RC[-1]=R[
    1]C[-1],1/((1/R[1]C[-6])+(1/RC[-6])),RC[-6]))))))))"
    End Sub
    Code essayé après avoir lu votre astuce :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Macro5()
    '
    ' Macro5 Macro
    '
     
    '
    ActiveCell.FormulaR1C1 = _
    "=IF(RC[-1]=R[-1]C[-1],"""",IF(AND(RC[-1]=R[7]C[-1],RC[-1]=R[6]C[-1],RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[7]C[-6])+(1/R[6]C[-6])+(1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(RC[-1]=R[6]C[-1],RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[6]C[-6])+(1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(R[3]C[-1]=RC[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6]))," & _
    "= IF(AND(RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(RC[-1]=R[ & _
    " = 1]C[-1],1/((1/R[1]C[-6])+(1/RC[-6])),RC[-6]))))))))"
    Range("N8").Select
    End Sub
    Message = erreur de compilation, attendu fin d'instruction...

    Où est le problème?

  4. #4
    Membre éprouvé
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 174
    Par défaut
    Effectivement, mauvaise explication de ma part, car il aurait fallu utiliser le & en début de ligne :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveCell.FormulaR1C1 = _
    "=IF(RC[-1]=R[-1]C[-1],"""",IF(" _
    & "AND(RC[-1]=R[7]C[-1],RC[-1]=R[6]C[-1] .........
    Mais cela ne résoud pas le pbl, il me dit qu'il n'y a pas assez de mémoire.
    Mais je crois avoir déjà lu qu'il n'aimait pas les si imbriqués au-delà de 7 Si, et là, il y en a 8...

    Sinon, je crios que ta formule correspond à celle-ci (qui aurait le mérite de ne pas imbriquer les "Si", mais de les justaposer...

    Vois si cela te convient... Chez moi ça fonctionne (même si rouge ici... (??))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       ActiveCell.FormulaR1C1 = _
            "=IF(R[1]C[-1]=RC[-1],"""",1/(IF(R[1]C[-1]=R[8]C[-1],1/R[8]C[-6],0)+IF(R[1]C[-1]=R[7]C[-1],1/R[7]C[-6],0)+IF(R[1]C[-1]=R[6]C[-1],1/R[6]C[-6],0)+IF(R[1]C[-1]=R[5]C[-1],1/R[5]C[-6],0)+IF(R[1]C[-1]=R[4]C[-1],1/R[4]C[-6],0)+IF(R[1]C[-1]=R[3]C[-1],1/R[3]C[-6],0)+IF(R[1]C[-1]=R[2]C[-1],1/R[2]C[-6],0)+(1/R[1]C[-6])))"
    Elise

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonsoir,

    C'est le nombre de colonnes dans le VBE qui est limité donc il faut faire des retours à la ligne avec la combinaison espace tiret bas " _" et l'esperluette (&) pour concatener :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-1]=R[-1]C[-1],""""," & _
        "IF(AND(RC[-1]=R[7]C[-1],RC[-1]=R[6]C[-1],RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[7]C[-6])+(1/R[6]C[-6])+(1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6]))," & _
        "IF(AND(RC[-1]=R[6]C[-1],RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[6]C[-6])+(1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6]))," & _
        "IF(AND(RC[-1]=R[5]C[-1],RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[5]C[-6])+(1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6]))," & _
        "IF(AND(RC[-1]=R[4]C[-1],RC[-1]=R[3]C[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[4]C[-6])+(1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(AND(R[3]C[-1]=RC[-1],RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[3]C[-6])+(1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6]))," & _
        "IF(AND(RC[-1]=R[2]C[-1],RC[-1]=R[1]C[-1]),1/((1/R[2]C[-6])+(1/R[1]C[-6])+(1/RC[-6])),IF(RC[-1]=R[1]C[-1],1/((1/R[1]C[-6])+(1/RC[-6])),RC[-6]))))))))"
    Hervé.

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut
    Tu devrais expliquer ce que tu souhaites faire exactement, ta formule me semble bien longue. Il serait bien, à mon avis, de poser une question dans le forum Excel (pas vba-excel), pour demander s'il n'est pas possible de simplifier tout ça. Dans cette question, ne te contente pas de demander une simplification en mettant la formule en référence, explique bien ce qu'elle fait.
    Vu la structure de ta formule, intéresse toi aux formules matricielles.
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    +1 avec Qwaz, quand on est à écrire des choses pareilles, il est temps de repenser sa méthode. C'est illisible et inmaintenable, même dans la version remise au propre par Theze

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour tout le monde,

    J'ai juste fait en sorte que Olivm puisse écrire sa formule dans le VBE, je n'ai même pas chercher à comprendre sa fonctionnalité. Se casser la tête avec des "FormulaR1C1", je préfère plutôt avec des Range("X" & I), plus compréhensible à mon goût.

    Hervé.

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 26
    Par défaut
    Merci pour votre aide. J'ai posé une question précise sur la FORME vba et j'ai eu des réponses adéquates. Merci beaucoup.

    J'ai donc utilisé la correction de Theze.
    Qwaz, expliquer tout le cheminement qui m'a amené à là serait encore plus incompréhensible pour le lecteur et je ne veux pas envoyer le fichier par souci de confidentialité.
    De plus, il s'agissait d'une question de forme.

    Je penserai à m'interesser de plus près aux formules matricielles.


    el_slapper, polémiquer sur ma méthode est inutile mais merci pour ton soutien dans mon travail ;-)

  10. #10
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    Désolé si j'ai été cassant, mais ce que je veux dire, c'est qu'un pâté comme ça, aussi justifié soit-il fonctionellement, ça amène assez vite plein de soucis, c'est tout.

    Que tu aie rééllement besoin de faire un truc d'une complexité pareille est tout à fait possible(j'ai moi-même mis en place quelques algos de décision particulièrement complexes, pas de ce genre, mais pas franchement mieux). Simplement, une découpe en éléments plus simples me parait obligatoire, à terme, à la survie de ton code. Sans découpe, j'aurais mettre une bonne partie de mes algos à la poubelle. Avec, j'ai juste eu à rajouter une case de plus pour doubler le nombre de décisions possibles.

    Parceque le jour ou tu dois modifiier ton code, tel qu'il est, crois-moi, tu vas souffrir. Horriblement. C'est juste ça que je veux dire, mon expérience sur plusieurs langages me fait fuir ce type d'écritures. Et ce jour, fatalement, arrivera. Ton travail semble sérieux, il ne sera pas jeté à la poubelle, donc il sera amené à évoluer. Et là, .

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

Discussions similaires

  1. [XL-2003] Limites techniques VBA : taille d'enum
    Par el_slapper dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 10/12/2012, 11h48
  2. taille de requete limitée ?
    Par richard038 dans le forum SQL
    Réponses: 10
    Dernier message: 04/07/2006, 22h22
  3. [EXCEL][VBA] Utilisation des formules Excel en VBA
    Par Amanck dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/12/2005, 15h08
  4. Taille de fichier limité ???
    Par vince26 dans le forum Langage
    Réponses: 4
    Dernier message: 29/08/2005, 17h39
  5. Taille des fichiers limitée à 4Go
    Par alain sayagh dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 13/06/2005, 17h58

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