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

42holt-s-vba.xlsm (44.84 Ko)

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 Sub

Plus 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 Sub

En 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

Rechercher des sujets similaires à "solveur vba"