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