Você está na página 1de 11

caixa_custo btn_adicionar

caixa_produto btn_excluir

caixa_precovenda
caixa_id

listagem_produto

CÓDIGO FORMULÁRIO CONTROLE DE PRODUTO = FormularioControleProdutos

Sub mostrar_produto()
‘variável LINHA irá procurar qual é a última linha preenchida
linha = Sheets("Controle_de_Produtos").Range("A1048576").End(xlUp).Row

‘cria uma lista com 4 colunas que as informações estão contidas na planilha
Controle_de_Produtos, a partir da célula A2 até a coluna D, o número da linha será
identificada pela variável LINHA criada anteriormente
FormularioControleProdutos.listagem_produto.ColumnCount = 4 ‘cria uma lista com 4 colunas
FormularioControleProdutos.listagem_produto.ColumnHeads = True ‘fala que tem cabeçalho
FormularioControleProdutos.listagem_produto.ColumnWidths = "50;200;80;80" ‘proporção das
colunas
FormularioControleProdutos.listagem_produto.RowSource = "Controle_de_Produtos!A2:D" &
linha ‘onde está o conteúdo que será exibido
End Sub

Private Sub btn_adicionar_Click()


‘Irá verificar se todos as caixas estão preenchidas para fazer a adição de um novo item,
caso a caixa estiver vazia ela irá retornar uma mensagem informando e não irá adicionar
até que esteja preenchida
If caixa_produto.Value = "" Then
MsgBox ("Preencha o nome do produto")
Exit Sub
End If
If caixa_custo.Value = "" Then
MsgBox ("Preencha o custo do produto")
Exit Sub
End If
If caixa_precovenda.Value = "" Then
MsgBox ("Preencha o preço de venda do produto")
Exit Sub
End If

'Verifica qual é a próxima linha vazia


linha = Sheets("Controle_de_Produtos").Range("A1048576").End(xlUp).Row + 1

'Adiciona os valores que estão dentro das caixas na planilha Controle_de_Produtos


Sheets("Controle_de_Produtos").Cells(linha, 1).Value =
WorksheetFunction.Max(Sheets("Controle_de_Produtos").Range("A:A")) + 1 'Verifica qual o
maior valor preenchido na primeira coluna (ID) e acrescenta mais um, utilizando a fórmula
MÁXIMO, por exemplo, se o maior número encontrado for 4, ele irá acrescentar mais um,
assim será retornado o 5
Sheets("Controle_de_Produtos").Cells(linha, 2).Value = caixa_produto.Value
Sheets("Controle_de_Produtos").Cells(linha, 3).Value = caixa_custo.Value + 0 'o “+0”
é para informar que será adicionado um valor numérico
Sheets("Controle_de_Produtos").Cells(linha, 4).Value = caixa_precovenda.Value + 0

'Limpa as informações contidas nas caixas


caixa_produto.Value = ""
caixa_custo.Value = ""
caixa_precovenda.Value = ""
caixa_id.Value = ""

'Retorna mensagem de produto adicionado


MsgBox ("Produto adicionado com sucesso")

'Atualiza a listagem de produtos dentro da caixa de listagem


Call mostrar_produto

End Sub

Private Sub btn_excluir_Click()


'Irá exibir uma mensagem com SIM ou NÃO, para isso criaremos uma variável (CONFIRMACAO),
que irá receber o comando MsgBox, com o VbYesNo
confirmacao = MsgBox("Certeza de que deseja excluir esse produto?", vbYesNo)

'Irá verificar se a caixa id está vazia, caso esteja irá retornar uma mensagem pedindo
para que seja preenchida, para isso o usuário terá que dar duplo clique no item
If caixa_id.Value = "" Then
MsgBox ("Por favor, dê duplo clique no item a ser excluído")
Exit Sub
End If

'Se o usuário clicar no SIM na mensagem que foi exibida a partir da variável CONFIRMAÇÃO
ele irá executar a exclusão do produto
If confirmacao = vbYes Then
'Irá procurar qual a linha correspondente ao do ID que está na planilha
linha = Sheets("Controle_de_Produtos").Range("A:A").Find(caixa_id.Value).Row
'Assim que encontrar o ID irá excluir a linha toda
Sheets("Controle_de_Produtos").Range(linha & ":" & linha).Delete
MsgBox ("Produto excluído com sucesso")'Exibe uma mensagem de confirmação
'Limpa as caixas após a exclusão
caixa_produto.Value = ""
caixa_custo.Value = ""
caixa_precovenda.Value = ""
caixa_id.Value = ""
Else 'Caso o usuário clicar no NÃO, o código apenas irá limpar as informações
preenchidas nas caixas e não fará nenhuma exclusão dos itens na planilha
caixa_produto.Value = ""
caixa_custo.Value = ""
caixa_precovenda.Value = ""
caixa_id.Value = ""
End If
End Sub

Private Sub caixa_produto_Change()


caixa_id.Value = ""
End Sub

Private Sub listagem_produto_DblClick(ByVal Cancel As MSForms.ReturnBoolean)


'Preenche os valores nas respectivas caixas, assim que o usuário der DUPLO CLIQUE em uma
linha que está na listagem_produto
caixa_produto.Value = listagem_produto.List(listagem_produto.ListIndex, 1)
caixa_custo.Value = listagem_produto.List(listagem_produto.ListIndex, 2)
caixa_precovenda.Value = listagem_produto.List(listagem_produto.ListIndex, 3)
caixa_id.Value = listagem_produto.List(listagem_produto.ListIndex, 0)
End Sub
Private Sub UserForm_Initialize()
'Assim que o formulário for inicializado, ele irá “chamar” a macro mostrar_produto, na
qual irá exibir os produtos na listagem_produto
Call mostrar_produto
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)


'Toda vez que o FormularioControleProduto fechar, irá atualizar as listagens do
FormControleEstoque
Call FormControleEstoque.atualiza_listagem_estoque
Call FormControleEstoque.carrega_lista_produto
End Sub

caixa_quantidade
lista_produto

btn_controleprodutos

lista_tipo
btn_salvar

btn_excluir
caixa_produto

btn_adicionar

btn_procurar caixa_data

opcao_compras

listagem_estoque opcao_vendas caixa_valor


opcao_todas

listagem_registro

CÓDIGO FORMULÁRIO CONTROLE DE ESTOQUE = ForControleEstoque

Private Sub opcao_compras_Click()


' Atualiza a caixa de listagem deixando apenas os produtos de compras
Call atualiza_listagem_registro
End Sub

Private Sub opcao_todas_Click()


' Atualiza a caixa de listagem mostrando todos os produtos, tanto venda quanto compra
Call atualiza_listagem_registro
End Sub
Private Sub opcao_vendas_Click()
' Atualiza a caixa de listagem deixando apenas os produtos de vendas
Call atualiza_listagem_registro
End Sub

Private Sub listagem_registro_DblClick(ByVal Cancel As MSForms.ReturnBoolean)


' Toda vez que uma transação for clicada duas vezes, todas as caixas ficarão preenchidas
com as informações dela
lista_produto.Value = listagem_registro.List(listagem_registro.ListIndex, 1)
caixa_quantidade.Value = listagem_registro.List(listagem_registro.ListIndex, 2)
lista_tipo.Value = listagem_registro.List(listagem_registro.ListIndex, 3)
caixa_valor.Value = Format(listagem_registro.List(listagem_registro.ListIndex, 4),
"R$ #,##0.00") ‘ o comando FORMAT irá informar qual o formato utilizado na caixa
caixa_data.Value = CDate(listagem_registro.List(listagem_registro.ListIndex, 5)) ‘o
comando CDate irá informar que o formato utilizado é de data
caixa_id.Value = listagem_registro.List(listagem_registro.ListIndex, 0)
End Sub

Private Sub lista_produto_Change()


' Verifica se a caixa de Produto OU Tipo está vazia
If lista_produto.Value = "" Or lista_tipo.Value = "" Then
caixa_valor.Value = ""
Exit Sub
End If

' Busca na aba de Controle de Produtos o Preço ou o Custo do Produto


If lista_tipo.Value = "Compra" Then
caixa_valor.Value =
Format(Sheets("Controle_de_Produtos").Range("B:B").Find(caixa_produto.Value).Offset(0
, 1).Value + 0, "R$ #,##0.00")
Else
caixa_valor.Value =
Format(Sheets("Controle_de_Produtos").Range("B:B").Find(caixa_produto.Value).Offset(0
, 2).Value + 0, "R$ #,##0.00")
End If

' Zera o valor da caixa de ID


caixa_id.Value = ""
End Sub

Private Sub lista_tipo_Change()


' Verifica se a caixa de Produto ou Tipo está vazia
If lista_produto.Value = "" Or lista_tipo.Value = "" Then
caixa_valor.Value = ""
Exit Sub
End If
' Busca na aba de Controle de Produtos o Preço ou o Custo do Produto
If lista_tipo.Value = "Compra" Then
caixa_valor.Value =
Format(Sheets("Controle_de_Produtos").Range("B:B").Find(caixa_produto.Value).Offset(0
, 1).Value + 0, "R$ #,##0.00")
Else
caixa_valor.Value =
Format(Sheets("Controle_de_Produtos").Range("B:B").Find(caixa_produto.Value).Offset(0
, 2).Value + 0, "R$ #,##0.00")
End If

' Zera o valor da caixa de ID


caixa_id.Value = ""
End Sub

Private Sub btn_controleprodutos_Click()


' Exibe o formulário de Controle de Produtos
FormControleProdutos.Show
End Sub

Private Sub btn_salvar_Click()


' Salva a planilha
ThisWorkbook.Save
MsgBox ("Planilha salva com sucesso")
End Sub

Private Sub btn_procurar_Click()


' Atualiza a caixa de listagem de estoque
Call atualiza_listagem_estoque
End Sub

Private Sub btn_excluir_Click()


' Validação para apenas excluir um produto que foi clicado duas vezes
If caixa_id.Value = "" Then
MsgBox ("Dê duplo clique na Transação a ser excluída")
Exit Sub
End If

' Descobre a linha da Transação a ser excluída e remove a linha em questão


linha = Sheets("Compras_e_Vendas").Range("A:A").Find(caixa_id.Value).Row
Sheets("Compras_e_Vendas").Range(linha & ":" & linha).Delete Shift:=xlUp

' Zera o conteúdo de todas as caixas do formulário


caixa_id.Value = ""
lista_produto.Value = ""
lista_tipo.Value = ""
caixa_quantidade.Value = ""
caixa_valor.Value = ""

' Atualiza as duas caixas de listagem


Call atualiza_listagem_registro
Call atualiza_listagem_estoque

MsgBox ("Transação removida com sucesso")


End Sub

Private Sub btn_adicionar_Click()


' Criar validações para o preenchimento de todas as caixas
If lista_produto.Value = "" Then
MsgBox ("Preencha o nome do Produto")
Exit Sub
End If
' o comando IsNumeric serve para verificar se o valor preenchido é um valor numérico
If IsNumeric(caixa_quantidade.Value) = False Then
MsgBox ("Insira uma Quantidade válida")
Exit Sub
End If
If lista_tipo.Value = "" Then
MsgBox ("Preencha o Tipo da transação")
Exit Sub
End If
If caixa_data.Value = "" Then
MsgBox ("Preencha a Data da Transação")
Exit Sub
End If

' Descobre a primeira linha vazia da aba Compras e vendas


linha = Sheets("Compras_e_Vendas").Range("A1000000").End(xlUp).Row + 1
' Preenche as informações do formulário na primeira linha vazia da aba Compras e
Vendas
If linha = 2 Then
Sheets("Compras_e_Vendas").Cells(linha, 1).Value = 1
Else
Sheets("Compras_e_Vendas").Cells(linha, 1).Value =
WorksheetFunction.Max(Sheets("Compras_e_Vendas").Range("A:A")) + 1
End If
Sheets("Compras_e_Vendas").Cells(linha, 2).Value = caixa_produto.Value
Sheets("Compras_e_Vendas").Cells(linha, 3).Value = caixa_quantidade.Value + 0
Sheets("Compras_e_Vendas").Cells(linha, 4).Value = caixa_tipo.Value
Sheets("Compras_e_Vendas").Cells(linha, 5).Value = Replace(caixa_valor.Value, "R$ ",
"") + 0
Sheets("Compras_e_Vendas").Cells(linha, 6).Value = CDate(caixa_data.Value)

' Zerar as caixas do formulário


lista_produto.Value = ""
caixa_quantidade.Value = ""
lista_tipo.Value = ""

' Atualiza as duas caixas de listagem


Call atualiza_listagem_registro
Call atualiza_listagem_estoque

MsgBox ("Transação cadastrada com sucesso")


End Sub

Private Sub UserForm_Initialize()


' Inicializa a caixa de data com a data de hoje
caixa_data.Value = Format(Date, "dd/mm/yyyy")

' Carrega as informações para a caixa de Tipos


lista_tipo.AddItem "Compra"
lista_tipo.AddItem "Venda"

' Carrega as informações na caixa de Produto


Call carrega_lista_produto

' Atualiza as duas caixas de listagem


Call atualiza_listagem_registro
Call atualiza_listagem_estoque
End Sub

Sub carrega_lista_produto()
' Descobre a última linha da aba de Controle de Produtos e carrega as informações
para a caixa de Produtos
linha = Sheets("Controle_de_Produtos").Range("A1000000").End(xlUp) + 1
lista_produto.RowSource = "Controle_de_Produtos!B2:B" & linha
End Sub
Sub atualiza_listagem_registro()
' Filtra as informações da aba Compras_e_Vendas com o status selecionado no
formulário
Sheets("Compras_e_Vendas").AutoFilterMode = False
If opcao_compras = True Then
Sheets("Compras_e_Vendas").UsedRange.AutoFilter 4, "Compra"
ElseIf opcao_vendas = True Then
Sheets("Compras_e_Vendas").UsedRange.AutoFilter 4, "Venda"
End If

' Limpa as informações da aba Caixa_Compras_e_Vendas e cola as informações filtradas


Sheets("Caixa_Compras_e_Vendas").UsedRange.Clear
Sheets("Compras_e_Vendas").UsedRange.Copy
Sheets("Caixa_Compras_e_Vendas").Range("A1").PasteSpecial
xlPasteValuesAndNumberFormats
Application.CutCopyMode = xlCopy

' Tira o filtro da aba principal


Sheets("Compras_e_Vendas").AutoFilterMode = False

' Mostrar as informações da aba criada na caixa de listagem


' Descobre a última linha preenchida da aba de Controle de Produtos
linha = Sheets("Caixa_Compras_e_Vendas").Range("A1000000").End(xlUp).Row

' Acertar a informação da linha se não tiver nenhuma informação preenchida na tabela
If linha = 1 Then linha = 2

' Carrega a caixa de listagem com 6 colunas e todas as informações da aba


Caixa_Comrpas_e_Vendas
With listagem_registro ‘ comando WITH serve para simplificar, pois tudo que estiver
dentro desse comando será executado com o que está na frente dele, por exemplo,
listagem_registro
.ColumnCount = 6
.ColumnHeads = True
.ColumnWidths = "0;75;85;50;70;70"
.RowSource = "Caixa_Compras_e_Vendas!A2:F" & linha
End With
End Sub

Sub atualiza_listagem_estoque()
' Limpa a aba de estoque e adiciona os produtos presentes na aba Controle_de_Produtos
Sheets("Estoque").Cells.Clear
Sheets("Controle_de_Produtos").Range("B:B").Copy Sheets("Estoque").Range("A1")
' Preenche os cabeçalhos da aba de Estoque
Sheets("Estoque").Range("B1").Value = "Compras"
Sheets("Estoque").Range("C1").Value = "Vendas"
Sheets("Estoque").Range("D1").Value = "Estoque"

' Descobre quantas linhas existem na aba de Estoque


linha = Sheets("Estoque").Range("A1000000").End(xlUp).Row

' Preenche as fórmulas de Compras, Vendas e Estoque para a primeira linha


If linha > 1 Then
Sheets("Estoque").Range("B2").FormulaLocal =
"=SOMASES(Compras_e_Vendas!C:C;Compras_e_Vendas!B:B;Estoque!A2;Compras_e_Vendas!D:D;"
"Compra"")"
‘ o comando FORMULALOCAL faz com que possamos utilizar a fórmula em português
Sheets("Estoque").Range("C2").FormulaLocal =
"=SOMASES(Compras_e_Vendas!C:C;Compras_e_Vendas!B:B;Estoque!A2;Compras_e_Vendas!D:D;"
"Venda"")"
Sheets("Estoque").Range("D2").FormulaLocal = "=B2-C2"

If linha > 2 Then


Sheets("Estoque").Range("B2:D" & linha).FillDown
End If

Sheets("Estoque").Calculate
End If

' Copia as fórmulas e cola como valores


Sheets("Estoque").UsedRange.Copy
Sheets("Estoque").UsedRange.PasteSpecial xlPasteValues
Application.CutCopyMode = False

' Atualiza a aba Caixa_Estoque


' Limpa as informações da aba Caixa_Estoque e tira qualquer filtro da aba Estoque
Sheets("Caixa_Estoque").Cells.Clear
Sheets("Estoque").AutoFilterMode = False

' Filtra as informações da aba Estoque e cola na aba Caixa_Estoque


If caixa_produto.Value <> "" Then
Sheets("Estoque").UsedRange.AutoFilter 1, "*" & caixa_produto.Value & "*"
End If
Sheets("Estoque").UsedRange.Copy Sheets("Caixa_Estoque").Range("A1")
Sheets("Estoque").AutoFilterMode = False

' Mostrar as informações da aba criada na caixa de listagem


' Descobre a última linha preenchida da aba de Controle de Produtos
linha = Sheets("Caixa_Estoque").Range("A1000000").End(xlUp).Row

' Acertar a informação da linha se não tiver nenhuma informação preenchida na tabela
If linha = 1 Then linha = 2

' Carrega a caixa de listagem com 6 colunas e todas as informações da aba


Caixa_Comrpas_e_Vendas
With listagem_estoque
.ColumnCount = 4
.ColumnHeads = True
.ColumnWidths = "120;0;0;95"
.RowSource = "Caixa_Estoque!A2:D" & linha
End With
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)


' Ativa as linhas de grade, exibe a barra de fórmulas, as abas, os títulos e tira o
Excel da tela cheia
ActiveWindow.DisplayGridlines = True
ActiveWindow.DisplayHeadings = True
ActiveWindow.DisplayWorkbookTabs = True
Application.DisplayFullScreen = False
Application.DisplayFormulaBar = True

' Ativa a atualização de tela


Application.ScreenUpdating = True
End Sub

Você também pode gostar