Professional Documents
Culture Documents
DESENVOLVIMENTO DE UMA INTERFACE VBA PARA A PROGRAMO MATEMTICA DA PRODUO UTILIZANDO PROGRAMAO LINEAR
Lorena
2012
Desenvolvimento de uma interface VBA para a programao matemtica de produo utilizando programao linear
Lorena
2012
AGRADECIMENTOS
Primeiramente a Deus, por me conceder sade, sabedoria, f e perseverana para a concluso do meu curso.
Aos meus pais, Edna e lcio, por toda pacincia, amor, apoio e suporte
para a concluso da graduao.
Dayane, por todo seu amor, carinho e companheirismo durante esses
quatro anos inesquecveis ao seu lado.
Ao meu orientador Prof. Dr. Domingos Svio Giordani, pela confiana,
exemplo de profissional, e por acreditar neste trabalho.
Aos meus familiares e amigos, por todo apoio e reconhecimento, em especial minha irm Gabriela e meu cunhado Diego que sempre me apoiaram e me
serviram de exemplo de f e amor.
Aos grandes amigos da banda LHopital: Tlio, Taynara, Dayane, Martini
e Tales pela grande amizade e momentos nicos que ficaro eternamente gravados na memria.
Aos atuais e antigos companheiros e amigos de repblica, pelo convvio e
momentos de descontrao inigualveis ao longo destes anos de graduao.
Escola de Engenharia de Lorena, pela oportunidade de realizao do
Curso de Engenharia Qumica.
A todos os colegas e professores de graduao, pelo convvio e aprendizado.
EPGRAFE
Cora Coralina
Pedro, G. A. Desenvolvimento de uma interface VBA para a programao matemtica da produo utilizando programao linear. 2012. 63f. Trabalho de
Concluso de Curso (Graduao em Engenharia Qumica), Universidade de So
Paulo, Lorena, 2012.
RESUMO
Este trabalho dedica-se ao desenvolvimento de uma interface computacional para a resoluo de problemas envolvidos com a programao da produo
em sistemas produtivos, com o objetivo de auxiliar o processo de tomada de deciso dentro de pequenas empresas. Visto a dificuldade das pequenas empresas
em permanecer no mercado, o uso de ferramentas de auxlio na produo um
diferencial para seu estabelecimento no mercado atual. Um mtodo para a abordagem de problemas de programao da produo trata-los como um problema
de Programao Linear e resolv-los usando programao matemtica. Para
atender proposta do trabalho, foi feito um estudo na literatura no qual se notou o
grande crescimento no uso de softwares para o planejamento de produo, em
especial o Solver. Tambm, foi elabora uma estrutura lgica para o desenvolvimento do modelo por parte do usurio do aplicativo construdo. Por fim, foi desenvolvida uma planilha eletrnica no Microsoft Excel com interface amigvel feita em
Visual Basic for Applications para a realizao das macros nas quais a resoluo
do problema feita pelo suplemento Solver do Excel. O desempenho das interfaces foi satisfatrio, suas rotinas e execues agiram como o esperado, alm de
fornecer dados comparveis aos da literatura. O aplicativo desenvolvido neste
trabalho atende s expectativas das pequenas empresas, por ser um aplicativo
eficaz ao auxlio na tomada de deciso e sem custos de aquisio e implantao.
Pedro, G. A. Desenvolvimento de uma interface VBA para a programao matemtica da produo utilizando programao linear. 2012. 63f. Trabalho de
Concluso de Curso (Graduao em Engenharia Qumica), Universidade de So
Paulo, Lorena, 2012.
ABSTRACT
This work is dedicated to the development of an interface for solving computational problems involved on the production scheduling in production systems,
in order to aid the process of decision in small businesses. Because of the difficulty of the small businesses to maintain themselves in the market, the use of tools to
aid in the production can make the difference for their establishment in the current
market. One method for addressing problems of production scheduling is to treat
them as a Linear Programming problem and solving them using mathematical
programming. To reach the proposed work, it was done a study in the literature in
which it could be noted the increasing use of software for production planning, in
particular Solver. It was also developed a logical framework for the development of
the model by the user of the application. Finally, It was developed a user-friendly
interface to the spreadsheet in Microsoft Excel, it was done in Visual Basic for Applications. The performance of the interface was satisfactory, their routines and
plays acted as expected, and provided data comparable with those in the literature. The application developed in this work meets the expectations of small businesses, being an effective application to aid in decision making with no cost of acquisition and deployment.
Keywords: Excel spreadsheets, Production Scheduling, Linear Programming, Decision Support Systems.
LISTA DE FIGURAS
LISTA DE TABELAS
LISTA DE QUADROS
SUMRIO
1.
INTRODUO ............................................................................................. 13
DESENVOLVIMENTO .................................................................................. 28
CONCLUSES ............................................................................................ 51
13
1.INTRODUO
1.1. Justificativa
Nos dias atuais a competitividade define a permanncia de uma empresa
no mercado. Na busca por diferenciais competitivos, uma produo de qualidade
e de baixo custo um grande diferencial entre empresas, para as quais a programao da produo se torna uma ferramenta essencial. Para isto as empresas
necessitam adotar estratgias com relao metodologia de planejamento e controle da programao (VIEIRA, et al., 2011). Sendo assim, a programao da produo promove melhorias quanto ao uso de matrias primas e produtividade de
uma empresa, portanto, mantendo-a competitiva no mercado atual.
Muitos so os fatores que podem influenciar a tomada de deciso dos gerentes. Esses tomadores de decises vm se deparando com problemas de decises conflitantes: minimizar custos de produo frente escassez de recursos
produtivos e o crescimento das exigncias do mercado (JNIOR; SILVA, 2005).
A soluo de um problema de programao da produo possvel se ele
reunir todas as limitaes de recursos, restries de fabricao e necessidades
impostas do produto (POLON, 2010). A programao linear pode ser aplicada
com resultados satisfatrios otimizando os recursos disponveis, maximizando
resultados ou minimizando custos.
O processo de tomada de deciso de quando, onde, o que e como
produzir de modo efetivo pode ser demorado visto o grande volume de informaes necessrias. Assim, a programao linear uma ferramenta usada para encontrar a melhor alternativa que atenda os vrios objetivos da tomada de deciso
(PEKNY,1998). BISPO (1998) afirma que, quando o tomador de decises possui
14
15
Estabelecer o modelo matemtico que seja ajustvel aos interesses do tomador de deciso baseado em programao linear;
16
2.REVISO DA LITERATURA
Portanto a programao da produo uma funo que consiste em planejar as operaes que necessitam ser predeterminadas e executadas. Para
GITOTTI; NISHIMURA e MESQUITA (2011) tais atividades podem ser divididas
em: (i) Programao: consiste no sequenciamento e programao das operaes,
e a elaborao da carga dos centros de trabalho; (ii) Execuo: envolve a liberao das ordens, tambm chamada despacho, e (iii) Controle: inclui o apontamento
da produo e o controle de seu status.
17
Em especfico, os problemas de programao da produo tratam de situaes em que certo nmero de recursos, tais como homens, materiais e mquinas, esto disponveis e podem ser combinados para produzir um ou mais produtos.
A atividade de programao, segundo SEVERO (2007), uma das mais
complexas no gerenciamento da produo. Primeiramente, por lidar com diversos
tipos de recursos simultaneamente. As mquinas tero diferentes capacidades e
capacitao; o pessoal ter diferentes habilidades. Sendo assim, o nmero possvel de programaes da produo aumenta medida que o nmero de atividades
e processos torna-se maior. Deste modo, a programao computacional fornece a
ajuda para a tomada de deciso nos problemas de programao industrial.
Ainda, SEVERO (2007) afirma que, nas ltimas dcadas, observou-se um
destacado desenvolvimento cientfico na rea de programao de produo para
processos em batelada. Isto se deve tendncia de construo de plantas flexveis e pequenas, para que possam atender s necessidades do mercado.
Devido grande variedade de produtos da indstria qumica para atender
s necessidades do mercado, POLON (2010) define que no fluxograma de um
sistema de produo em batelada no existe uma estrutura e receita fsica fixa no
tempo. E, ainda, afirma que a complexidade das atividades de programao de
produo em processos em batelada consequncia de um sistema com equipamentos e armazenagens compartilhados, com necessidade de sincronizar a
produo de produtos no horrio especificado e por fim, a existncia de opes
diferentes de produo com custos diferentes.
SEVERO (2007) assegura que diversas reas na indstria qumica utilizam plantas que operam em batelada, como por exemplo, a indstria farmacutica, de alimentos e, em geral, o setor de qumica fina. SEVERO (2007) ainda coloca que desta forma, torna-se importante implantao de sistemas de gesto de
produo e de tcnicas que visem produo otimizada dos diferentes produtos;
incluindo o uso de equipamentos, produtos e utilidades de forma eficiente. Portanto, as previses de produo em processos batelada geram um problema de programao.
Em geral, a resoluo dos problemas envolvidos com a programao da
produo de vrios tipos de processo feita tornando tais problemas um caso de
18
O tipo de indstria;
O tamanho da empresa;
Sendo assim, mesmo empresas semelhantes em produo possuem estruturas administrativas diferentes que geram sistemas de programao de produo diferentes.
Assim, ZACCARELLI (1982) classifica e subdivide as industrias conforme
sua influencia nos processos administrativos conforme os Quadros 1 e 2:
19
20
21
22
23
ROCHA (2011) afirma que a programao linear uma tcnica de resoluo de equaes lineares, considerada como uma tcnica de otimizao para resolver problemas de maximizao ou minimizao de um determinado objetivo.
OLIVEIRA (2009) estabelece que a otimizao se refere: (i) a maximizao de
parmetros tais como: lucro, vendas, uso efetivo de uma rea, nvel de produo
e uso de um determinado recurso; ou (ii) a minimizao de parmetros tais como:
custo de produo, uso de um determinado recurso de alto valor monetrio e emprego de mo de obra.
ALVES (2007) denota que para a resoluo de problemas de programao linear, so necessrios dois passos fundamentais: primeiramente deve-se
fazer a modelagem do problema, e posteriormente aplicar uma tcnica para resolv-lo.
Para este trabalho, o mtodo de resoluo proposto a aplicao do suplemento SOLVER do Microsoft Excel.
24
25
26
27
deciso, pouco familiarizados com modelos matemticos e ferramentas computacionais, tomar decises gerenciais dirias.
28
3.DESENVOLVIMENTO
Maximizao de lucros;
29
las que agregam valor a materiais por meio de processos de mistura, separao,
conformao ou reaes qumicas visando validar a proposta do trabalho.
Tambm, buscou-se nos estudos da literatura as restries aplicadas nas
otimizaes. A partir das restries observadas, listou-se (QUADRO 3) alguma
das restries mais comumente encontradas:
Quadro 3 - Restries comuns em sistemas de produo
Sistemas de produo
Restries
Capacidade produtiva
Volume de processadores
Nmero de processadores disponveis
Tempo de processamento
Tempo de folga de equipamentos
Tempo de trabalho de equipamentos
Limite de estocagem
Manuteno de estoque
Meios de transportes disponveis
Tempo de transporte
Tempo para entrega
Quantidades de cada componente
Matria-Prima disponvel
Gerao de subprodutos
Consumo de subprodutos
Mo de obra disponvel (tempo)
Subcontrataes
Demanda mxima ou mnima de vendas
Recursos financeiros
Pela anlise do Quadro 3, notou-se que as restries podem ser classificadas e resumidas da seguinte forma:
30
Sujeito a
{
Restries
...
(
Condio de No-Negatividade
Em que:
(
) Funo objetivo
xi varivel de deciso
ci coeficiente da funo objetivo
aii coeficiente da restrio
n nmero de variveis
m nmero de restries
Para a determinao do modelo geral pelo usurio, foi elaborada a seguinte estrutura lgica (FIGURA 2): (i) primeiramente definir as variveis que pretende controlar no problema e represent-la de modo algbrico, (ii) criar uma fun-
31
32
33
Figura 5 - Interface para a insero dos parmetros necessrios para a Funo Objetivo
34
35
Figura 8 - Interface dos resultados da otimizao com os valores das variveis e o total da
otimizao
36
Figura 9 - Planilha padro com os arranjos de linhas e colunas para a generalizao do modelo
37
Sujeito a;
(Tempo de Montagem)
(Tempo do Acabamento)
(Demanda modelo 1)
38
(Demanda modelo 2)
(Demanda modelo 3)
Sujeito a;
(Tempo de Montagem)
(Tempo do Acabamento)
39
40
O nmero de horas de trabalho disponveis no prximo ms nos departamentos de maquinagem, soldagem e montagem so respectivamente
2400, 1500 e 2700
Sabendo que as bicicletas PP originam um lucro de R$40 e as TT R$80,
ajude os dois scios a encontrarem o melhor plano de produo para o prximo
ms.
Aps a insero dos dados na interface trabalhada obteve-se como resultado de maximizao de lucros, uma produo de 140 bicicletas do modelo TT e
360 bicicletas do modelo PP com lucro total de R$25600,00. Os resultados da
interface so mostrados na Figura 11.
41
Product 1
1,1
3
2,5
Product 2
2
4,5
1,3
The problem faced by the company is that it wants to maximize the total
number of products made, but it wants to be sure that the amount of product 1 is
at least one third the total number produced.
(a) Formulate a linear programming model for this problem.
(b) Suppose that instead of 3 machines and 2 products, 300 machines are
used to produce 200 products. Let
42
Sujeito a;
(lathe)
(sander)
(polisher)
) (proporcionalidade)
Sujeito a;
(lathe)
(sander)
(polisher)
(
) (proporcionalidade)
43
Para este caso os valores timos seriam produzir 165 unidades do produto 1 e 335 unidades do produto 2.
44
Tipo de Petrleo
1
2
3
4
3500
2200
4200
1800
Tipo de Gasolina
Superazul
Azul
Amarela
Preo de Venda
(R$/Barril)
Especificao
No mais que 30% de 1
No mais que 40% de 2
No mais que 50% de 3
No mais que 30% de 1
No mais que 10% de 2
No mais que 70% de 1
35
28
22
Sujeito a;
(Quantidade disponvel do petrleo tipo 1)
(Quantidade disponvel do petrleo tipo 2 )
(...)
(...)
(Especificaes para gasolina do tipo Z)
(...)
(Especificaes para gasolina do tipo A)
45
Sujeito a;
(Quantidade disponvel do petrleo tipo 1)
(Quantidade disponvel do petrleo tipo 2 )
(...)
(...)
(gasolina do tipo Z)
(...)
(gasolina do tipo A)
46
47
48
Maximizar Z1
Maximizar Z2
Restrio 1
Restrio 2
Restrio 3
Restrio 4
Restrio 5
Restrio 6
Restrio 7
Restrio 8
Restrio 9
Restrio 10
Restrio 11
Restrio 12
Restrio 13
Restrio 14
Restrio 15
3,21
0,96
6,17
2,08
15,33
0,91
5,36
0,15
13,05
7,24
419,32
267,35
4,89
0,41
2,4
1
0
0
0
0
0
1
0
0
0
0
2,25
2
0,18
5,5
0
1
0
0
0
0
0
1
0
0
0
4,09
1,5
0,15
7,38
0
0
1
0
0
0
0
0
1
0
0
16,24
2,5
0,92
2,9
0
0
0
1
0
0
0
0
0
1
0
5,51
3,75
5,33
9,73
0
0
0
0
1
0
0
0
0
0
1
5,81
35,73
12,95
241,7
0
0
0
0
0
1
0
0
0
0
0
151,97
<=
<=
>=
>=
>=
>=
>=
>=
=
<=
<=
<=
<=
<=
<=
218887
6997,8
2770
50
50
50
50
50
25
2774
1050
302
1084
2649
25328
Assim, os valores dos coeficientes foram inseridos na interface e finalizouse a aplicao. A janela de resultados apresentada na Figura 14 e Figura 15.
49
Margem de Contribuio
Lucro Lquido
Z maximizado =
43690,84
Z maximizado =
18953,09
Varivel
c1
c2
c3
c4
c5
c6
Valor
2774,00
1050,00
302,00
68,48
983,00
25,00
Varivel
c1
c2
c3
c4
c5
c6
Valor
2774,00
1050,00
302,00
50,00
986,19
25,00
50
Tabela 5 - Resultados obtidos por MARETH (2012) utilizando o software pago LINDO
Margem de Contribuio
Lucro Lquido
46042,93
18050,33
Varivel
x1
x2
x3
x4
x5
x6
Valor
2774,00
1050,00
302,00
1084,00
746,13
25,00
Varivel
x1
x2
x3
x4
x5
x6
Valor
2774,00
1050,00
199,83
50,00
925,60
25,00
Nota-se que nas duas otimizaes, tanto pelo Solver quanto pelo LINDO,
tem-se um valor prximo de maximizao, apresentando um desvio na diferena
de valores de 5,1 % para a Margem de Contribuio e de 5% para o Lucro Lquido. No entanto, visvel que na Maximizao 1 os produtos 4 e 5 possuem valores significativamente diferentes. O mesmo acontece na Maximizao 2 em que
os produtos 3 e 5 tambm apresentam uma diferena significante. Acredita-se
que a fonte desta variao seja o mtodo de resoluo utilizado pelo SOLVER e
do LINDO.
51
4. CONCLUSES
No estudo de busca por aplicaes da programao linear pde-se concluir que, notavelmente, o uso de ferramentas computacionais para planejamento
cresceu muito nos ltimos anos. E tambm, devido facilidade e preo acessvel,
o Excel vem despontando entre os softwares de otimizao para o uso da programao linear. Isso se deve, em grande parte, ao fato dele possuir um ambiente
customizado e, muitas vezes, sem custo de implantao.
Ainda, pde-se confirmar a larga aplicao da Programao Linear em diversas reas, desde Recursos Humanos at Sistemas de Produo.
plausvel afirmar que se deve estimular a utilizao destes ambientes,
devido aos timos resultados de trabalhos envolvendo esses aplicativos.
Todos os trabalhos encontrados mostram que os modelos aplicados em
programao linear so eficazes ao produzir solues otimizadas e muitos deles
com um ganho significativo.
Com a utilizao do Visual Basic for Applications pde-se desenvolver
uma interface amigvel para a fcil utilizao do suplemento Solver , restando ao
usurio somente a insero das constantes sem se preocupar com a organizao
e layout das tabelas. Nas anlises de desempenho as interfaces agiram como
esperado, fornecendo e integrando a planilha interface. O resultados obtidos
nas otimizaes comparvel aos da literatura evidenciando a correta programao das rotinas e interao com o recurso Solver. Ainda, o Solver mostra-se uma
poderosa ferramenta comparvel a softwares pagos como o LINDO.
Assim pode-se afirmar que o aplicativo desenvolvido neste trabalho atende s expectativas das pequenas empresas, por ser um aplicativo auxiliar na tomada de deciso sem custos de aquisio e implantao.
52
REFERNCIAS BIBLIOGRFICAS
ABREU, J. D. O estudo da pesquisa operacional no campo da programao
de
produo
em
sistemas
agroindustriais.
Disponvel
em:
<http://www.administradores.com.br/informe-se/producao-academica/o-estudo-dapesquisa-operacional-no-campo-da-programacao-de-producao-em-sistemasagroindustriais/2240/>.
53
54
55
56
57
58
59
60
61
62
63
Var = TextBox3.Value
UserForm1.Hide
'
'Macro 1
'Cria a planilha na forma correta de aplicao Solver
'
'
Range("A1").Select
ActiveCell.FormulaR1C1 = "Planejamento de Produo por Programao Linear"
With Selection.Font
.Name = "Calibri"
.Size = 18
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
64
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
Selection.Font.Italic = True
Range("D2").Select
ActiveCell.FormulaR1C1 = "N de variveis="
Columns("D:D").Select
Columns("D:D").EntireColumn.AutoFit
Range("A4").Select
ActiveCell.FormulaR1C1 = "Funo Objetivo"
Range("D5").Select
ActiveCell.FormulaR1C1 = "Total funo Otimizada"
Columns("D:D").Select
Columns("D:D").EntireColumn.AutoFit
Range("D5").Select
ActiveCell.FormulaR1C1 = "Total funo obj."
Range("D7").Select
ActiveCell.FormulaR1C1 = "Varivel Otimizada"
Columns("D:D").Select
Columns("D:D").EntireColumn.AutoFit
Range("E7").Select
ActiveCell.FormulaR1C1 = "Valor"
Range("A7").Select
ActiveCell.FormulaR1C1 = "Coeficientes"
Columns("B:B").Select
Columns("A:A").ColumnWidth = 11.86
Range("B7").Select
ActiveCell.FormulaR1C1 = "Valor"
Range("A4:E4").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
65
For w = 1 To Var
Range("D" & w + 7).Select
ActiveCell.FormulaR1C1 = "c" & w
Next w
Range("E2").Select
ActiveCell.FormulaR1C1 = "" & Var
UserForm2.Show
End Sub
Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub
66
'
'Marcada a opo, seguir em frente
UserForm2.Hide
UserForm3.Show
End Sub
Private Sub CommandButton2_Click()
UserForm2.Hide
UserForm1.Show
End Sub
67
End Sub
Sub PreencherListBox()
Dim lastRow As Long
Dim i As Integer
ListBox1.Clear
With ListBox1
'define n colunas
.ColumnCount = 2
End With
' Verifica qual a ultima linha preenchida
lastRow = Plan1.Range("A65000").End(xlUp).Row
'adiciona dados
For i = 8 To lastRow
Me.ListBox1.AddItem Plan1.Range("A" & i)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Plan1.Range("B" & i)
Next
End Sub
Sub SomatorioObjetivo()
'
'Adiciona a somatria da funo objetivo
Dim f As String
Dim y As String
Dim m As Long
'Salva o somatrio
'Intermedirio para o somatrio
'Contador para percorrer todos os coeficientes
f = "="
For m = 1 To Plan1.Range("E2").Value
y = "B" & m + 7 & "*E" & m + 7
f = f & "+" & y
Next m
Range("E5").Select
'Insere o somatrio na clula correspondente
ActiveCell.Formula = f
End Sub
68
UserForm4.Show
End Sub
Private Sub UserForm_Activate()
'
'Preenche ListBox com o nmero de restries inseridas
Call PreencherListBoxRestricoes
End Sub
Private Sub UserForm_Initialize()
'
'Cria o cabealho das Restries
'
Range("H4:I4").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
ActiveWindow.SmallScroll ToRight:=2
ActiveCell.FormulaR1C1 = "Restries"
Range("G4:I4").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
69
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
'
'Cria um contador para construo da planilha de restrio
'
Range("T7").Select
ActiveCell.FormulaR1C1 = 7
'
'Cria um contador de restries
'
Range("T8").Select
ActiveCell.FormulaR1C1 = 1
End Sub
Sub PreencherListBoxRestricoes()
Dim sa
ListBox1.Clear
With ListBox1
.ColumnCount = 1
End With
sa = Plan1.Range("T8")
Me.ListBox1.AddItem sa
End Sub
70
Checar = True
End If
End If
Next C
'Caso no encontre nenhuma opo seleciona mostrar mensagem de erro
If Checar = False Then
MsgBox "Selecione o igualador: <=, =, >= !"
Exit Sub
End If
'#################################
'Caso tudo OK, prosseguir
'#################################
'Inserir somatrio das multiplicaes LHS
Call Somatorio
'
'Conta para a prxima restrio
Dim d As Integer
d = Plan1.Range("T7")
d = d + Range("E2") + 5
Range("T7").Select
ActiveCell.FormulaR1C1 = "" & d
'
'Conta o nmero de restries
Dim h As Integer
h = Plan1.Range("T8")
h = h + 1
Range("T8").Select
ActiveCell.FormulaR1C1 = "" & h
'
'Controle para manter o valor de t
Range("T6").Select
ActiveCell.FormulaR1C1 = 0
UserForm4.Hide
End Sub
Private Sub CommandButton3_Click()
'
'Checagem se foi digitado o valor da varivel
If TextBox1 = "" Then
71
das
ActiveCell.FormulaR1C1 = w + 1
TextBox1 = ""
Call PreencherListBox
Else
MsgBox "Todas as variveis j foram preenchidas!"
TextBox1 = ""
End If
End If
End Sub
Private Sub CommandButton4_Click()
UserForm4.Hide
End Sub
Private Sub CommandButton5_Click()
'################################
'Checar se tudo foi preenchido
'################################
72
'
'Conta para a prxima restrio
Dim d As Integer
d = Plan1.Range("T7")
d = d + Range("E2") + 5
Range("T7").Select
ActiveCell.FormulaR1C1 = "" & d
'
'Conta o nmero de restries
Dim h As Integer
h = Plan1.Range("T8")
h = h + 1
Range("T8").Select
ActiveCell.FormulaR1C1 = "" & h
'
'Controle para manter o valor de t
Range("T6").Select
ActiveCell.FormulaR1C1 = 0
'Limpa a list box
ListBox1.Clear
'Limpa Textbox2
TextBox2 = ""
73
74
ActiveCell.FormulaR1C1 = 0
ListBox1.Clear
End Sub
Sub PreencherListBox()
Dim lastRow As Long
Dim i As Integer
Dim S As Integer
S = Plan1.Range("T7").Value
ListBox1.Clear
With ListBox1
'define n colunas
.ColumnCount = 2
End With
' Verifica qual a ultima linha preenchida
lastRow = Plan1.Range("H65000").End(xlUp).Row
'adiciona dados
For i = S To lastRow - 3
Me.ListBox1.AddItem Plan1.Range("H" & i)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Plan1.Range("I" & i)
Next
End Sub
Sub
Dim
Dim
Dim
PreencherRestricoes()
r As Integer 'Cria as colunas das n variveis das restries
t As Integer
p As Integer
r = Plan1.Range("H65000").End(xlUp).Row
Range("G" & r + 2).Select
ActiveCell.FormulaR1C1 = "n" & Range("T8")
Range("H" & r + 2).Select
ActiveCell.FormulaR1C1 = "Coeficiente"
Range("I" & r + 2).Select
ActiveCell.FormulaR1C1 = "Valor"
For t = 1 To Range("E2").Value
Range("H" & r + 3).Select
ActiveCell.FormulaR1C1 = "x" & t
r = r + 1
Next t
p = Plan1.Range("H65000").End(xlUp).Row
Range("H" & p + 1).Select
ActiveCell.FormulaR1C1 = "LHS="
Range("H" & p + 2).Select
ActiveCell.FormulaR1C1 = "Igualador="
Range("H" & p + 3).Select
ActiveCell.FormulaR1C1 = "RHS="
End Sub
Sub Somatorio()
75
'
'Adiciona o somatrio do LHS
'
Dim z As Integer 'Contador para definir o local da somatria
Dim f As String 'Salva o somatrio
Dim y As String 'Intermedirio para o somatrio
Dim m As Long
'Contador para percorrer todos os coeficientes
Dim n
'Intermedirio para o valor de "m"
z = Plan1.Range("T7") + Plan1.Range("E2")
f = "="
For m =
n =
y =
f =
Next m
1 To Plan1.Range("T6").Value
Range("T7") - 1
"I" & m + n & "*E" & m + 7
f & "+" & y
Sub PreencherListBox()
Dim lastRow As Long
Dim i As Integer
ListBox1.Clear
With ListBox1
'define n colunas
.ColumnCount = 2
End With
' Verifica qual a ultima linha preenchida
lastRow = Plan1.Range("D65000").End(xlUp).Row
'adiciona dados
For i = 8 To lastRow
Me.ListBox1.AddItem Plan1.Range("D" & i)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Plan1.Range("E" & i)
Next
End Sub
Private Sub UserForm_Click()
End Sub
76
'##############################################################################
###########
'
' Parmetros iniciais do solver: Clula destino, Otimizao, Intervalo de
variveis, etc..
Dim ChangeAddr As String, MaxMinVal As Long
Dim n As Integer
' Procura a ltima linha preenchida das variveis
n = Plan1.Range("B65000").End(xlUp).Row
ChangeAddr = "$E$8:$E$" & n
MaxMinVal = Range("T4").Value
'##############################################################################
###########
'
'Adio das Restries
Dim
Dim
Dim
Dim
h
w
q
r
As
As
As
As
Integer
Integer
String
Long
'Nmero de restries
'Referncia para o Loop
'Referncia para localizar clula que deve ser lida
77
h = Plan1.Range("T8") - 1
q = 7 + Plan1.Range("E2")
For w = 1 To h
r = Range("$I$" & q + 1).Value
SolverAdd CellRef:="$I$" & q,
laText:="$I$" & q + 2
q = q + 5 + Plan1.Range("E2")
Next w
Relation:=""
&
r,
Formu-
'##############################################################################
############
'
' Finaliza o Solver
SolverSolve True
'
' Define ao e tipo de relatrios
SolverFinish KeepFinal:=1, ReportArray:=1, OutlineReports:=1
End Sub
78
79
80
81
82
83
84