Macro avec SUM sous forme de chaîne de caractères

Bonjour,

Merci d'avance à tous ceux qui voudront bien lire mon post.

Je travail avec SQL server. Via SSIS, je crée des chaînes, que je stock à des endroits précis dans une feuille excel.

Ces chaînes sont destinées à être évaluées par Excel, et sont de ce genre la :

"=SUM(I" & cell.Row & ":I" & cell.Row+4 & ")"

Dans le fichier excel, j'ai une macro avec une boucle :

For Each cell In myRange

If Left(cell.Value, 5) = """=SUM" Then cell.Formula = cell.Value

Next cell

Je souhaite donc que le SUM soit évalué comme une formule, et soit stocké comme une SOMME.

Cela fonctionne parfaitement, lorsque je remplace cell.Value par "=SUM(A1:A10)".

J'imagine donc qu'il y a un problème avec mes chaînes, mais je n'arrive pas à en identifier la source.

Avez-vous une idée de ce qui cause mon problème?

Cordialement,

tu dois doubler tes "

Merci pour ta réponse si rapide =)

J'ai essayé de doubler les guillemets:

  • Intérieurs seulement : "=SUM(I"" & cell.Row & "":I"" & cell.Row+4 & "")"
  • Toutes les guillemets ! ""=SUM(I"" & cell.Row & "":I"" & cell.Row+4 & "")""

Ca ne fonctionne pas. Ai-je raté quelque chose?

J'ai cependant pu me rendre compte de quelque chose de bizarre.

Lorsque je fais ceci :

If cell.Value ="33333" Then cell.Formula = "=SUM(I" & cell.Row & ":I" & cell.Row+4 & ")"

La formule est bien prise en compte, je retrouve bien ma somme.

Mais quand je fais

If cell.Value ="33333" Then cell.Formula = cell.Value (cell.Value étant égale à la chaîne du dessus en gras)

La formule n'est pas prise en compte

Comment cela est-il possible ?

Cordialement,

debug.print cell.value

Euhh Merci ^^'

D'après ce que j'ai pu voir dans la doc, Debug.Print permet de debugger ma macro, et de voir quelle est la valeur de ma variable

Ma variable me retourne bien ce que j'attendais : "=SUM(I" & cell.Row & ":I" & cell.Row+4 & ")"

Je l'avais déjà testé d'une autre manière, cela m'évitera de copier le contenu dans une autre cellule. Merci.

Je n'ai peut-être pas bien compris pourquoi tu m'avais indiquer cette méthode, mais je n'ai pas eu d'explication...

Je reste dans l'attente d'une proposition supplémentaire siwouplait =)

Cordialement,

Si les deux chaines sont les mêmes... Je ne vois pas ou est le problèeme, partage ton fichier

Bonjour,

Eh bien, je ne vois pas non plus d'ou vient le problème...

Je ne peux pas partager certaines données, alors j'ai reproduit mon souci dans un autre fichier excel ci-joint.

Lorsque je lance la macro, le contenu de la cellule A1 qui contient 33333 est remplacé par l'évaluation de la formule.

Mais la cellule B1, ou je fais cell.Formula =cell.Value n'est remplacé que par ma chaine de caractère, non évaluée.

La solution est peut-être évidente... Mais je n'ai pas beaucoup d'expérience sous Excel, je m'en remets donc à vous.

Cordialement,

13fichier.xlsm (14.99 Ko)

Bonjour,

Je poste pour relancer le sujet ^^'

Je ne trouve aucune solution...

Cordialement,

Bonjour à tous =)

Une petite avancée dans la recherche de la solution.

J'ai décidé de reprendre depuis le début.

J'ai désormais une chaine de caractère qui ressemble à cela :

="=SOMME(P" & LIGNE() & ":AA" & LIGNE() &")"

Lorsque je la saisie dans la cellule B4 de ma feuille (Par exemple), et que j'appuie sur la touche entrée, je peux voir que la valeur de la cellule est devenu :

=SOMME(P4:AA4)

La formalisation est exactement la même, que celle d'une somme que j'aurai tapé normalement dans la cellule.

Seulement, la mienne n'est pas évaluée. Elle est reconnue, mais non évaluée.

D'où peut bien venu le problème?

Le fichier est joint pour que vous puissiez voir.

Cordialement,

14test1.xlsx (9.13 Ko)

="=SOMME(P" & LIGNE() & ":AA" & LIGNE() &")"

Voilà ce que contient ta cellule.

Je ne comprends pas d'où vient le problème pour ton sujet et j'ai passé une vingtaine de minutes à faire des tests.

Tu devrais utuliser la commande evaluate("=SOMME(P" & LIGNE() & ":AA" & LIGNE() &")")

Cela devrait marcher

Eh bien, je ne comprends pas pourquoi mon expression n'est pas évaluée!

Comme je le disais plus haut, j'utilise SSIS pour renseigner la valeurs de certaines cellules de manières dynamique dans excel.

Ceci : ="=SOMME(P" & LIGNE() & ":AA" & LIGNE() &")" devrait à mon sens, être évalué par Excel, et devenir un =SOMME(P4:AA4) dans le cas ou je la tape dans la cellule B5.

Tout comme ceci : "=SUM(I" & cell.Row & ":I" & cell.Row+4 & ")" devrait être évalué par =SOMME(I5:I9) si je l'utilise dans une macro.

Pour la seconde expression, je l'ai déjà dit.

Si je fais cell.Value = "=SUM(I" & cell.Row & ":I" & cell.Row+4 & ")". En dur, cette expression est évaluée.

MAIS, si ma chaine de caractère (ci-dessus) est contenue dans une cellule, et que dans ma macro je fais:

cell.Formula = cell.Value qui équivaut à faire cell.Formula = "=SUM(I" & cell.Row & ":I" & cell.Row+4 & ")". Ma chaine ne sera jamais évaluée !

J'aimerai qu'elle le soit. Pourquoi est-elle évaluée quand je fais:

cell.Formula = "=SUM(I" & cell.Row & ":I" & cell.Row+4 & ")"

Mais pas quand je fais :

cell.Formula = cell.Value.

Qu'est ce qui fait que dans le cas qui m'intéresse, cela ne marche pas, alors que dans l'autre oui.

Le test montre que ma formule n'est pas mauvaise. Mais ca ne passe pas !

Quelle est la différence?

J'ai essayé la formule que tu as mis. Cela ne donne rien en direct dans ma feuille Excel. Cela ne donne rien non plus dans ma macro.

Cordialement

Que dans une c'est une chaine de caractères et dans l'autre une jonction de chaines de caractères...

Si dans ta cellule tu auras :

""=SUM(I" & cell.Row & ":I" & cell.Row+4 & ")""

Alors qu'en brut dans le code tu as:

"=SUM(I" & cell.Row & ":I" & cell.Row+4 & ")" et donc cell.row sont évaluées..

Bonjour =)

Merci pour ta réponse !

Donc, j'ai exactement la même formule dans les deux cas, mais dans le second cas (celui ou Excel va chercher la formule dans ma cellule) Excel rajoute une double quote de chaque côté c'est ca?

Du coup je me retrouve avec une grosse chaine de caractère toute simple, de laquelle il est impossible d'évaluer quoi que ce soit.

Je crois comprendre.

Dans ce cas là, comment faire pour qu'elle soit évaluée comme je le souhaite?

J'ai essayé d'enlever les quotes que j'avais moi-meme mis, en espérant qu'excel ne me dise rien sur le construction de ma chaine.

Je fais donc :

cell.Formula = Right(Left(cell.Formula, Len(cell.Formula) - 1), Len(cell.Formula) - 2)

Excel me donne une erreur, ce qui est compréhensible. En effet, quand je fais un Debug.Print du petit bout de code ci-dessus, Excel affiche : =SUM(I" & cell.Row & ":I" & cell.Row + 4 & ")

Je ne vois pas trop comment faire...

Merci encore pour votre aide,

Cordialement,

J'ai déjà tenté de modifier la chaîne de caractères et je ne suis pas arrivé à le faire, une solution serait d'évaluer tes formules avant puis d'insérer les calculs, mais ne sachant pas comment tu requêtes ta base qui contient tes formules, ni le but et le processus de création de ces formules je ne saurai t'aider.

Bonjour =)

J'ai appliqué ton conseil, et j'ai décidé de modifier mon traitement.

Au lieu de créer le calcul avant, et de l'évaluer ensuite, je créer le calcul sous excel, en fonction de paramètres séparés de ":"

Avec un simple split, il est très facile de refaire le calcul sous forme de chaine directement sous Excel.

Ca marche parfaitement désormais.

Merci beaucoup à tous ceux qui auront pris la peine de me lire et de me conseiller.

C'est cool =)

Cordialement,

Je ne comprends toujours pas pourquoi tes chaines sont interprétées de la sorte. Bien joué.

Rechercher des sujets similaires à "macro sum forme chaine caracteres"