Probleme solveur
mabdoul
-
mabdoul -
mabdoul -
Bonjour,
j'ai un petit probleme en vba.
j'ai testé ma fonction, elle marche trés bien sauf que j'aimerais
bien l'inserer dans une boucle.
et seulement quand j'insère ma fonction dans une boucle,
je vois que le solveur , modifie les valeurs prises par col
je m'explique:
quand je mets en commentaire le solveur,
col = 1, 2 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,23
par contre dès que j'enleve les commentaires,
col = 3 , 5, 7 ainsi de suite.
Sub fonds()
Dim fonds As Worksheet
Dim betas(1 To 1, 1 To 11) As Variant
'Dim betas As Worksheet
Dim par As Worksheet
Dim don As Worksheet
Dim resultat(1 To 50, 1 To 50)
Dim isin As Variant
Dim colfonds As Integer
Dim i As Integer
Dim nbfonds As Integer
'Dim betas(1 To 1, 1 To 11) As Variant
Dim col As Integer
Dim nbcolonnes As Integer
Dim ligne As Integer
Set fo = Worksheets("fonds")
Set par = Worksheets("parametres")
Set don = Worksheets("données1")
Set co = Worksheets("coef")
ligne = 5
col = 2
nbcolonnes = 1
While fo.Cells(ligne, col) <> ""
nbcolonnes = nbcolonnes + 1
col = col + 1
Wend
col = 2
nbfonds = nbcolonnes - 1
For i = 1 To nbfonds
isin = fo.Cells(ligne, col)
'colfonds = col
par.Cells(16, 2) = isin
For j = 1 To 11
betas(1, j) = 0
Next j
For j = 1 To 7
don.Cells(j, 2) = fo.Cells(j, col) 'colfonds
Next j
'MsgBox fo.Cells(7, colfonds)
'MsgBox don.Cells(7, 2)
For j = 8 To 529
don.Cells(j, 2) = fo.Cells(j, col) ' colfonds
Next j
Dim nb_variables As Integer ' ça correspond au nombre d'indices
'Set par = Worksheets("parametres")
nb_variables = 11
For j = 2 To nb_variables + 1
par.Cells(17, j) = ("betas(1," & (j - 1))
Next j
For j = 2 To nb_variables + 1
par.Cells(18, j) = 0
Next j
SendKeys "{TAB}{TAB}~", False
SolverOk SetCell:="$B$20", MaxMinVal:=2, ValueOf:="0", ByChange:= _
"$B$18:$L$18"
SolverSolve userfinish:=True
SolverFinish KeepFinal:=1
For j = 210 To 319
par.Cells(j - 186, 2) = don.Cells(j, 3)
Next j
resultat(i, 1) = fo.Cells(7, col)
'MsgBox col
col = col + 1
Next i
merci d'avance
j'ai un petit probleme en vba.
j'ai testé ma fonction, elle marche trés bien sauf que j'aimerais
bien l'inserer dans une boucle.
et seulement quand j'insère ma fonction dans une boucle,
je vois que le solveur , modifie les valeurs prises par col
je m'explique:
quand je mets en commentaire le solveur,
col = 1, 2 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,23
par contre dès que j'enleve les commentaires,
col = 3 , 5, 7 ainsi de suite.
Sub fonds()
Dim fonds As Worksheet
Dim betas(1 To 1, 1 To 11) As Variant
'Dim betas As Worksheet
Dim par As Worksheet
Dim don As Worksheet
Dim resultat(1 To 50, 1 To 50)
Dim isin As Variant
Dim colfonds As Integer
Dim i As Integer
Dim nbfonds As Integer
'Dim betas(1 To 1, 1 To 11) As Variant
Dim col As Integer
Dim nbcolonnes As Integer
Dim ligne As Integer
Set fo = Worksheets("fonds")
Set par = Worksheets("parametres")
Set don = Worksheets("données1")
Set co = Worksheets("coef")
ligne = 5
col = 2
nbcolonnes = 1
While fo.Cells(ligne, col) <> ""
nbcolonnes = nbcolonnes + 1
col = col + 1
Wend
col = 2
nbfonds = nbcolonnes - 1
For i = 1 To nbfonds
isin = fo.Cells(ligne, col)
'colfonds = col
par.Cells(16, 2) = isin
For j = 1 To 11
betas(1, j) = 0
Next j
For j = 1 To 7
don.Cells(j, 2) = fo.Cells(j, col) 'colfonds
Next j
'MsgBox fo.Cells(7, colfonds)
'MsgBox don.Cells(7, 2)
For j = 8 To 529
don.Cells(j, 2) = fo.Cells(j, col) ' colfonds
Next j
Dim nb_variables As Integer ' ça correspond au nombre d'indices
'Set par = Worksheets("parametres")
nb_variables = 11
For j = 2 To nb_variables + 1
par.Cells(17, j) = ("betas(1," & (j - 1))
Next j
For j = 2 To nb_variables + 1
par.Cells(18, j) = 0
Next j
SendKeys "{TAB}{TAB}~", False
SolverOk SetCell:="$B$20", MaxMinVal:=2, ValueOf:="0", ByChange:= _
"$B$18:$L$18"
SolverSolve userfinish:=True
SolverFinish KeepFinal:=1
For j = 210 To 319
par.Cells(j - 186, 2) = don.Cells(j, 3)
Next j
resultat(i, 1) = fo.Cells(7, col)
'MsgBox col
col = col + 1
Next i
merci d'avance
2 réponses
Je suppose que vous utiliser le même langage pour les différentes boucle et à un moment "ça se mélange".
Je n'ai plus Excel pour tester mais essayez d'insérer votre boucle dans une qui serait comme suit :
plages = votre selection
Set ZoneControlée = Range(plages)
For Each Cellule In ZoneControlée
' mettre votre boucle primaire
Next
Cordialement,
Migou
Je n'ai plus Excel pour tester mais essayez d'insérer votre boucle dans une qui serait comme suit :
plages = votre selection
Set ZoneControlée = Range(plages)
For Each Cellule In ZoneControlée
' mettre votre boucle primaire
Next
Cordialement,
Migou
J'oubliais, le truc le plus difficile de ce genre d'exercice est de trouver le bon moment pour mettre les variables à zéro. Par exemple si vous avez un ligne = 5 et col = 2, il faut le placer au bon moment. Par exemple :
plages = votre selection
ligne = 5
col = 2
Set ZoneControlée = Range(plages)
For Each Cellule In ZoneControlée
For j = 8 To 529
don.Cells(j, 2) = fo.Cells(j, col) ' colfonds
Next j
Next
Là, ça ne fonctionne pas parce que à chaque passage les valeurs ligne et colonne auront été multipliés par le nb de boucle... Il faut reprendre les variables en fin de boucle secondaire:
plages = votre selection
ligne = 5
col = 2
Set ZoneControlée = Range(plages)
For Each Cellule In ZoneControlée
For j = 8 To 529
don.Cells(j, 2) = fo.Cells(j, col) ' colfonds
Next j
ligne = 5
col = 2
Next
plages = votre selection
ligne = 5
col = 2
Set ZoneControlée = Range(plages)
For Each Cellule In ZoneControlée
For j = 8 To 529
don.Cells(j, 2) = fo.Cells(j, col) ' colfonds
Next j
Next
Là, ça ne fonctionne pas parce que à chaque passage les valeurs ligne et colonne auront été multipliés par le nb de boucle... Il faut reprendre les variables en fin de boucle secondaire:
plages = votre selection
ligne = 5
col = 2
Set ZoneControlée = Range(plages)
For Each Cellule In ZoneControlée
For j = 8 To 529
don.Cells(j, 2) = fo.Cells(j, col) ' colfonds
Next j
ligne = 5
col = 2
Next