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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 125
    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 125
    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

+ 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