VBA Automatisation Solver

Bonjour à tous,

J'ai réalisé un processus VBA utilisant le solver pour optimiser des résultats en colonne C. J'aimerais automatiser les paramètres du solver de telle sorte que les paramètres "ByChange:="$C$2:$C$21"" et "Range("C2:C21").Value" ne soient pas fixer sur "C21" mais jusque la dernière ligne utilisé en colonne A. Exemple: si la colonne A a des données sur "A2:A35" alors j'aimerais que dès que je lance ma macro Solver il distingue automatiquement : "ByChange:="$C$2:$C$35"" et "Range("C2:C35").Value". Tous les autres paramètres ne bougent pas.

Voici mon code Solver:

Private Sub solversimul()
    vd = Sheets("Frontier").Range("G4") 'Expected return
    ns = Sheets("Frontier").Range("G9") 'Nombre de simulation
    step = Sheets("Frontier").Range("G10") 'Step entre chaque simulation
    DernLigne = Sheets("Frontier").Range("A" & Rows.Count).End(xlUp).Row

    i = 1
    With Sheets("Frontier").Range("J9")
        Do While i < ns
            Sheets("Frontier").Range("G4") = vd
            Sheets("Frontier").Range("C2:C21").Value = 0

'Solver 
            SolverOk SetCell:="$G$6", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$2:$C$21", _
            Engine:=1, EngineDesc:="GRG Nonlinear"
            SolverSolve True
            .Cells(1, i) = vd
            .Cells(2, i) = Range("G5")
            .Cells(3, i).Resize(20, 1).Value = Range("C2:C21").Value
            vd = vd + step
            i = i + 1
            DoEvents
        Loop
    End With
End Sub

Merci !

bonjour,

essaie ceci (non testé)

Private Sub solversimul()
    vd = Sheets("Frontier").Range("G4") 'Expected return
    ns = Sheets("Frontier").Range("G9") 'Nombre de simulation
    step = Sheets("Frontier").Range("G10") 'Step entre chaque simulation
    dernligne = Sheets("Frontier").Range("A" & Rows.Count).End(xlUp).Row

    i = 1
    With Sheets("Frontier").Range("J9")
        Do While i < ns
            Sheets("Frontier").Range("G4") = vd
            Sheets("Frontier").Range("C2:C" & dernligne).Value = 0

'Solver
            SolverOk SetCell:="$G$6", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$2:$C$" & dernligne, _
            Engine:=1, EngineDesc:="GRG Nonlinear"
            SolverSolve True
            .Cells(1, i) = vd
            .Cells(2, i) = Range("G5")
            .Cells(3, i).Resize(dernligne - 1, 1).Value = Range("C2:C" & dernligne).Value
            vd = vd + step
            i = i + 1
            DoEvents
        Loop
    End With
End Sub
Rechercher des sujets similaires à "vba automatisation solver"