Sequentieel gegevens invoeren voor Solver berekening?

Status
Niet open voor verdere reacties.

Ruken

Gebruiker
Lid geworden
8 jan 2015
Berichten
9
Beste mede programmeurs,

Ik heb een programmetje geschreven om het aantal actieve rijen te tellen en dat aantal zal gebruikt voor in de teller van een for-loop. Er wordt van blad2(de data) steeds een rij met waardes gekopieerd, dit wordt getransponeerd en in blad3(de machine) geplakt voor de berekening. Hiervoor wordt door middel van de Solver functie een optimale waarde gegenereerd. Vervolgens moet de optimale waarde in de gele vak komen te staan in blad2. De Solver moet wel aangevinkt wordt in Vba editor, hiervoor naar Extra==> Verwijzingen. Het programma kan er enkele minuten over doen om door de for-loop heen te komen.

Alleen loopt het steeds vast als het begint met de laatste iteratie. Ik heb zoveel dingen geprobeerd maar tevergeefs. Het begint nu echt te irriteren omdat je niet weet wat het probleem is. Ik hoop dat jullie hiermee kunnen helpen. Jullie hulp wordt zeer gewaardeerd!

Code:
Sub DeForecast()

    Dim i, j As Integer

    Worksheets("Blad2").Activate
    
    'Telt het aantal rijen
    mycount = Application.CountA(Range("A:A"))

    For i = 0 To mycount - 2

        Worksheets("Blad2").Activate
    
        Range(Cells(3 + i, 2), Cells(3 + i, 1).End(xlToRight)).Copy

        Worksheets("Blad3").Activate

        Cells(5, 3).PasteSpecial Transpose:=True

        x = SolverSolve(True)
    
        Range("F6").End(xlDown).Copy

        Cells(1, 17).PasteSpecial Paste:=xlPasteValues
        
        j = Cells(1, 17).Value
    
        Worksheets("Blad2").Cells(3 + i, 17) = j

    Next i

End Sub
 

Bijlagen

Laatst bewerkt:
Ik zou het -sneller- doen met:

Code:
Sub M_snb()
    sn = Blad2.Cells(1).CurrentRegion.Offset(2, 1).SpecialCells(2).Resize(, 17)
    
    For j = 1 To UBound(sn)
      Blad3.Cells(5, 3).Resize(UBound(sn, 2)) = Application.Transpose(Application.Index(sn, j))
      x = solversolver(True)
      sn(j, 17) = Blad3.Cells(Rows.Count, 6).End(xlUp).Value
    Next
    
    Blad2.Cells(1).CurrentRegion.Offset(2, 1).SpecialCells(2).Resize(, 17) = sn
End Sub
 
Heel erg bedankt snb, super!

x hoort x = SolverSolve(True) te zijn, maar dat terzijde.

Wat ik me afvraag snb, hoe kan ik dit dynamisch maken? Want er komt steeds meer data bij, zowel nieuwe artikelnamen(nieuwe rijen) en waardes(nieuwe kolommen).
De code staat loopt nu tot Resize(,17), maar moet met een variabele. Eigenlijk wil alles variabel hebben. Mijn oude code doet dit wel, maar blijft helaas vast steken. Enig idee hoe ik dit moet doen?
 
Kan met:
Code:
Sub M_snb()
    with Blad2.Cells(1).CurrentRegion.Offset(2, 1).SpecialCells(2)
      sn = .Resize(, .columns.count+1)
    end with
    
    For j = 1 To UBound(sn)
      Blad3.Cells(5, 3).Resize(UBound(sn, 2)) = Application.Transpose(Application.Index(sn, j))
      x = solversolver(True)
      sn(j, ubound(sn,2)) = Blad3.Cells(Rows.Count, 6).End(xlUp).Value
    Next
    
    Blad2.Cells(1).CurrentRegion.Offset(2, 1).SpecialCells(2).Resize(, ubound(sn,2)) = sn
End Sub
 
Laatst bewerkt:
Hartelijk dank snb.
Jou code is niet alleen complexer maar ook netter en sneller. Ik wil weten hoe ik de naam van topic kan veranderen zodat anderen ook profijt van kunnen hebben.
Daarna zet ik em op opgelost.
 
sequentieel gegevens invoeren voor solver berekening ?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan