ADMINISTRANDO ESTOQUE

42
Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL Excellencia Soluções em VBA www.tudosobrexcel.com Página: 1 / 42

Transcript of ADMINISTRANDO ESTOQUE

Page 1: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 1 / 39

Page 2: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 2 / 39

Page 3: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 3 / 39

ADMINISTRANDO ESTOQUES NO EXCEL

1 - INTRODUÇÃO

Mais uma vez vamos tratar de um assunto muito procurado por todos que administram um negó-

baixo custo e que só o Excel pode fazer.

Vamos explicar passo a passo como fazer um aplicativo de controle de estoque, que através deformulários o usuário poderá cadastrar novas categorias de produtos, o usuário poderá incluir ebaixar produtos com muita facilidade e por fim poderá calcular o preço de venda utilizando o mé-todo Mark-On, que utiliza um percentual fixo para a apuração do preço final das mercadorias pa-ra venda.

Utilizaremos como exemplo estoque de uma pequena adega e controlaremos as bebidas quesão comercializadas.

O mais importante neste tutorial são as funções que aqui explicaremos passo a passo e tambéma manipulação de um formulário que controlará as várias planilhas que servirão para a armaze-nagem dos estoques, afinal de contas esse é o sonho de todos desenvolvedores de Excel, apren-der a manipular os formulários do VBA ( Visual basic para aplicativos).

No tutorial anterior sobre estoques, uma única planilha era utilizada para armazenar todo estoque,neste utilizaremos um novo método: várias planilhas são utilizadas para o controle de estoque, ouseja cada categoria de produto terá uma planilha exclusiva.

cios e possuem em seus ativos estoques de materiais e mercadorias, um controle eficiente e de

Page 4: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 4 / 39

2 - A ESTRUTURA DO APLICATIVO

As planilhas que controlarão os estoques terão os campos básicos para tal:

Este campos começarão a serem preenchidos à partir da linha 3.

Na célula "C2" acumularemos o total de mercadorias, enquanto que na célula "F2" o total mone -tário destas mercadorias.

Na colunas B, C e D serão armazenados dados digitados nos TextBoxes do formulário, enquantoque nas colunas E e F serão atualizados com duas funções:

=SE(D4="";"";D4*TVA)=SE(OU(C4="";E4="");"";E4*C4)

2.1 - A Administração do Estoque

Nosso aplicativo será todo administrado por um formulário, ou seja , o usuário não terá acesso àplanilha. Liberando o acesso das planilhas para que o usuário administre o estoque poderemospor em risco nosso projeto, pois o usuário pode alterar toda estrutura acidentalmente.

Teremos também um formulário para administrar a impressão das planilhas responsáveis no con-trole dos estoques.

Page 5: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 5 / 39

No projeto teremos também três módulos: um para as APIS utilizadas no aplicativo, outro paracontrolar a gestão do estoque e outro para as rotinas básicas.

planilhas criadas como categorias de estoque.

as mercadorias constantes no ComboBox.

No formulário utilizaremos um objeto "MultiPage" com quatro páginas.

No formulário utilizaremos também um objeto "ComboBox" que será responsável em ler todas

O último importante objeto criado no formulário é o "ListBox" que é responsável em armazenar

Uma página será responsável nas entradas das mercadorias, outra pela saídas das mercadorias, outra pela administração de novas categorias de produtos no estoque e o quatro na configuração do estoque (setup)

Page 6: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 6 / 39

Visualizando o formulário por completo:

Uma interface que a nossos olhos parece simples, mas veremos que é muito útil para o fim queserá criado.

Agora vamos aprender a administrar cada um destes objetos que deixarão nosso aplicativo pra-ticamente perfeito.

Você terá a experiência de utilizar funções úteis que serão responsáveis em controlar praticamen-te todo projeto.

3 - CAPTURANDO DADOS DAS PLANILHAS

Nesta primeira fase temos dois desafios: Preencher um ComboBox com os nomes de todas planilhas que servirão para a administração dos estoques e preencher uma ListBox que armaze-narão todas as mercadorias constantes em cada planilha.

Para o preenchimento do ComboBox que armazenará os nomes das planilhas que servirão paracontrolarmos o estoque, criamos uma função. A utilização de funções criadas especificamente

Function Categorias(Optional Todas As Boolean)

Page 7: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 7 / 39

Dim Ws As Worksheet, Lista() As String, Index% With ThisWorkbook For Each Ws In .Worksheets If Ws.Range(KOriginal).Offset(-1, 0) = "Denominação" And (Ws.Visible Or Todas) Then Index = Index + 1 ReDim Preserve Lista(1 To Index) Lista(Index) = Ws.Name End If Next Ws End With

End Function

Esta função utiliza a variável Koriginal e repare que a mesma não está declarada na função, issoporque ela está declarada na área de declarações genéricas do módulo "ModGest".

Public Const KOriginal = "B4"

Esta variável significa que estou reservando o intervalo "B4" para alguma conferencia muito espe-cial.

Interpretando o foco da função a principal atribuição é percorrer todas planilhas da pasta de tra-balho e verificar a célula "B4". Se neste intervalo tiver a palavra "Denominação" significa que amesma poderá ser armazenada numa variável ou diretamente num objeto ComboBox ou ListBox.Aqui na nossa função armazenamos numa função para depois descarregarmos num ComboBox.Utilizando a instrução ReDim Preserve teremos condição de armazenar os nomes de todas pla-nilhas que satisfazem as condições acimas expostas na variável Lista().

Para utilizarmos esta função basta chamarmos a mesma na propriedade List do ComboBox. Setentarmos utilizar esta função numa planilha, a mesma retornará apenas o nome da primeira plani-lha, pois as células não tem a propriedade List para obter o retorno.

With ComboCat .List = Categorias .ListIndex = 0 End With

Como necessitamos do preenchimento do ComboBox sempre que o formulário for ativado, entãoutilizamos o evento initialize( ) do mesmo para o carregamento da função Categoria().

Categorias = Lista

Quando você chama um procedimento com um argumento opcional, a especificação do argumento opcional é facultativa. Caso não especifique o argumento opcional, o valor padrão, se houver, será utilizado. Se nenhum valor padrão for especificado, o argumento será aquele que seria para qualquer variável do tipo especificado.

Page 8: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 8 / 39

Com o ComboBox "ComboCat" atualizado com os nomes das planilhas criadas para armazenaros estoques, agora atualizaremos a ListBox "ListBoxProd" , que será responsável em listar os no-mes de todas as mercadorias das categorias de produtos da ComboBox "ComboCat".

Para uma atualização automática da ListBox "ListBoxProd" utilizaremos o evento Change( ) daCombobox "ComboCat", ou seja sempre que este ComboBox for atualizado, automaticamentea ListBox "ListBoxProd" também será preenchida.

Agora criaremos a segunda função, a que será responsável em preencher a ListBox com os pro-dutos, a "ListBoxProd".

Dim Célula As Range, Lista, Mil, Bcle% On Error GoTo erro Set Célula = DeterminarCélula(Ws) If Célula Is Nothing Then Exit Function Lista = Célula.Value Mil = Célula.Offset(0, 1).Value

If Not IsArray(Lista) Then ReDim Lista(1 To 1, 1 To 1) Lista(1, 1) = Trim$(Célula.Value) Else For Bcle = 1 To UBound(Lista) Lista(Bcle, 1) = Trim$(Lista(Bcle, 1)) Next Bcle End If

erro:End Function

A primeira coisa a destacar nesta função é que utilizamos uma outra função que tem a meta dedeterminar o último intervalo preenchido de uma determinada planilha.

Se a função não retornar nenhuma célula a função é encerrada.

Set Célula = DeterminarCélula(Ws) If Célula Is Nothing Then Exit Function

Se encontrado algum intervalo for encontrado um Loop é executado e a variável Lista é preenchi-da .

If Not IsArray(Lista) Then ReDim Lista(1 To 1, 1 To 1)

Function Produtos(Ws$)

Produtos = Lista

Page 9: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 9 / 39

Lista(1, 1) = Trim$(Célula.Value) Else For Bcle = 1 To UBound(Lista) Lista(Bcle, 1) = Trim$(Lista(Bcle, 1)) Next Bcle End If

A Função DeterminarCélula:

Dim Cel As Range On Error GoTo erro With ThisWorkbook.Worksheets(Ws) Set Cel = .Range(Left(KOriginal, 1) & "65536").End(xlUp) If Cel.Row > 2 Then

End If End Witherro:End Function

Nesta função utilizamos um método simples para a localização da última célula preenchida, o

"para cima". Então à partir da última linha de uma coluna, este método faz com que acessemosa última célula preenchida.

4 - VISUALIZANDO AS MERCADORIAS SELECIONADAS

Depois de atualizado a ListBox "ListBoxProd", o próximo passo é criar um evento para selecio-nar uma determinada mercadoria e seus dados serem exibidos nos campos para alteração e ex-clusão.

O procedimento que terá a missão de capturar os dados da tabela específica e do produto sele-cionado na ListBox e preencher campos TextBox na região do objeto MultiPage é a função nome-ada como "DadosMercadorias".

Dim Intervalo As Range, Ligne As Range VerificarControles Set Intervalo = DeterminarCélula(ComboCat) If Intervalo Is Nothing Then Exit Sub

Function DeterminarCélula(Ws$) As Range

Set DeterminarCélula = .Range(KOriginal, Cel)

Ws$ é o nome da planilha que desejamos listar as mercadorias.

método "End", que utilizamos para acessar a última célula, e a direcionador "Up" que significa

Private Sub DadosMercadorias(Index%, Optional AjusteProdI As Boolean)

Page 10: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 10 / 39

Set Intervalo = Intervalo.Resize(, KColTab) With Intervalo.Rows(Index) 'produtos LabelProdE = " " & Trim$(.Cells(1)) LabelProdS = LabelProdE If AjusteProdI Then TextBoxProdI = LabelProdE

'estoque LabelStockE = .Cells(2) LabelStockS = .Cells(2) LabelPrixE = Format(.Cells(3), "0.00") LabelPrixS = LabelPrixE End WithEnd Sub

A primeira coisa que notamos é a presença de um procedimento nomeado como VerificarCon-troles alocado no inicio do código. A função deste controle é limpar os conteúdos que porventuraexistirem nos controles que receberão os valores do produto selecionado.

Private Sub VerificarControles()Dim Ctrl As Control For Each Ctrl In Controls If Ctrl.Tag = "Aff" Then Ctrl = "" Next CtrlEnd Sub

Para facilitar a identificação dos controles a serem "limpos" utilizamos a propriedade Tag, que éuma propriedade a ser utilizada justamente para este fim, ou seja deixar vários controles com ummesmo valor em comum, que no nosso caso, todos controles que são atualizados com os valoresdo item escolhido na ListBox receberão a propriedade mTag como "Aff".

No procedimento VerificarControles, é feito uma varredura em todo formulário e verificando todoscom a propriedade Tag="Aff" e com isso limpar seus conteúdos.

Seguindo na explicação, utilizamos a seguir a função DeterminarCélulas que tem como funçãolocalizar a última célula preenchida da planilha selecionada.

Set Intervalo = DeterminarCélula(ComboCat)

Localizado a última linha preenchida, utilizaremos o método Resize para prolongar a seleção atéa coluna 6 (última coluna da tabela de estoques)

Set Intervalo = Intervalo.Resize(, KColTab)

A variável KColTab oi declarada na região de declarações genéricas:

Page 11: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 11 / 39

Public Const KColTab = 6

Esta variável representa a limitação da coluna nas tabelas dos produtos.

E finalmente o preenchimento dos objetos demonstrando os dados da mercadoria selecionada:

With Intervalo.Rows(Index) LabelProdE = " " & Trim$(.Cells(1)) LabelProdS = LabelProdE If AjusteProdI Then TextBoxProdI = LabelProdE

LabelStockE = .Cells(2) LabelStockS = .Cells(2) LabelPrixE = Format(.Cells(3), "0.00") LabelPrixS = LabelPrixE End With

E não podemos nos esquecer do principal, que é o evento Click da ListBox, responsável por to -da verificação acima detalhada.

Private Sub ListBoxProd_Click() If ListBoxProd.ListIndex = -1 Then Exit Sub DadosMercadorias ListBoxProd.ListIndex + 1, MultiPage1.Value = 2End Sub

5 - ADMINISTRANDO AS MERCADORIAS (INCLUSÃO E BAIXAS)

No formulário de administração de estoque temos uma multipage com quatro páginas responsá-veis na administração de nosso estoque: Um página responsável na inclusão de novos produtos,outra responsável pela inclusão ítens de produtos cadastrados e outra responsável pela baixa deprodutos cadastrados.

Assim como fizemos para a atualização do ComboBox "ComboCat" e a ListBox "ListBoxProd"continuaremos criando funções para executarmos as tarefas do aplicativo "Administração de Es-toque".

5.1 - INCLUINDO MERCADORIAS

Page 12: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 12 / 39

Para incluirmos mercadorias numa planilha de mercadorias cadastradas utilizaremos a funçãoIncluirMercadorias com os atributos Planilha, Índice e Número.

Dim Intervalo As Range, Produtos$ On Error GoTo erro Set Intervalo = DeterminarCélula(Ws) If Intervalo Is Nothing Then Exit Function Set Intervalo = Intervalo.Resize(, KColTab)

With Intervalo.Rows(Index).Cells(2) .Value = .Value + nNum Produtos = .Offset(0, -2) End With IncluirMercadorias = True Bip Exit Functionerro: MsgBox "Erro na inclusão de " & Produtos, vbCritical, NomAppEnd Function

-WS$ é a planilha que receberá a inclusão de mercadorias;-Index% é o índice da ListBox "ListBoxProd";-nNum% é a quantidade de mercadorias que desejamos incluir o estoque.

Para selecionarmos o intervalo de células da planilha específica mais uma mvez utilizaremos afunção DeterminarCélula(Ws).

Para utilizarmos a função IncluirMercadoria basta aloca-la o evento click bo botão "BotãoIncluir"

Private Sub BotãoIncluir_Click()Dim Valor#, Index% On Error GoTo erro Index = ListBoxProd.ListIndex Valor = Numérico(TextBoxNbE) If Valor > 0 And Index >= 0 Then

End If ComboCat_Change ListBoxProd.ListIndex = Indexerro:End Sub

Repare na utilização das atribuições da função IncluirMercadorias:

Function IncluirMercadorias(Ws$, Index%, nNum%) As Boolean

IncluirMercadorias ComboCat, ListBoxProd.ListIndex + 1, Int(Valor)

Page 13: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 13 / 39

-WS$ é substituído pela combobox "ComboCat";-Index% é substituído pelo índice da ListBox "ListBoxProd";-nNum% é substituído pelo valor do TextBox "TextBoxNbE".

A validação do número digitado no TextBox "TextBoxNbe" é feita através da função Numérico.

If IsNumeric(Valor) Then Numérico = CDbl(Valor) Else Numérico = -1End Function

5.2 - BAIXANDO MERCADORIAS

Assim como nas inclusões, para baixarmos mercadorias numa planilha de mercadorias cadas-tradas utilizaremos a função BaixarMercadorias com os atributos Planilha, Índice e Número.

Assim como na função IncluirMercadorias, na função BaixarMercadorias utilizaremos três atribu-tos: Ws$ como planilha, Index como número da linha e nNum as quantidade a ser baixada.

Dim Intervalo As Range, Produtos$ On Error GoTo erro Set Intervalo = DeterminarCélula(Ws) If Intervalo Is Nothing Then Exit Function Set Intervalo = Intervalo.Resize(, KColTab)

With Intervalo.Rows(Index).Cells(2) .Value = .Value - nNum Produtos = .Offset(0, -2)

End With

BaixarMercadorias = True Bip Exit Functionerro: MsgBox "Erro na baixa de " & Produtos, vbCritical, NomAppEnd Function

Assim como a função DeterminarCélula, a função também utiliza o procedimento ExcluirLinha.Esta função utiliza duas atribuições: Produtos, que é o item da coluna B de uma determinada lin-nha e a célula que será "limpa".

Private Function Numérico#(ByVal Valor$)

Function BaixarMercadorias(Ws$, Index%, nNum%) As Boolean

If .Value = 0 Then ExcluirLinha Produtos, .Offset(0, -2)

Private Sub ExcluirLinha(Produtos$, Cel As Range)

Page 14: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 14 / 39

Dim Resposta On Error GoTo erro Resposta = MsgBox("O estoque de " & Produtos & " está ou estará zerado" & vbCr & _ "Deseja elimina-lo da relação ?", vbYesNo, NomApp) If Resposta = vbNo Then Exit Sub Cel.Resize(, 4).Value = "" Ordenar Cel.Worksheet.Name, True Ordenar Cel.Worksheet.Name, Falseerro:End Sub

A função deste procedimento é verificar se o estoque do produto selecionado é zero, se for eleperguntará se deseja excluir a linha, se a resposta for sim a linha do produto será definitivamenteexclusa.

Neste procedimento é utilizado também a função Ordernar, Ela tem como meta ordenar a tabelado produto após exclusão. Quando a célula é limpa a ordenação é automática com esta função.

E finalmente para baixarmos a mercadoria basta alocar a função no evento click do botão:

Private Sub BotãoBaixar_Click()Dim Valor#, Index% On Error GoTo erro Index = ListBoxProd.ListIndex Valor = Numérico(TextBoxNbS) If Valor > 0 And Index >= 0 Then BaixarMercadorias ComboCat, ListBoxProd.ListIndex + 1, Int(Valor) ComboCat_Change If ListBoxProd.ListCount - 1 >= Index Then ListBoxProd.ListIndex = Index Else TextBoxNbS = "" End Iferro:End Sub

Não podemos esquecer a validação do TextBox "TextBoxNbS" antes de prosseguirmos na baixa.

5.3 - INCLUÍNDO NOVAS MERCADORIAS

Neste tópico continuaremos a utilizar funções para a inclusão de novas mercadorias numa tabelajá existente.

EntradaValida: Verificar se o produto já existe no estoque;Numérico: Validar o campo numérico;NovoProduto: Função para cadastrar;

Page 15: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 15 / 39

5.3.1 - Função EntradaValida

Dim Bcle%, Lista 'On Error GoTo nerro If nProduto = "" Then Exit Function Lista = Produtos(Ws) If IsArray(Lista) Then For Bcle = LBound(Lista) To UBound(Lista) 'MsgBox LCase(Lista(Bcle, 1)) & "-" & LCase(nProduto)

If LCase(Lista(Bcle, 1)) = LCase(nProduto) Then MsgBox "O Produto " & nProduto & " Já consta no Estoque !", _ vbInformation, NomApp Exit Function End If Next Bcle End If EntradaValida = nProdutonerro:End Function

Os atributos da função são: Ws como planilha e nProduto como produto. Se Ws retornar vazio, ouseja nenhuma planilha for escolhida a função é encerrada.

If nProduto = "" Then Exit Function

A variável Lista é preenchida com a função Produtos( ). validamos a lista como a função definidaIsArray. Como a lista validada, verificamos se o produto que desejamos cadastrar já não constana Array(lista), se sim uma mensagem é exibida e a função é encerrada.

For Bcle = LBound(Lista) To UBound(Lista) 'MsgBox LCase(Lista(Bcle, 1)) & "-" & LCase(nProduto)

If LCase(Lista(Bcle, 1)) = LCase(nProduto) Then MsgBox "O Produto " & nProduto & " Já consta no Estoque !", _ vbInformation, NomApp Exit Function End If Next Bcle

5.3.2 - Função NovoProduto

ByVal Prix#, ByVal Estoque%) As Boolean

Function EntradaValida$(Ws$, nProduto$)

Function NovoProduto(Ws$, ByVal Produto$, _

Page 16: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 16 / 39

Dim Cel As Range With ThisWorkbook.Worksheets(Ws) Set Cel = .Range("B65536").End(xlUp).Offset(1, 0) End With On Error GoTo nerro With Cel .Value = Produto .Offset(0, 1) = Estoque .Offset(0, 2) = Prix End With Ordenar Ws, False NovoProduto = True Bip Exit Functionnerro: MsgBox "Erro na inclusão de um novo Produto " & Produto, vbCritical, NomAppEnd Function

Esta função localiza a próxima linha vazia da tabela do respectivo produto para o devido cadas-tramento.

Set Cel = .Range("B65536").End(xlUp).Offset(1, 0)

Na linha encontrada é cadastrado o produto; na mesma linha na coluna seguinte a quantidade ena terceira coluna o preço de custo

With Cel .Value = Produto .Offset(0, 1) = Estoque .Offset(0, 2) = Prix End With

Com as funções definidas bastamos utilizar o evento Click do botão BotãoNovo para o cadastrode novos produtos.

Dim Ok As Boolean, Prix#, Estoque#, Ano#, Produto$

If Produto = "" Then TextBoxProdI = "": TextBoxEstoqueI = "": TextBoxPreçoCusto = ""

If Prix < 0 Then TextBoxPreçoCusto = "" If Not CheckBoxPU Then Prix = 0 End If

Private Sub BotãoNovo_Click()

Produto = EntradaValida(ComboCat, Trim$(TextBoxProdI))

Prix = Numérico(TextBoxPreçoCusto)

Page 17: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 17 / 39

If Estoque < 0 Then TextBoxEstoqueI = "" If Not CheckBoxEstoque Then Estoque = 0 End If

Ok = TextBoxProdI <> "" And Prix >= 0 And Estoque >= 0 _ And ComboCat.ListIndex <> -1 If Ok Then

TextBoxProdI = "" TextBoxPreçoCusto = "" TextBoxEstoqueI = "" ComboCat_Change End Iferro:End Sub

Repare que na utilizações das funções as atribuições foram substituídas por objetos.

Se a principal variável, produto, não for validada os campos que utilizaremos para a inclusão deum novo produto não poderão permanecerem preenchidos.

6 - O CÁLCULO DO PREÇO DE VENDA

Uma empresa que tem muitas mercadorias em seu estoque e essas mercadorias são de espé-cies diversificadas não pode utilizar um único critério para calcular o preço de venda, uma porquequanto maior o preço da mercadoria menor a margem.

Aqui no nosso aplicativo como as mercadorias são todas bebidas vamos adotar o sistema Mar-kon de calculo do preço de venda, ou seja definimos uma margem padrão para todas .

Preço de Custo 10,00 x 30% de Margem = Preço de Venda 13,00

Para que o preço de venda seja já atualizado sempre que cadastrarmos novas mercadorias va-mos utilizar uma variável para tal.

Public Const KWTVA = "TVA"

A Variável "TVA" será responsável em atualizar o preço de venda de nossas mercadorias. Elaserá atualizada pelo controle textbox "TextBoxTVA". Utilizaremos o evento deste textbox para aatualização:

Estoque = Numérico(TextBoxEstoqueI)

NovoProduto ComboCat, TextBoxProdI, Prix, Int(Estoque)

If Produto = "" Then TextBoxProdI = "": TextBoxEstoqueI = "": TextBoxPreçoCusto = ""

Page 18: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 18 / 39

Private Sub TextBoxTVA_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)Dim Valor# Valor = Numérico(TextBoxTVA) If Valor >= 0 Then ValName(KWTVA) = Valor / 100 + 1 TVAEnd Sub

Normalmente vinculamos uma textbox à alguma célula, neste aplicativo faremos diferente, paraque você aprenda mais um método de atualização de controles.

Como já dissemos em capítulos anteriores, além das células o excel também utiliza valores nome-ados. Esses valores podem ser nomeados acessando o menu inserir... submenu.. nomes ...ÍtemDefinir.

Ou via Macro

ValName(KWTVA) = Valor / 100 + 1

Onde KWTVA é a variável "TVA"

Agora com o nome "TVA" criado, toda vez que alterarmos o valor da TextBox "TexBoxTVA" ovalor do campo nomeado será alterado.

Para finalizar, basta utilizarmos o campo nomeado numa fórmula que nos fornecerá o valor doPreço de venda de nossa mercadoria:

=SE(D6="";"";D6*TVA)

7 - IMPRIMINDO RELATÓRIOS DE ESTOQUE

Page 19: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 19 / 39

Vamos agora criar uma ferramenta para que possamos imprimir os relatórios de estoque dasmercadorias.Vamos criar um formulário que irá gerenciar a impressão das planilhas responsáveis em contro-lar os estoques.

Um formulário simples como uma listbox com a relação das planilhas, duas caixas de opções pa-ra escolhermos se desejamos imprimir algumas ou todas planilhas e uma caixa de verificação pa-imprimirmos os relatórios em preto e branco, já que os relatórios são formatados coloridos.

Não precisaremos obrigatoriamente imprimir os relatórios, teremos também a opção de visualiza-ção dos mesmos.

7.1 - As Propriedades da ListBox

As propriedades que mais destacam a listbox no formulário é:

ListStyle = 1 - fmListStyleOption - Que permite que o conteúdo da lista anteceda de um quadradopara ser clicado na seleção;

Page 20: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 20 / 39

MultiSelect = 1 - fmMultiSelectmulti - Que permite selecionarmos mais de um ítem na lista;

7.2 - A Função de Impressão

Quase todos procedimentos do projeto utilizam função em sua estrutura. A impressão dos rela-tórios não poderia ser diferente.

Dim Intervalo As Range, Sens% On Error GoTo erro Set Intervalo = DeterminarCélula(Ws) If Intervalo Is Nothing Then Exit Sub Set Intervalo = Intervalo.Offset(-2, 0).Resize(Intervalo.Rows.Count + 2, KColTab) With Intervalo.Worksheet .PageSetup.PrintArea = Intervalo.Address

End With Exit Suberro: MsgBox "Erro durante a Impressão", vbInformation, NomAppEnd Sub

Na função impressão a utilização da função DeterminarCélula( ) é importante para determinarmosa região de impressão.

A atribuição EmBranco é utilizada para definir a configuração de impressão no tocante a impres-são branco e preto. Como é uma variável Boleano e está vinculada à caixa de verificação"CheckBoxBW", se a caixa for clicada significa que queremos imprimir os relatórios em preto ebranco.

Agora basta utilizarmos a função no evento Click dos botões Imprimir e Visualizar no formulário:

Private Sub BotãoImprime_Click()Dim Bcle% Me.Hide With ListBoxF For Bcle = 0 To .ListCount - 1 If .Selected(Bcle) Or OptionBoutTous Then Impressão ListBoxF.List(Bcle), CheckBoxBW, False End If Next Bcle End With

Sub Impressão(Ws$, EmBranco As Boolean, Optional Visualizar As Boolean)

.PageSetup.BlackAndWhite = EmBranco If Not Visualizar Then .PrintOut Else .PrintPreview

Page 21: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 21 / 39

Unload MeEnd Sub

Dim Bcle% Unload Me With ListBoxF For Bcle = 0 To .ListCount - 1 If .Selected(Bcle) Then Impressão ListBoxF.List(Bcle), CheckBoxBW, True Exit Sub End If Next Bcle End WithEnd Sub

Repare nos dois procedimentos o uso da função Impressão ():

As planilhas a serem impressas são as selecionadas na listbox "ListBoxF";O valor da caixa de verificação "CheckBoxBW" define se a impressão é branco e preto;O valor boleano true ou false define se desejamos imprimir ou apenas visualizar a impressão.

8 - EXIBIÇÃO DO FORMULÁRIO PRINCIPAL

Assim como faço na maioria dos formulários principais dos aplicativos que desenvolvo vamos e-

Diferentemente do Visual Basic, no VBA não temos a propriedade XLMaximized para a exibiçãomaximizado do formulário. Vamos então "chamar" as api´s para adaptarmos tal propriedade.

Dim Form_Personalizado As Long

Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long

Private Const ESTILO_ATUAL As Long = (-16)

Private Const WS_CX_MAXIMIZAR As Long = &H10000

Private Const WS_POPUP As Long = &H80000000

Private Const WS_CAPTION = &HC00000

Private Declare Function MoveJanela Lib "user32" Alias "SetWindowLongA" ( _ ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Sub BotãoVisualizar_Click()

xibi-lo no modo maximizado.

Page 22: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 22 / 39

Dim ESTILO As Long

Private Const ESTILO_PROLONGADO = (-20)

Private Const WS_BARRA_TAREFAS = &H40000

Dim hIcone As Long

Private Declare Function ExibirÍcone Lib "user32" Alias "SendMessageA" ( _ ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ LParam As Any) As Long

Private Const FOCO_ICONE = &H80

Private Const ICONE = 0&

Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long

Private Declare Function SetFocus Lib "user32" (ByVal hWnd As Long) As Long

A bibliotecas necessárias são muitas como você pode ter notado acima, mas vale a pena o re -sultado encontrado.

8.1 - Utilizando as Bibliotecas

Para a correta exibição do formulário é necessário utilizar as constantes e funções Api´s no even-to initialize( ) do formulário:

Form_Personalizado = FindWindowA(vbNullString, Me.Caption)ESTILO = IniciaJanela(Form_Personalizado, ESTILO_ATUAL)ESTILO = ESTILO Or WS_CX_MAXIMIZARESTILO = ESTILO Or WS_POPUP 'ESTILO = ESTILO Or WS_CAPTIONMoveJanela Form_Personalizado, ESTILO_ATUAL, (ESTILO)ESTILO = IniciaJanela(Form_Personalizado, ESTILO_PROLONGADO)ESTILO = ESTILO Or WS_BARRA_TAREFASMoveJanela Form_Personalizado, ESTILO_PROLONGADO, ESTILOhIcone = Image1.Picture.HandleCall ExibirÍcone(Form_Personalizado, FOCO_ICONE, ICONE, ByVal hIcone)DrawMenuBar Form_PersonalizadoSetFocus Form_PersonalizadoEnd Sub

8.2 - Verificando a Resolução do Monitor

Private Sub UserForm_Activate()

Page 23: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 23 / 39

Para a exibição do formulário no modo maximizado a verificação da resolução do monitor é im-portante, para que os objetos fiquem sempre bem tabulados no formulário na hora da maximiza-ção.

8.2.1 - A Função

Para a verificação da resolução do monitor basta utilizarmos uma função.

Declarando as API´s:Declare Function GetDesktopWindow Lib "user32" () As LongDeclare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, rectangle As RECT) _

As LongCriando a função:

Dim R As RECT, hWnd As Long, RetVal As Long hWnd = GetDesktopWindow() RetVal = GetWindowRect(hWnd, R) GetScreenResolution = (R.x2 - R.x1) & "x" & (R.y2 - R.y1)End Function

Utilizando a função:If ModAPI.GetScreenResolution = "800x600" ThenMe.Zoom = 130ElseMe.Zoom = 150End If

As duas resoluções mais utilizadas por usuários são "800x600" e "1024x768".

9 - CONCLUSÃO

Apesar de já ter publicado o mesmo assunto em boletim anterior, este é muito mais didático paraquem está apredendo programação em Excel. Uma das diferenças é que este boletim não utilizaa biblioteca D.A.O (Database Access Object) para administrar banco de dados e sim as própriasferramentas do Excel para a administração de estoque.

Neste boletim você aprendeu:

-Criar uma função que fornece os nomes de todas planilhas do aplicativo;-Criar uma função que fornece todas células preenchidas duma determinada coluna;-Criar uma função para inclusão de dados numa tabela;-Criar uma função para baixar mercadorias;-Criar uma função para verificar se um valor numérico é válido;-Criar uma função para verificar se uma mercadoria já está cadastrada;-Criar uma função para a inclusão de um novo produto;

Function GetScreenResolution() As String

Page 24: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 24 / 39

-Criar uma função para verificar a resolução do monitor;

Este Boletim é uma publicação mensal do portal www.tudosobrexcel.com

Fábio Maurício dos Santos [email protected] Contador ,Controller, Analista de VBA e WebMaster Sócio-proprietário de EXCELlência Soluções em VBA

Page 25: ADMINISTRANDO ESTOQUE

Boletim nº29 ADMINISTRANDO ESTOQUES NO EXCEL

Excellencia Soluções em VBA www.tudosobrexcel.com Página: 25 / 39

Fundador do portal: www.tudosobrexcel.com/

Page 26: ADMINISTRANDO ESTOQUE

Controle de Estoque em Thursday 22 Nissan Thursday

Categorias Quantidade Total

#VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!#VALUE! #VALUE! #VALUE!

Page 27: ADMINISTRANDO ESTOQUE

Vinhos

04/13/2023 Page 27 de 39

1352 R$ 30,606.99Denominação Quantidade Custo Venda Total

Argentino Branco Alto Chardonnay TERRAZAS Garrafa 750ml 13 8.50 10.63 138.13

Argentino Branco BLOSSOM HILL Garrafa 750ml 18 20.30 25.38 456.75

Argentino Branco Chardonnay ALAMOS Garrafa 750ml 10 49.90 62.38 623.75

Argentino Branco Chardonnay ANGARO Garrafa 750ml 9 20.90 26.13 235.13

Argentino Branco Chardonnay ASTICA Garrafa 750ml 7 17.50 21.88 153.13

Argentino Branco Chardonnay BALBI Garrafa 750ml 6 30.50 38.13 228.75

Argentino Branco Chardonnay Barrancas FINCA FLICHMAN Garrafa 750ml 12 19.90 24.88 298.50

Argentino Branco Chardonnay BENJAMIN Garrafa750ml 11 16.50 20.63 226.88

Argentino Branco Chardonnay CABALLERO Garrafa 750ml 9 51.90 64.88 583.88

Argentino Branco Chardonnay Chenin TRIVENTO Garrafa 750ml 7 21.70 27.13 189.88

Argentino Branco Chardonnay FÉBUS Garrafa 750ml 3 28.50 35.63 106.88

Argentino Branco Chardonnay FINCA FLICHMAN Garrafa 750ml 1 18.90 23.63 23.63

Argentino Branco Chardonnay FINCA LAS MORAS Garrafa 750ml 13 23.30 29.13 378.63

Argentino Branco Chardonnay FÚRIA Garrafa 750ml 22 27.50 34.38 756.25

Argentino Branco Chardonnay GRAFFIGNA Garrafa 750ml 11 22.90 28.63 314.88

Argentino Branco Chardonnay LA SIERRA Garrafa 750ml 10 32.10 40.13 401.25

Argentino Branco Chardonnay LATITUDE 33 Garrafa 750ml 4 34.90 43.63 174.50

Argentino Branco Chardonnay MAM Reserva Garrafa 750ml 8 40.30 50.38 403.00

Argentino Branco Chardonnay MEDRANO Garrafa 750ml 18 16.50 20.63 371.25

Argentino Branco Chardonnay PRIVADO Garrafa 750ml 2 31.10 38.88 77.75

Argentino Branco Chardonnay PRIVADO Garrafa 750ml 22 12.00 38.00 836.00

Argentino Branco Chardonnay SALENTEIN Garrafa 750ml 1 62.50 78.13 78.13

Argentino Branco Chardonnay SAN TELMO Garrafa 750ml 7 25.50 31.88 223.13

Argentino Branco Chardonnay Semillon SEPTIMA Garrafa 750ml 7 33.90 42.38 296.63

Argentino Branco Chardonnay Semillon TRILOGIA Garrafa 750ml 6 22.50 28.13 168.75

Argentino Branco Chardonnay TERRAZAS Reserva Garrafa 750ml 1 79.90 99.88 99.88

Argentino Branco Chardonnay Torrontes RIO DE PLATA Garrafa 750ml 21 25.50 31.88 669.38

Argentino Branco MARQUES DE LA COLINA Garrafa 700ml 38 9.79 12.24 465.03

Argentino Branco NEW AGE Garrafa 750ml 11 17.90 22.38 246.13

Argentino Branco RINCON DE OURO Garrafa 750ml 3 11.90 14.88 44.63

Argentino Branco SANTA ISABEL Garrafa 750ml 3 10.50 13.13 39.38

Nacional Rosado Licoroso Doce GÓES Garrafa 870ml 8 7.43 9.29 74.30

Nacional Rosé Cabernet France CHATEAU DUVALIER Garrafa 750ml 11 13.50 16.88 185.63

Nacional Rosé CHATEAU DUVALIER Garrafa 750ml 11 13.50 16.88 185.63

Nacional Rosé Gamay ALMADÉN Garrafa 750ml 13 13.50 16.88 219.38

C2
Stock total
F2
Valeur totale du stock
Page 28: ADMINISTRANDO ESTOQUE

Vinhos

04/13/2023 Page 28 de 39

Denominação Quantidade Custo Venda TotalNacional Rosé Suave CHALISE Garrafa 750ml 46 5.49 6.86 315.68

Nacional Tinto Assemblage SALTON Garrafa 750ml 20 15.70 19.63 392.50

Nacional Tinto Cabernet ALMADÉN Garrafa 750ml 21 13.50 16.88 354.38

Nacional Tinto Cabernet Franc CHATEAU DUVALIER Garrafa 750ml 22 12.40 15.50 341.00

Nacional Tinto Cabernet Sauvignon ADEGA DO VALLE Garrafa 750ml 31 20.90 26.13 809.88

Nacional Tinto Cabernet Sauvignon BARÃO DE LANTIER Reserva Garrafa 750ml 7 40.50 50.63 354.38

Nacional Tinto Cabernet Sauvignon BOTTICELLI Garrafa 750ml 38 18.70 23.38 888.25

Nacional Tinto Cabernet Sauvignon Classic SALTON Garrafa 750ml 19 18.10 22.63 429.88

Nacional Tinto Cabernet Sauvignon FAMÍLIA PIAGENTINI Garrafa 750ml 51 14.90 18.63 949.88

Nacional Tinto Cabernet Sauvignon FORESTIER Garrafa 750ml 10 25.10 31.38 313.75

Nacional Tinto Cabernet Sauvignon MARCUS JAMES Garrafa 375ml 24 10.20 12.75 306.00

Nacional Tinto Cabernet Sauvignon MARCUS JAMES Garrafa 750ml 17 16.55 20.69 351.69

Nacional Tinto Cabernet Sauvignon Syrah ADEGA DO VALE Garrafa 750ml 10 20.90 26.13 261.25

Nacional Tinto Carbenet Franc FORESTIER Garrafa 750ml 10 18.10 22.63 226.25

Nacional Tinto CHÂTEAU DUVALIER Garrafa 750ml 12 12.40 15.50 186.00

Nacional Tinto Classic Tannat SALTON Garrafa 750ml 3 18.10 22.63 67.88

Nacional Tinto Col Tannat BOTTICELLI Garrafa 750ml 6 21.70 27.13 162.75

Nacional Tinto de Mesa Seco CHALISE Garrafa 750ml 45 5.49 6.86 308.81

Nacional Tinto de Mesa Seco CHAPINHA Garrafa 750ml 48 5.95 7.44 357.00

Nacional Tinto de Mesa Seco GOES 4,5 Litros 30 25.50 31.88 956.25

Nacional Tinto de Mesa Seco GÓES Garrafa 870ml 61 5.75 7.19 438.44

Nacional Tinto de Mesa Seco PIAGENTINI Garrafa 720ml 59 5.33 6.66 393.09

Nacional Tinto de Mesa Suave CHAPINHA Garrafa 750ml 71 4.98 6.23 441.98

Nacional Tinto de Mesa Suave DOM BOSCO Garrafa 880ml 18 6.45 8.06 145.13

Nacional Tinto de Mesa Suave GÓES Garrafa 870ml 45 5.75 7.19 323.44

Nacional Tinto de Mesa Suave PIAGENTINI Garrafa 720ml 38 5.33 6.66 253.17

Português Branco ALANDRA Garrafa 750ml 3 34.70 43.38 130.13

Português Branco ALENTEJANO MONTADO Garrafa 750ml 11 19.90 24.88 273.63

Português Branco CALAMARES Garrafa 750ml R$ 3 44.10 55.13 165.38

Português Branco D´ouro EVEL Garrafa 750ml 8 36.30 45.38 363.00

Português Branco DÃO TERRAS ALTAS Garrafa 750ml 7 29.10 36.38 254.63

Português Branco DÃO VISTA DO VALE Garrafa 750ml 6 35.30 44.13 264.75

Português Branco DOURO POUSADA Garrafa 750ml 5 42.50 53.13 265.63

Português Branco ESPORÃO Garrafa 750ml 3 60.70 75.88 227.63

Português Branco JOÃO PIRES 750ml 4 54.10 67.63 270.50

Português Branco LANCERS Garrafa 750ml 18 24.50 30.63 551.25

Page 29: ADMINISTRANDO ESTOQUE

Vinhos

04/13/2023 Page 29 de 39

Denominação Quantidade Custo Venda TotalPortuguês Branco MONTE VELHO Garrafa 750ml 4 47.50 59.38 237.50

Português Branco MOSCATEL DE SETÚBAL Garrafa 750ml 9 48.50 60.63 545.63

Português Branco QUINTA DA ESPIGA Garrafa 750ml 8 36.10 45.13 361.00

Português Branco Sauvignon PRIMUM Garrafa 750ml 3 60.90 76.13 228.38

Português Branco SUALDEIA Garrafa 750ml 13 20.90 26.13 339.63

Português Rosé CALAMARES 750ml 2 36.30 45.38 90.75

Português Tinto ALANDRA Garrafa 750ml 8 38.30 47.88 383.00

Português Tinto AVELEDA ESTREMAD Garrafa 750ml 6 40.50 50.63 303.75

Português Tinto Bairrada ALIANÇA Garrafa 750ml 14 24.10 30.13 421.75

Português Tinto CABEÇA DE TOIRO Reserva Garrafa 750ml 3 70.90 88.63 265.88

Português Tinto CAVE DO DUQUE Garrafa 750ml 18 23.50 29.38 528.75

Português Tinto Classic PERIQUITA Garrafa 750ml 7 78.70 98.38 688.63

Português Tinto CORTELLO Garrafa 750ml 8 29.70 37.13 297.00

Português Tinto D` AVILLEZ Garrafa 750ml 6 90.30 112.88 677.25

Português Tinto D´ouro POUSADA Garrafa 750ml 18 35.50 44.38 798.75

Português Tinto DA TALHA Garrafa 750ml 9 49.90 62.38 561.38

Português Tinto Dão VISTA DO VALE 750ml 13 27.90 34.88 453.38

Português Tinto de Mesa BEIRA SERRA Garrafa 750ml 3 32.30 40.38 121.13

Português Tinto DOURO ACÁCIO Garrafa 750ml 1 125.00 156.25 156.25

Português Tinto Douro VILA REGIA Garrfa 750ml 1 44.90 56.13 56.13

Sucos 10 0.50 0.63 6.25

Page 30: ADMINISTRANDO ESTOQUE

Champagne

04/13/2023 Page 30 de 39

818 17,428.56Denominação Quantidade Custo Venda Total

Champagne Brut CHANDON Garrafa 750ml 3 34.90 43.63 130.88

Champagne Brut Excellence CHANDON Garrafa 750ml 1 83.30 104.13 104.13

Champagne Brut GREVILLE Garrafa 750ml 7 34.30 42.88 300.13

Champagne Brut SALTON Garrafa 750ml 18 16.90 21.13 380.25

Champagne CHADON Brut Conjunto com 3 Garrafas de 187ml 3 51.50 64.38 193.13

Champagne Chandon Brut AYRTON SENNA Garrafa 750ml 2 51.10 63.88 127.75

Champagne CHANDON Demi Seco Conjunto com 3 Garrafas de 180ml 3 51.50 64.38 193.13

Champagne Demi Sec CHANDON Garrafa 750ml 11 34.90 43.63 479.88

Champagne Demi Sec GREVILLE Garrafa 750ml 9 34.30 42.88 385.88

Champagne Demi Sec SALTON Garrafa 750ml 18 16.90 21.13 380.25

Champagne Passion CHANDON Garrafa 750ml 11 34.90 43.63 479.88

Champagne Rosé Brut DE GREVILLE Garrafa 750ml 7 34.30 42.88 300.13

Champagne Rouge CHANDON Garrafa 750ml R$ 34,90 28 5.97 7.46 208.95

Eapumante de Morango sem Álcool CERESER Garrafa 600ml 3 33.90 42.38 127.13

Espumante de Uva sem Álcool CERESER Garrafa 660ml 44 5.97 7.46 328.35

Espumante Doce Moscatel SALTON Garrafa 750ml 18 16.66 20.83 374.85

Espumante Família PIAGENTINI Garrafa 750ml 17 19.30 24.13 410.13

Espumante Italiano Asti CINZANO Garrafa 750ml 21 29.50 36.88 774.38

Espumante Meio Doce SALTON Garrafa 660ml 40 9.86 12.33 493.00

Espumante Ouro Brut SALTON Reserva Garrafa 750ml 3 34.90 43.63 130.88

Espumante Prosecco Brut SALTON Garrafa 750ml 6 27.92 34.90 209.40

Espumante Volpi Brut SALTON Garrafa 750ml 3 32.50 40.63 121.88

Espumante Yong de Sidra CERESER Garrafa 300ml 48 3.63 4.54 217.80

Espumante Young de Pêssego CERESER Garrafa 300ml 48 3.63 4.54 217.80

Espumante Young Morango CERESER Garrafa 300ml 51 3.63 4.54 231.41

Filtrado de Morango CERESER Garrfa 660ml 68 6.07 7.59 515.95

Filtrado de Pêssego CERESER Garrafa 660ml 75 6.07 7.59 569.06

Filtrado Rosé AMÁLIA Garrafa 660ml 74 3.87 4.84 357.98

Cava Espanhola Brut CRISTALINO Garrafa 750ml 3 38.30 47.88 143.63

Cava Espanhola Cordon Negro FREIXENET Garrafa 750ml 8 49.90 62.38 499.00

Cava Espanhola Semi Sec CODORNIU Garrafa 750ml 7 52.90 66.13 462.88

Cava Espanhola Semi Seca Carta Nevada FREIXENET Garrafa 750ml 6 47.70 59.63 357.75

Champagne Espanhola Brut CODORNIU Garrafa 750ml 9 52.90 66.13 595.13

Champagne Francês Brut Imperial MOET CHANDON Garrafa 375ml 1 103.00 128.75 128.75

Champagne Francês Brut Imperial MOET CHANDON Garrafa 750ml 1 185.00 231.25 231.25

C2
Stock total
F2
Valeur totale du stock
Page 31: ADMINISTRANDO ESTOQUE

Champagne

04/13/2023 Page 31 de 39

Denominação Quantidade Custo Venda Total Champagne Francês Brut Ponsardin VEUVE CLICQUOT Garrafa 375ml 1 103.00 128.75 128.75

Champagne Francês Brut VEUVE CLICQUOT Garrafa 750ml 1 199.00 248.75 248.75

Champagne Francês Demi Sec FRANCOIS MONTAND Garrafa 750ml 7 35.70 44.63 312.38

Champagne Francês Demi Sec VEUVE CLICQUOT Garrafa 750ml 1 199.00 248.75 248.75

Champagne Francês FRANCOIS MONTAND Garrafa 750ml 8 35.70 44.63 357.00

Champagne PIPER HEIDSIECK Garrafa 750ml 1 139.00 173.75 173.75

Espumante Argentino Brut DUBOIS Garrafa 750ml 18 22.70 28.38 510.75

Espumante Argentino Cuveé Especiale MUMM Garrafa 750ml 15 29.10 36.38 545.63

Espumante Francês Blanc de Blancs Brut OPÉRA Garrafa 750ml 16 36.50 45.63 730.00

Espumante Francês Brut BARON DARIGNAC Garrafa 750ml 4 27.10 33.88 135.50

Espumante Francês Brut GRANDIAL Garrafa 750ml 11 25.70 32.13 353.38

Espumante Francês Brut POL CLEMENT Garrafa 750ml 2 33.30 41.63 83.25

Espumante Francês Brut SAUMUR MOUS Garrafa750ml 2 41.90 52.38 104.75

Espumante Francês Demi Sec GRANDIAL Garrafa 750ml 7 25.70 32.13 224.88

Espumante Francês Demi-Seco SAUMUR Garrafa 750ml 3 41.90 52.38 157.13

Espumante Italiano Asti FONTANAFREDA Garrafa 750ml 1 63.10 78.88 78.88

Espumante Italiano Brut PROSECCO TOSTI Garrafa 750ml 1 41.50 51.88 51.88

Espumante Italiano Pinot-Chardonnay CINZANO Garrafa 750ml 3 30.70 38.38 115.13

Espumante Italiano Prosecco CASTEL PICCO Garrafa 750ml 7 41.90 52.38 366.63

Espumante Italiano Prossecco SPERONE Garrafa 750ml 3 32.90 41.13 123.38

Espumante Italiano Prossecco VALDORO Garrafa 750ml 1 29.90 37.38 37.38

Espumante Prosecco Italiano CINZANO Garrafa 750ml 1 29.50 36.88 36.88

Frisante Italiano Amabile Cavicchioli MALAVASIA Garrafa 750ml 32 31.90 39.88 1,272.01

Page 32: ADMINISTRANDO ESTOQUE

Aperitivos

04/13/2023 Page 32 de 39

198Denominação Quantidade Custo Venda

Aperitivo Amargo UNDERBERG Garrafa 920ml 13 23.10 28.88

Aperitivo Bitter CAMPARI Garrafa 900ml 7 17.50 21.88

Aperitivo Blanc SAN RAPHAEL Garrafa 750ml 9 18.50 23.13

Aperitivo Classic Citrus KEEP COOLER 275ml 18 3.43 4.29

Aperitivo Classic Morango KEEP COOLER 275ml 24 3.40 4.25

Aperitivo Classic Pêssego KEEP COOLER 275ml 30 3.40 4.25

Aperitivo Classic Uva KEEP COOLER 275ml 13 3.39 4.24

Aperitivo CYNAR Garrafa 900ml 11 9.28 11.60

Aperitivo de Coco LANÇA CHAMA Garrafa 445ml 11 11.10 13.88

Aperitivo MALIBU Garrafa 700ml 28 27.30 34.13

C2
Stock total
Page 33: ADMINISTRANDO ESTOQUE

Aperitivos

04/13/2023 Page 33 de 39

3,083.86 €Total

375.38

153.13

208.13

77.18

102.00

127.50

55.09

127.60

154.01

955.50

F2
Valeur totale du stock
Page 34: ADMINISTRANDO ESTOQUE

Whisky

04/13/2023 Page 34 de 39

95 1,889.66Denominação Quantidade Custo Venda Total

Vodka Americana SKYY Garrafa 750ml 3 58.50 73.13 219.38

Vodka BAIKAL Garrafa 980ml 18 8.90 11.13 200.25

Vodka BOLS Garrafa 1Litro 17 16.90 21.13 359.13

Vodka JHIVAGO Garrafa 970ml 24 4.33 5.41 129.90

Vodka ORLOFF Garrafa 1Litro 3 16.87 21.09 63.26

Vodka SMIRNOFF Garrafa 998ml 8 14.50 18.13 145.00

Vodka Sueca Kurant ABSOLUT Garrafa 750ml 1 69.50 86.88 86.88

Vodka Sueca ABSOLUT Garrafa 750ml 1 69.50 86.88 86.88

Vodka Sueca Mandrin ABSOLUT Garrafa 750ml 1 69.50 86.88 86.88

Vodka Sueca Peppar ABSOLUT Garrafa 750ml 1 69.50 86.88 86.88

Vodka Twist Cítrus SMIRNOFF Garrafa 1Litro 3 18.90 23.63 70.88

Vodka Twist Frutas Vermelhas SMIRNOFF Garrafa 1Litro 8 18.90 23.63 189.00

Vodka Twist Laranja SMIRNOFF Garrafa 1Litro 7 18.90 23.63 165.38

C2
Stock total
F2
Valeur totale du stock
Page 35: ADMINISTRANDO ESTOQUE

Licor

04/13/2023 Page 35 de 39

67 2,407.50Denominação Quantidade Custo Venda Total

Licor Africano Cremoso AMARULA Garrafa 375ml 2 35.70 44.63 89.25

Licor Africano Cremoso AMARULA Garrafa 750ml 3 63.90 79.88 239.63

Licor AMARETTO DELL ORSO Garrafa 700ml 1 35.10 43.88 43.88

Licor Argentino TIA MARIA Garrafa 700ml 8 41.10 51.38 411.00

Licor Australiano MOZART WHITE Garrafa 500ml 1 113.00 141.25 141.25

Licor COINTREAU Garrafa 700ml 3 50.70 63.38 190.13

Licor de Cacau STOCK Garrafa 720ml 11 21.10 26.38 290.13

Licor de Chocolate STOCK Garrafa 720ml 9 21.10 26.38 237.38

Licor de Coco STOCK Garrafa 720ml 9 21.10 26.38 237.38

Licor de Creme de Café STOCK Garrafa 720ml 7 21.10 26.38 184.63

Licor de Creme de Cassis STOCK Garrafa 720ml 7 21.10 26.38 184.63

Licor de Curaçau Blue STOCK Garrafa 720ml 6 21.10 26.38 158.25

C2
Stock total
F2
Valeur totale du stock
Page 36: ADMINISTRANDO ESTOQUE

Cerveja

04/13/2023 Page 36 de 39

1450 3,653.73Denominação Quantidade Custo Venda Total

Bebida à Base de Chopp e Vinho DRAFIT WINE Lata 350ml 22 2.27 2.84 62.43

Cerveja BRAHMA Malzbier Lata 350ml 113 1.67 2.09 235.89

Cerveja Alemã Dunkel ERDINGER Garrafa 500ml 18 7.49 9.36 168.53

Cerveja Alemã EISENBAHN Long Neck 355ml 11 3.43 4.29 47.16

Cerveja Alemã ERDINGER Bock Garrafa 500ml 7 7.95 9.94 69.56

Cerveja Alemã ERDINGER com 2 Garrafas 500ml Dunkel, Hefe + 1 copo 8 34.50 43.13 345.00

Cerveja Alemã ERDINGER Webbier Garrafa 500ml 18 7.45 9.31 167.63

Cerveja ANTARCTICA Long Neck 355ml 80 1.07 1.34 107.00

Cerveja ANTARCTICA Malzbier Long Neck 355ml 81 1.63 2.04 165.04

Cerveja ANTARCTICA Pilsen Lata 350ml 118 1.07 1.34 157.83

Cerveja BADEN Bitter 1999 Garrafa 600ml 11 8.93 11.16 122.79

Cerveja BADEN Bock Especial 600ml 8 7.63 9.54 76.30

Cerveja BADEN Cristal Pilsen 600ml 21 6.85 8.56 179.81

Cerveja BADEN Dark Ale Stout Garrafa 600ml 7 8.93 11.16 78.14

Cerveja BADEN Golden Lager Garrafa 600ml 6 8.93 11.16 66.98

Cerveja BADEN Red Ale Especial 600ml 7 8.29 10.36 72.54

Cerveja BAVARIA Lata 350ml 120 0.95 1.19 142.50

Cerveja BAVARIA Long Neck 355ml 100 0.95 1.19 118.75

Cerveja BAVARIA Premium Lata 350ml 80 1.19 1.49 119.00

Cerveja BAVARIA Premium Long Neck 355ml 66 1.19 1.49 98.17

Cerveja BAVARIA sem Álcool Lata 350ml 10 1.45 1.81 18.13

Cerveja BAVARIA sem Álcool Long Neck 355ml 11 1.53 1.91 21.04

Cerveja BOHEMIA Escura Garrafa 500ml 7 3.99 4.99 34.91

Cerveja BOHEMIA Lata 350ml 66 1.32 1.65 108.90

Cerveja BOHEMIA Long Neck 355ml 24 1.32 1.65 39.60

Cerveja BOHEMIA Weiss Garrafa 550ml 30 4.03 5.04 151.13

Cerveja BRAHMA Chopp Lata 350ml 220 1.16 1.45 319.00

Cerveja BRAHMA Extra Long Neck 355ml 100 1.64 2.05 205.00

Cerveja BRAHMA Liber com 0% de Álcool Lata 350ml 50 1.55 1.94 96.88

Cerveja BRAHMA Liber com 0% de Álcool Long Neck 355ml 30 1.55 1.94 58.13

C2
Stock total
F2
Valeur totale du stock
Page 37: ADMINISTRANDO ESTOQUE

Refrigerante

04/13/2023 Page 37 de 39

2266Denominação Quantidade Custo

Água Tônica ANTARCTICA Lata 350ml 22 1.25

Água Tônica CLASSIC Garrafa 1 Litro 13 1.53

Água Tônica CLASSIC Lata 350ml 3 0.98

Água Tônica CLASSIC Limão Pet 1 Litro 10 1.53

Água Tônica SCHWEPPES Lata 350ml 22 1.39

Refrigerante ANTARCTICA Guaraná Garrafa 2 Litros 110 2.05

Refrigerante ANTARCTICA Guaraná Garrafa 237ml 118 0.79

Refrigerante ANTARCTICA Guaraná Garrafa 600ml 90 1.55

Refrigerante ANTARCTICA Guaraná Lata 350ml 94 1.09

Refrigerante ANTARCTICA Guaraná ZON Lata 350ml 7 1.33

Refrigerante ANTARCTICA Soda Limão Garrafa 2 Litros 111 1.89

Refrigerante ANTARCTICA Soda Limão Garrafa 600ml 30 1.45

Refrigerante ANTARCTICA Soda Limão Lata 350ml 24 1.07

Refrigerante ANTÁRTICA Guaraná Garrafa 2,5 Litros 50 2.69

Refrigerante ARUBA Cola Garrafa 2 Litros 70 0.99

Refrigerante ARUBA Guaraná Garrafa 2 Litros 113 0.99

Refrigerante ARUBA Laranja Garrafa 2 Litros 70 0.99

Refrigerante ARUBA Limão Garrafa 2 Litros 18 0.99

Refrigerante BACANA Guaraná Garrafa 2 Litros 150 1.45

Refrigerante BACANA Limão Garrafa 2 Litros 111 1.45

Refrigerante BACANA Tutti Frutti Garrafa 2 Litros 80 1.53

Refrigerante CLASSIC Citrus Lata 350ml 11 0.98

Refrigerante COCA COLA Garrafa 1,5 Litros 101 2.09

Refrigerante COCA COLA Garrafa 2 Litros 100 2.95

Refrigerante COCA COLA Garrafa 2,5 Litros 30 3.49

Refrigerante COCA COLA Garrafa 600ml 90 1.69

Refrigerante COCA COLA Lata 350ml 180 1.19

Refrigerante DOLLY Cola Garrafa 2 Litros 210 1.59

Refrigerante DOLLY Guaraná Garrafa 2 Litros 218 1.59

Cerveja BRAHMA Liber com 0% de Álcool Long Neck 355ml 10 1.55

C2
Stock total
Page 38: ADMINISTRANDO ESTOQUE

Refrigerante

04/13/2023 Page 38 de 39

4,415.88Venda Total

1.56 34.38

1.91 24.86

1.23 3.68

1.91 19.13

1.74 38.22

2.56 281.88

0.99 116.53

1.94 174.38

1.36 128.08

1.66 11.64

2.36 262.24

1.81 54.38

1.34 32.10

3.36 168.13

1.24 86.63

1.24 139.84

1.24 86.63

1.24 22.28

1.81 271.88

1.81 201.19

1.91 153.00

1.23 13.48

2.61 263.86

3.69 368.75

4.36 130.88

2.11 190.12

1.49 267.75

1.99 417.38

1.99 433.28

1.94 19.38

F2
Valeur totale du stock
Page 39: ADMINISTRANDO ESTOQUE

Diversos

04/13/2023 Page 39 de 39

90 1,245.11Denominação Quantidade Custo Venda Total

Batida 3 3.00 3.75 11.25

Batida de Amendoim BAIANINHA Garrafa 900ml 22 7.23 9.04 198.83

Batida de Coco BAIANINHA Garrafa 900ml 13 7.23 9.04 117.49

Batida de Maracujá BAIANINHA Garrafa 900ml 18 11.10 13.88 249.75

Batida de Pêssego BAIANINHA Garrafa 900ml 21 7.23 9.04 189.79

Catuaba PODEROSO Garrafa 900ml R$ 6,05 7 7.23 9.04 63.26

C2
Stock total
F2
Valeur totale du stock