Probleme solveur

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

2 réponses

Migou76
 
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
0
Migou76
 
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
0
mabdoul
 
merci pour votre aide.
j'ai avancé pas mal avancé pour le remplissage.
l'à ou j'ai du mal , c'est quand je met le solveur
dans la boucle.
la valeur de col change
0