Ir ao conteúdo
  • Cadastre-se

Armazenamento de dados no excel, mesmo que o dado seja alterado


Posts recomendados

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

Link para o comentário
Compartilhar em outros sites

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'.
 

Link para o comentário
Compartilhar em outros sites

 

... 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] = ""

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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...