Solveur VBA
Bonsoir Messieurs,
Je me permets de vous déranger car j'ai un petit soucis avec mon solveur.
Comme vous pourrez le voir ci-joint, mon solveur tourne correctement cependant il ne change pas les valeurs des contraintes.
Est-ce que quelqu'un aurait la gentillesse de me dire pourquoi?
D'avance merci et bonne soirée
Bonjour,
tu n'as pas de formule en L10, il n'a rien à calculer.
Il en faut une qui utilise L3:L4 (indirectement si tu veux)
Essaie déjà de le faire marcher en manuel, après tu l'automatiseras en vba si besoin.
eric
Bonjour Eric,
Merci pour ta rapide réponse.
Effectivement toutes les formules sont dans le code :
Cette partie du code est le résultat de la cellule L10
MADMOY = .Application.Average(.Range("F7:F50"))
Sheets("Holts").Range("L10").Value = MADMOY
et cette partie du code est le "range("F7:F50")" du code précédent
'Calcul du forecast
For kkk = 5 To 5
For ligne = 7 To NBLG + 1
Sheets("Holts").Range("e5") = "Forecast"
forecast = Cells(ligne - 1, kkk - 2) + Cells(ligne - 1, kkk - 1)
Sheets("Holts").Cells(ligne, kkk) = forecast
Next
Next
J'espère que cela taide
Mil merci pour ton aide
Bonne journée
Bonjour,
Je ne pratique pas suffisamment le solver en vba pour t'aider beaucoup.
D'autant plus qu'on ne sait pas trop dans quel ordre tu enchaines tes différentes procédures.
Si tu dis que la formule soit dans le code est suffisant pour que ça fonctionne je veux bien te croire.
Un lien intéressant et complet sur le solveur en vba : http://www.solver.com/content/basic-solver-vba-functions
Si tu permets une digression qui n'a rien à voir avec ton pb, c'est ta proc Donneeholts() qui me pique les yeux avec ses 21 if imbriqués.
Tu n'indentes pas ton code (erreur à mon avis) mais si tu le faisais ça va loin à droite.
Utilises plutôt elseif sur ce modèle :
Sub Donneeholts2()
Sheets("Holts").Range("C6:i50").ClearContents
If Range("A1") = "Indice SMI" Then
Range("A4:b50") = Sheets("Prix annuels").Range("A3:B50").Value
ElseIf Range("A1") = "ABB N (SWL)" Then
Range("A4:b50") = Sheets("Prix annuels").Range("c3:d50").Value
'ElseIf Range("A1") = ... Then ....
'ElseIf Range("A1") = ... Then ....
Else
Range("A4:b50") = "nok"
End If
End SubPlus clair je trouve, et un seul else.
Et tant qu'à faire autant rechercher le titre en ligne 3 et copier la plage s'il est trouvé.
Et le faire automatiquement sur changement de A1.
A coller dans le module Feuil2 :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Target.Address <> "$A$1" Then Exit Sub
Application.EnableEvents = False
Range("A6:i50").ClearContents
With Sheets("Prix annuels")
' recherche titre
Set c = .Rows(3).Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then Range("A4:b50") = c.Resize(47, 3).Value ' si titre trouvé
End With
Application.EnableEvents = True
End SubEn 8 lignes tu as tout, et qui reste valable même si tu modifies les libellés, ou en ajoute/supprime.
A tester bien sûr, je ne l'ai pas fait car je ne sais pas comment tourne ton bouzin.
eric
Mil merci pour ton implication et ta collaboration.
Le fait est que je fais ce travail pour un mémoire que je dois rendre.
Mes bases en VBA sont très basiques donc j'ai essayé de faire ça avec les moyens du bord si j'utilise ton code on va tout de suite voir que ça ne vient pas de moi
Merci pour ton amélioration du code et je vais tenter de trouver une solution a mon solveur!
Bonne journée