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 longue pour FORMULAR1C1


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut Formule trop longue pour FORMULAR1C1
    Bonjour,

    Mon problème est le suivant : J'ai une formule LIREDONNEESTABCROISDYNAMIQUE très longue contenue dans un cellule texte.
    Je veux l'insérer en VBA dans une cellule sauf que la limite est de 255 cacaractères.

    J'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Formule as string
    Formule = "="
    For l = 0 To Round((Len(Cells(Cell.Row, Cell.Column + 3).Value) / 250) + 0.5, 0) - 1
    Formule = Formule & _
    Mid(Cells(Cell.Row, Cell.Column + 3).Value, 1 + l * 250, 250 + l * 250)           
    Next l
     
    Cells(NumeroCellIni, 6 + k).FormulaR1C1Local = Formule
    Mais cela ne fonctionne pas ... J'ai une erreur système

    Pourriez-vous m'aider svp ?
    Merci de votre aide !

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    et si tu la mets dans un nom et =nom dans la cellule, même limitation ?
    eric

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    Euh je ne comprends pas très bien ta réponse.
    Tu peux me l'écrire un VBA stp ?
    Dans un nom ? Tu veux parler de quoi comme variable ?

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Je ne comprends déjà pas la nécessité d'une boucle pour dresser une chaîne de caractères égale à tout ou partie d'une chaîne de caractères spécifiée (et ce : à compter du 1er caractère)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    En fait le problème est que ma formule est trop longue.
    J'ai utilisé l'enregistreur de macro vba pour voir un peu comment il traitait ce cas et il le fait de cette facon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FormulaR1C1 = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" & _
    "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" & _
    "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" & _
    etc
    J'ai donc voulu recréer cela avant de l'injecter dans ma .FormulaR1C1Local = Formule
    Mais cela ne fonctionne pas quand même

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
        Dim i As Long, f As String
        For i = 1 To 208
            f = f & "+$A$1+$A$2"
        Next i
        Names.Add "ma_formule", "=" & f 'formule dans le nom
        Debug.Print Len(Names("ma_formule").RefersTo) 'longueur "ma_formule" = 4993
        [B1].Formula = "=ma_formule" 'résultat formule dans cellule
    End Sub
    La longueur max est environ 5000 car.
    Sinon oui, il serait intéressant de voir le début de ta formule (résultat de 2-3 boucles) et que tu expliques ce que tu veux obtenir, elle est peut-être simplifiable avec d'autres fonctions.
    eric

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    J'ai donc voulu recréer cela avant de l'injecter dans ma .FormulaR1C1Local = Formule
    Mais cela ne fonctionne pas quand même
    Affecter à une variable2 le contenu identique d'une variable1 pour utiliser variable2 à la place de variable1 est un "sport" que je ne comprends pas et qui n'a AUCUNE utilité. Tu peux faire autant de clones que tu veux d'une chose, y compris des clones de clones, le dernier clone sera bien évidemment identique au premier !
    Je ne comprends pas que cela puisse t'échapper !
    Et je sors ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    Merci eriiic je vais tester cela.
    Ma formule est juste un LIRETABLEAUCROISEDYNAMIQUE mais sur un énorme TCD donc la formule est longue.
    Je vais rajouter ensuite des variables dans la formules mais à part ça je ne pense pas qu'il y ait de simplification

    unparia : C'était juste par désespoir que j'ai essayé cela ... Je m'en doutais fortement

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    J'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                            Formule = Cells(Cell.Row, Cell.Column + 3).Value
                            Names.Add "ma_formule", "=" & Formule 'formule dans le nom
                            Debug.Print Len(Names("ma_formule").RefersTo) 'longueur "ma_formule" = 4993
    Sauf que j'ai un problème sur le add. Je pense que c'est encore le problème de longueur texte.


    La solution serait peut être de faire tourner ma formule dans VBA et d'injecter ensuite le résultat dans Excel.
    Comment peut-on faire cela svp ?

  10. #10
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    Super merci !

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    Alors cela fonctionne mais pour automatiser mon système cela serait plus simple de pouvoir calculer la formule sous VBA et injecter la valeur dans une cellule sélectionnée.
    Cela est possible svp ?

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    En fait la solution qui convient le mieux à mon problème est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("D17").Value = Replace(Range("F10").Formula, "[Month Year].&[2017]&[3]", "[Month Year].&[2017]&[4]")
    J'utilise l'objet Range.Formula que je copie directement dans ma cellule avec un changement des variables par un replace.

    Au lieu de faire formule => texte => formule, je fais formule => formule ce qui marche parfaitement.

    Merci à tous pour votre aide !

  14. #14
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    le 20/04 :
    Sinon oui, il serait intéressant de voir le début de ta formule (résultat de 2-3 boucles) et que tu expliques ce que tu veux obtenir, elle est peut-être simplifiable avec d'autres fonctions.
    Tu aurais dû expliquer ta problématique
    eric

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

Discussions similaires

  1. [Requête SQL]Trop longue pour une ligne
    Par jbulysse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/07/2008, 14h27
  2. Formule trop longue
    Par fomy dans le forum Excel
    Réponses: 6
    Dernier message: 07/11/2007, 17h41
  3. chaine trop longue pour être indexée
    Par ctobini dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 04/10/2007, 10h36
  4. [Formule] Optimisation (formule trop longue)
    Par Alqualonde dans le forum Excel
    Réponses: 6
    Dernier message: 21/05/2007, 17h08
  5. chaine trop longue pour envoyer en socket?
    Par jeje.r dans le forum C++Builder
    Réponses: 10
    Dernier message: 27/06/2003, 16h36

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