Ir ao conteúdo

Posts recomendados

Postado

Pessoal estou criando um simples controle de estoque aqui na empresa, fiz uma uma lista de validação de dados na planilha principal e dentro dela eu tenho a coluna "Quantidade de Entrada" e "Quantidade de saída", gostaria de ao escolher o equipamento na coluna "Equipamento" da lista e ao colocar a quantidade ou de entrada ou saída, ele envie para outra aba a quantidade atual do estoque, eu consegui fazer porém os dados não fica armazenado, logo quando apago o dado, pra digitar outro valor ele substitui para o último, lembrando que o dado tem que ser armazenado de acordo com o equipamento escolhido, se possível só realizar a ação mediante o acionamento de um botão por macro.

 

 

O exemplo da planilha está em anexo, esse é um modelo que fiz, porém quem tiver dicas de um controle de estoque bom informem rs

controle_estoque - BETA.xlsx

Postado

Olá, Paulo.

Sugestão - Na planilha 'equipamento' utilize a coluna 'B' para armazenar o valor do saldo. Assim, limpe as colunas 'B:D' e na célula 'B1' coloque "saldo", sem as aspas.

Instale o código abaixo em um módulo comum, assim:
1. copie o código daqui
2. a partir da planilha em que estão os dados tecle 'Alt+F11' para acessar o editor de VBA
3. no menu do editor >> Inserir >> Módulo
4. cole o código na janela em branco que vai se abrir
5. feito! 'Alt+Q' para retornar para a planilha e testar

para rodar o código:
6. tecle 'Alt+F8' >> selecione a macro correspondente >> Executar, ou insira um botão na planilha 'principal' e vincule-o à macro ou vincule-a a um atalho de teclado (Alt+F8 > Opções).

Sub AtualizaEstoque() Dim k As Long  If Application.CountA(Range("A2:C2")) < 3 Then Exit Sub  With Sheets("equipamento")   k = .Range("A2:A" & _    .Range("A2").End(xlDown).Row).Find([A2]).Row   If [B2] = "entrada" Then    .Cells(k, 2) = .Cells(k, 2) + [C2]   Else    If .Cells(k, 2) < [C2] Then     MsgBox "estoque insuficiente": Exit Sub    Else: .Cells(k, 2) = .Cells(k, 2) - [C2]    End If   End If   End WithEnd Sub


funcionamento - na planilha 'principal' preencha o intervalo 'A2:C2' e rode o código; o código irá atualizar o saldo do equipamento selecionado em 'A2', na planilha 'equipamento'

dicas: na planilha 'principal',
1. você aplicou Validação de Dados em 'A2' e tomou como base um Nome vinculado a um intervalo fixo. Se você precisar aumentar a lista abaixo daquele intervalo, será obrigado a atualizar o intervalo vinculado ao Nome. Utilize Intervalo Dinâmico Nomeado na Validação, assim a atualização será automática.
2. você aplicou Validação de Dados em 'B2' e tomou como base um Nome originado na planilha 'acao', que me parece só existe para isso, e ocultou-a. O Nome é formado somente pelas palavras "entrada" e "saida", e não sofrerá alterações, então você pode aplicar aquelas palavras diretamente na Validação sem precisar criar uma planilha e um Nome só para essa finalidade.

Na Caixa da Validação, coloque:

    Permitir: Lista

    Fonte: entrada;saída

Depois, poderá excluir a planilha 'acao'.
 

Postado

Fiz e deu certo, aproveitando sua presença, tive uma ideia de que a cada equipamento escolhido ele zere a ação e a quantidade, para obrigar a pessoa digitar uma nova, e caso nao tenha nenhuma acao e nenhuma quantidade der uma mensagem para escolher.

Postado

 

... tive uma ideia de que a cada equipamento escolhido ele zere a ação e a quantidade, para obrigar a pessoa digitar uma nova, e caso nao tenha nenhuma acao e nenhuma quantidade der uma mensagem para escolher.

 

Coloque este  código no lugar do anterior.

Sub AtualizaEstoque() Dim k As Long  If Application.CountA(Range("A2:C2")) < 3 Then   MsgBox "preencha Equipamento/Ação/Quantidade"   Exit Sub  End If  With Sheets("equipamento")   k = .Range("A2:A" & _    .Range("A2").End(xlDown).Row).Find([A2]).Row      If [B2] = "entrada" Then    .Cells(k, 2) = .Cells(k, 2) + [C2]   Else        If .Cells(k, 2) < [C2] Then     MsgBox "estoque insuficiente": [C2] = "": Exit Sub    Else: .Cells(k, 2) = .Cells(k, 2) - [C2]    End If   End If    [A2:C2] = ""   End WithEnd Sub

 

o código irá limpar "Equipamento, Ação e Quantidade", se quiser limpar somente "Ação e Quantidade" altere este comando [A2:C2] = "" para [b2:C2] = ""

Postado

o código irá limpar "Equipamento, Ação e Quantidade", se quiser limpar somente "Ação e Quantidade" altere este comando [A2:C2] = "" para [b2:C2] = ""

Muito bom, certinho rs, é possível ocultar e proteger a aba equipamento? para que ninguem possa digitar valor a não ser que o mesmo seja inserido pela macro, tentei porém o vb nao consegue em aba protegida.

Postado

Acrescente a segunda linha abaixo.

 

se a planilha for protegida sem senha utilize esta forma

With Sheets("equipamento")   .Protect UserInterfaceOnly:=True

se for protegida com senha utilize esta outra (a senha é PTrolão, altere se quiser)

With Sheets("equipamento")   .Protect "PTrolão", UserInterfaceOnly:=True

obs.

1. se quiser manter a senha em sigilo proteja também o projeto VBA

2. para responder aqui no fórum digite na caixa 'Responder', abaixo do último post, só clique em 'Citar' se for necessário

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...