VBA et solveur

Fermé
altec - 12 mars 2011 à 18:49
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 - 13 mars 2011 à 18:05
Salut,

Je souhaiterai résoudre sous VBA une équation du type : sum([X_i]^k_i,i=0..n) = 0.

Ce que j'ai fait sous VBA :
afficher chaque [X_i]^k_i
faire la somme grâce à une variable incrémentée à chaque fois
et à l'aide du solveur, résoudre l'équation

Malheureusement, il m'affiche toujours 0 comme solution, car dans la case où j'affiche la somme, j'ai un nombre et pas une formule faisant intervenir la cellule cible !

J'ai essayé de laisser la variable par exemple en notant "A1" au lieu Range("A1").Value, avec l'espoir, mais il m'affiche "erreur de type" lors de la compilation =/

Je ne sais pas comment faire, peut-être avez-vous une solution ?
Merci.

3 réponses

ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
12 mars 2011 à 22:02
bonsoir

la cellule cible doit contenir une formule, il faut donc utiliser un
Range(cellule_cible).formula = la_formule

où la_formule est fabriquée comme une chaine de caracteres dépendant des cellules et des opérations concernées
par exemple
les Xi en A3, A4
les ki en B3, B4
la cellule cible en C3

Const lideb = 3
Const nbli = 2
Dim f As String
Dim li As Long
  f = "="
  For li = lideb To lideb + nbli - 1
    f = f & "A" & li & "^B" & li & "+"
  Next li
  Range("C3").Formula = Left(f, Len(f) - 1)


si ça ne correspond pas à ce que tu veux, il vaut mieux nous donner ton code ou mieux, envoyer le fichier (format excel 2003) sur cijoint.fr

bon courage
0
Salut,

Merci pour ta réponse. Peut-être ai-je mal compris ce que tu voulais dire, mais en remplaçant le .Value par .Formula pour garder le nom de la variable dans mes calculs, j'ai toujours cette incompatibilité de type lors du débogage.

Voici mon code :

For j = 4 To k
ValAct = ValAct + Sheets("Feuil1").Cells(j, 6).Value / (1 + Sheets("Feuil1").Range("B9").Formula) ^ Sheets("Feuil1").Cells(j, 4).Value
Sheets("Feuil1").Cells(j, 9).Value = ValAct


[En gros je fais la somme des F_k/(1+y)^k et j'aimerai garder y en littéral et non avoir la valeur de y]

Next j


SolverOk SetCell:="Cells(k, 9).Value", MaxMinVal:=3, ValueOf:="$F$3", ByChange:="$B$9"
SolverSolve
0
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
13 mars 2011 à 18:05
re
re
je cois que tu devrais aller jeter un oeil sur le site de microsoft pour une utilisation du solveur depuis vba
https://support.microsoft.com/en-us/help/843304
bon courage
0