VBA et solveur

altec -  
ccm81 Messages postés 11033 Statut Membre -
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

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  2. altec
     
    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