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 :

Passage de formule d'un tableau vers un Range [XL-2010]


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
    Développeur informatique
    Inscrit en
    Août 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 38
    Par défaut Passage de formule d'un tableau vers un Range
    Bonjour,

    Je passe des "formules" simple du style "=D4+F4" d'un tableau de String vers un Range que j'ai préalablement initialisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monRange.FormulaR1C1 = monTab(i).valeurs     ' Valeurs étant un tableau de String
    Lorsque je passe cette ligne, ça me met dans monRange et dans chaque cellule concernées les formules du style " '=D4+F4 " (sans les espaces et les 2 " bien sur)

    VBA me rajoute le " ' " alors que je ne l'ai pas mis lorsque j'ai construis mon tableau.
    Du coup Excel croit que c'est du texte et non une formule.

    Quelqu'un peut il me dire pourquoi j'ai ce comportement ?
    Et comment faire pour ne plus avoir ce problème ?

    Pour info, je n'ai pas les cellules forcées en "Texte" elles sont en "Standard"

    Merci d'avance pour vos réponses

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 197
    Par défaut
    Bonjour,

    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            monRange.Formula = monTab(i).valeurs
    pour voir.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 38
    Par défaut
    Déjà essayé sans succès.
    Par contre cela ne me met pas la simple cote

    Si je fait une "=SOMME(D4;F4)" cela s'affiche comme une string mais si j'édite la cellule sans la modifier cela me fait le calcul lorsque je lâche le focus de la cellule édité

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    c'est quoi la propriété .valeurs d'un Tableau de String ?

    Je savais pas qu'il y avait du français dans le VBA
    Ni même qu'un tableau de string avait une telle propriété


    j'ai aucun souci avec ça de mon côté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub toto()
    Dim MonTab(0) As String
        MonTab(0) = "=D4+F4"
     
    Dim MonRange As Range
    Set MonRange = Range("A4")
     
        MonRange.Formula = MonTab(0)
    End Sub
    Sans voir tes données, je ne peux que t'orienter sur une utilisation correcte de FormulaR1C1 sans besoin d'utiliser une variable tableau si j'ai bien compris ce que tu fais
    Tu as remplis un tableau avec pleins de formules identiques (genre "=Dx + Fx") pour ensuite les appliquer sur une la colonne Y des x lignes ?



    Je visualise mal la raison pour laquelle tu as rempli un tableau de formules, visiblement identiques, pour ensuite les appliquer sur une colonne

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 38
    Par défaut
    Merci pour ta réponse joe

    En fait "valeurs" n'est pas une propriété mais un tableau qui se trouve lui même dans un tableau.

    Les formules dans chaque item ne sont pas identiques mais toutes de la forme : cellule A + cellule B + .... (le nombre de cellule à ajouter est variable)

    Mon problème du jour, c'est de générer 23 formules (ou aucune ne récupère les même valeurs) sur une ligne et cela sur plus de 1000 lignes (Je ne connais pas le nombre de ligne à l'avance)

    Le fait de passer par un tableau me semblait plus rapide.
    Le but étant d'éviter de parcourir tous les indices du sous tableau x fois .
    Apparemment cela fonctionne mais ,car il y a un mais, mes formules ne sont pas reconnues comme telles mais comme des String.

    Et c'est pareil, si je le fait par l'indice comme le montre ton exemple. A la différence près que si j'édite à la main la cellule et que j'en sors sans rien changé alors là, c'est reconnu comme une formule .
    Bien sur, je ne peux pas faire ça pour en moyenne plus de 23 000 cellules.

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour, bonjour !

    Comme il n'y a aucune difficulté pour directement affecter des formules d'une variable tableau dans
    une plage de cellules, une ligne de code suffisant, alors la méthode est fausse ou ce sont les formules !

    Évidemment si les formules sont en français alors cela ne peut fonctionner avec Formula réservée
    à la version interne native en anglais, comme c'est pourtant indiqué dans l'aide VBA !
    Dans ce cas, c'est la propriété FormulaLocal … Encore faut-il la plage de cellules non formatée en texte !

    Voilà, voilà !

    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

  7. #7
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par dan34 Voir le message
    En fait "valeurs" n'est pas une propriété mais un tableau qui se trouve lui même dans un tableau.
    Bonjour,

    je vais peut être dire une bêtise, mais quand j'utilise des tableaux dans des tableaux, je n'ai jamais écrit du code comme ça pour manipuler le "sous-tableau"
    je ne dis pas que ton écriture est fausse du coup, juste que je ne l'avais jamais vue.

    voici comment j'ai toujours manipulé, en cumulant les indices de tableaux les uns à la suite des autres :

    dans cet exemple, on va écrire la formule "=Dx+Fx" sur les lignes allant de 2 à 50, sur la colonne C
    en utilisant la propriété .FormulaR1C1 qui va permettre, en une seule passe, d'appliquer la formule sur toutes les lignes

    Bien sûr, cet exemple n'avait pas besoin d'un tableau père et d'un tableau enfant, on aurait pu immédiatement utiliser le String de la formule ... mais on ne sait toujours pas grand chose sur la structure exacte de toutes tes formules et s'il y a nécessité de passer par un tableau de formules (voir la fin de mon précédent message)

    Donc je suis aveuglément la méthode que tu cherches à appliquer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub toto()
    Dim TableauPere(0)                ' il contiendra le sous tableau
    Dim TableauEnfant(0) As String    ' le tableau avec la formule en référence relative
    TableauEnfant(0) = "=RC[1]+RC[3]" ' =Dx + Fx
    TableauPere(0) = TableauEnfant()  ' on y met le tableau enfant
     
    ' le premier (0) indique qu'on prend le premier élément du tableau père
    ' le second  (0) indique qu'on prend le premier élément du tableau enfant
    Range("C2", "C50").FormulaR1C1 = TableauPere(0)(0)
     
    End Sub

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/07/2010, 12h43
  2. [Excel] Exporter un tableau vers excel
    Par legillou dans le forum Documents
    Réponses: 8
    Dernier message: 08/02/2006, 15h37
  3. Passage en parametre d'un tableau
    Par hak5 dans le forum C
    Réponses: 3
    Dernier message: 13/01/2006, 12h32
  4. Réponses: 3
    Dernier message: 09/01/2006, 10h44
  5. Réponses: 13
    Dernier message: 13/10/2005, 17h03

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