Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Assuntos que não estiverem relacionados as categorias acima. Se não souber em qual categoria sua mensagem se encaixa, envie aqui.
#67408
Olá a todos, gostaria de ajuda em um problema de planilha de estoque.

Eu preciso que sempre que um novo item for adicionado na minha tabela de produtos, automaticamente minha tabela de estoque aumente esse produto na ultima linha, porém, eu não queria simplesmente arrastar a função toda para baixo na tabela de estoque, com "células vazias porém com funções, esperando novos itens", gostaria que fosse algo automático, que quando adicionasse na tabela de produtos, automaticamente o produto fosse adicionado a planilha de estoque, como um "espelhamento" de tabelas.. se alguem puder me ajudar, ficaria muito grato.
#67410
Olá, @Mizzy .

É possível via macro. Se houver interesse então disponibilize uma amostra do seu arquivo Excel com algumas linhas com dados (máximo 5 linhas) e coloque manualmente o resultado desejado. Informe também se após adicionar o novo item na planilha Estoque você quer ordenar os dados naquela planilha.
Mizzy agradeceu por isso
#67411
osvaldomp escreveu: 08 Out 2021 às 16:55 Olá, @Mizzy .

É possível via macro. Se houver interesse então disponibilize uma amostra do seu arquivo Excel com algumas linhas com dados (máximo 5 linhas) e coloque manualmente o resultado desejado. Informe também se após adicionar o novo item na planilha Estoque você quer ordenar os dados naquela planilha.
Muito obrigado Osvaldo!, vou anexar minha planilha amostra. ela está como gostaria que funcionasse, porém, com resultado do Estoque inserido apenas igual ao código da planilha de Produtos, a ideia era com que conforme fosse adicionado itens a planilha de Produtos, a de estoque adicionasse também automaticamente. A ordem pode ser a mesma em ambas, por ordem de adição. Muito obrigado pela ajuda!
Amostra.xlsx
Você não está autorizado a ver ou baixar esse anexo.
#67414
Olá, @Mizzy .

Veja se atende.

Instale uma cópia do código abaixo em um módulo comum, assim:
1. copie o código daqui
2. abra o arquivo, 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 ReplicaProduto / Executar, ou insira na planilha um botão ou uma figura e vincule-o à macro ou vincule-a a um atalho de teclado (Alt+F8 / Opções).
Essas três opções para rodar o código podem ser implantadas isoladamente ou em conjunto.

obs.
1. considerei que ao rodar o código a planilha Produtos será a planilha ativa.
2. o código irá pintar de amarelo a célula que contém o Código (Código do Produto, coluna B ) para sinalizar que aquele Código foi replicado.
Código: Selecionar todos
Sub ReplicaProduto()
 Dim p As Range
  Application.ScreenUpdating = False
  For Each p In Selection
   If Cells(p.Row, 2).Interior.ColorIndex = xlNone And Cells(p.Row, 2) <> "" Then
    Cells(p.Row, 2).Resize(, 2).Copy
    Sheets("Estoque").Cells(Rows.Count, 2).End(3)(2).PasteSpecial xlValues
    Cells(p.Row, 2).Interior.ColorIndex = 6
   End If
  Next p
End Sub
#
funcionamento - após preencher os dados na planilha Produtos selecione os produtos que deseja replicar e rode o código. Para selecionar um produto selecione uma das células na linha correspondente ao produto. Exemplo: após preencher a linha 10 com um novo produto, selecione uma das células no intervalo B10:E10 e rode o código.
Para replicar, pode selecionar de uma vez quantos produtos desejar.
Mizzy agradeceu por isso
#67415
osvaldomp escreveu: 08 Out 2021 às 19:32 Olá, @Mizzy .

Veja se atende.

Instale uma cópia do código abaixo em um módulo comum, assim:
1. copie o código daqui
2. abra o arquivo, 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 ReplicaProduto / Executar, ou insira na planilha um botão ou uma figura e vincule-o à macro ou vincule-a a um atalho de teclado (Alt+F8 / Opções).
Essas três opções para rodar o código podem ser implantadas isoladamente ou em conjunto.

obs.
1. considerei que ao rodar o código a planilha Produtos será a planilha ativa.
2. o código irá pintar de amarelo a célula que contém o Código (Código do Produto, coluna B ) para sinalizar que aquele Código foi replicado.
Código: Selecionar todos
Sub ReplicaProduto()
 Dim p As Range
  Application.ScreenUpdating = False
  For Each p In Selection
   If Cells(p.Row, 2).Interior.ColorIndex = xlNone And Cells(p.Row, 2) <> "" Then
    Cells(p.Row, 2).Resize(, 2).Copy
    Sheets("Estoque").Cells(Rows.Count, 2).End(3)(2).PasteSpecial xlValues
    Cells(p.Row, 2).Interior.ColorIndex = 6
   End If
  Next p
End Sub
#
funcionamento - após preencher os dados na planilha Produtos selecione os produtos que deseja replicar e rode o código. Para selecionar um produto selecione uma das células na linha correspondente ao produto. Exemplo: após preencher a linha 10 com um novo produto, selecione uma das células no intervalo B10:E10 e rode o código.
Para replicar, pode selecionar de uma vez quantos produtos desejar.

Olá Osvaldo, funcionou sim, e agradeço a ajuda. Porém, eu gostaria que fosse algo automático, onde o usuário não precisasse selecionar as linhas que devem ser adicionadas, assim não possibilitando erro humano. Não sei se há uma solução prática.
#67419
Experimente esta outra solução.

Instale uma cópia do código abaixo no módulo da planilha Produtos. Para acessar o módulo clique com o direito na guia daquela planilha e escolha Exibir Código.
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim k As Long
  If Target.Column = 1 Or Target.Column > 5 Or Target.Row < 9 Or _
   Application.CountA(Cells(Target.Row, 2).Resize(, 4)) < 4 Then Exit Sub
  If Application.CountIf(Sheets("Estoque").[B:B], Cells(Target.Row, 2)) Then
   k = Application.Match(Cells(Target.Row, 2), Sheets("Estoque").[B:B], 0)
    MsgBox "O Código inserido já está cadastrado no Estoque na linha " & k: Exit Sub
  Else:
   Application.ScreenUpdating = False
   Cells(Target.Row, 2).Copy
   Sheets("Estoque").Cells(Rows.Count, 2).End(3)(2).PasteSpecial xlValues
  End If
End Sub
#
funcionamento - após o usuário preencher manualmente as células B:E, mesma linha, em qualquer ordem, o código acima irá lançar o Código inserido em B na coluna B da planilha Estoque.
Caso o Código já exista, então será exibida uma mensagem somente.

dica - para responder clique em + Resposta localizado abaixo da última postagem, só clique em Responder com citação se necessário.
Mizzy agradeceu por isso
#67424
Agradeço pela solução Osvaldo, mas estou tendo dificuldades em executar o código. Pois sou muito noob em VBA e Macros.

1- Esse novo código deve substituir o primeiro no módulo, e não ser combinado com o primeiro, certo?

2- Eu ainda necessito de um gatilho para rodar o código, certo? Mas não o encontro para rodar. o primeiro código eu o encontrava nas macros com o nome de ReplicaProduto, mas o mesmo não aconteceu com esse e não consigo encontrá-lo. A menos que o código devesse rodar automaticamente quando adicionado um novo produto, mas isso não aconteceu, e não sei porquê.

Mas agradeço muito toda sua ajuda!
#67425
Mizzy escreveu: 10 Out 2021 às 11:00 1- Esse novo código deve substituir o primeiro no módulo, e não ser combinado com o primeiro, certo?
As duas soluções que passei são distintas, ou você utiliza a primeira ou utiliza a segunda.
Quanto ao módulo em que cada solução deve ser instalada veja comentário abaixo, no final da postagem.

2- Eu ainda necessito de um gatilho para rodar o código, certo?
O gatilho, conforme comentei antes, é a inserção manual de valores nas células.

Mas não o encontro para rodar. o primeiro código eu o encontrava nas macros com o nome de ReplicaProduto, mas o mesmo não aconteceu com esse e não consigo encontrá-lo.
O segundo código não aparece porque é do tipo Private e também porque ele só pode ser disparado por evento efetuado manualmente em alguma célula da planilha, tais como digitar, deletar, colar, e não pode ser disparado pelas vias utilizadas para disparar o primeiro código, como Alt+F8, via botão, via figura.


A menos que o código devesse rodar automaticamente quando adicionado um novo produto, mas isso não aconteceu, e não sei porquê.
Exato, conforme comentei antes: "funcionamento - após o usuário preencher manualmente as células B:E, mesma linha, em qualquer ordem, o código acima irá lançar o Código inserido em B na coluna B da planilha Estoque. "
Cabe ainda comentar que apesar de ser disparado a cada alteração manual efetuada em qualquer célula da planilha, o código só será executado, isto é, só irá replicar o Código na planilha Estoque, se ocorrerem as condições acima comentadas, ou seja, após o usuário alterar alguma célula no intervalo B:E (entenda-se entre as colunas B e E, incluindo as duas colunas), e se estiverem preenchidas TODAS as células naquele intervalo, na mesma linha.
Quanto ao módulo em que deverá ser instalado cada um dos códigos que passei, é preciso diferenciar o que escrevi nas duas soluções sugeridas, pois módulo de planilha é diferente de módulo comum. Com base nos seus comentários, eu suponho que você instalou o segundo código em um módulo comum, e por isso não funciona.

Assim, para instalar o segundo código, diferentemente do primeiro, a instrução a ser seguida é a que coloquei antes: "Instale uma cópia do código abaixo no módulo da planilha Produtos. Para acessar o módulo clique com o direito na guia daquela planilha e escolha Exibir Código."
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord