Notifications
Clear all

[Resolvido] Macro procurar valores em uma planilha, excluir e inserir linha

7 Posts
2 Usuários
1 Reactions
2,695 Visualizações
(@tutoelizeu)
Posts: 160
Estimable Member
Topic starter
 

Bom dia!

Exclui os tópicos duplicados e vou tentar reduzir neste, preciso de ajuda pois não estou conseguindo resolver

Eu tenho uma planilha de Follow Up de pedidos, nela eu preciso cobrar as empresas que ainda não enviaram os produtos.

Nesta planilha tenho 3 abas: 1 aba - "Base" onde estão todos os pedidos, 2-aba "Recebidos" e 3-aba "Não recebidos"

Eu preciso de uma macro que olhe na aba "recebidos" coluna "A" "pedidos_item" e verifique se tem na aba "Base" coluna "A" "Pedido_Item", se tiver então exclua as linhas, se não achar então olhe na aba "Não Recebidos" coluna "A" Pedido_Item e se não encontrar na "Base" então inclua a linha.

Se achar não faz nada pois o pedido_item já existe.

Muito obrigado pela ajuda!!!

Abraço.

Elizeu

 
Postado : 23/05/2022 11:36 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Veja se ajuda.

 

Sub FollowUpPedidos()
Application.ScreenUpdating = False
With Sheets("Recebidos")
On Error Resume Next
.ListObjects("Tabela2").AutoFilter.ShowAllData
On Error GoTo 0
.[Q2].FormulaLocal = "=CONT.SE(Tabela1[Pedido_Item];[@[Pedido_Item]])"
.[A1:Q1].AutoFilter 17, ">0"
On Error Resume Next
Application.DisplayAlerts = False
.ListObjects("Tabela2").DataBodyRange.SpecialCells(12).Delete
.ListObjects("Tabela2").AutoFilter.ShowAllData
On Error GoTo 0
.[Q2].FormulaLocal = "=CONT.SE(Tabela3[Pedido_Item];[@[Pedido_Item]])"
.[A1:Q1].AutoFilter 17, "=0"
On Error Resume Next
.Range("B2:P" & .Cells(Rows.Count, 1).End(3).Row).SpecialCells(12).Copy Sheets("Não recebidos").Cells(Rows.Count, 2).End(3)(2)
.ListObjects("Tabela2").AutoFilter.ShowAllData
.Columns(17).Delete
End With
End Sub

Osvaldo

 
Postado : 24/05/2022 5:59 pm
(@tutoelizeu)
Posts: 160
Estimable Member
Topic starter
 

Bom dia Osvaldo!

Obrigado pela ajuda! Mas infelizmente não deu certo.

Eu fiz uma parte do que preciso, nessa planilha eu tenho 3 abas:

Base = Aqui eu vejo todos os pedidos que forem feitos, alguns foram recebidos e outros ainda não.

Recebidos = Nesta aba somente pedidos que foram recebidos

N_recebidos = Nesta aba os pedidos que eu sei que não foram recebidos

Eu consegui identificar com a aba "Recebido" os pedidos que estão na aba "Base" (Vlookup) e consegui excluir estes pedidos da aba "Base" (Macro Excluir linhas)

Eu consegui identificar na aba "N_recebidos", quais são os pedidos que não estão na aba "Base", que não foram recebidos ainda, estes são pedidos novos e estes coloquei na aba "N_recebidos" coluna "Q" (Status2), como "Pedidos_Novos" (Vlookup)

O que eu preciso agora:

Uma macro que lei na aba "N_recebidos", na coluna "Q" (Status2), quai são os "Pedidos_Novos" e copie a linha toda para a aba "Base", porque estes pedidos não estão na aba "Base" e eu preciso acrescenta-los.

Colar sempre na ultima linha da aba "Base", aumentando assim aba "Base"

Eu agradeço muito a ajuda, pois este projeto eu preciso entregar e não estou conseguindo fazer

Preciso de uma macro que faça tudo ou somente este último.

Obrigado!

 

 

 

 
Postado : 25/05/2022 10:18 am
(@osvaldomp)
Posts: 857
Prominent Member
 

@tutoelizeu

O código que eu sugeri faz duas ações, conforme abaixo, que foi o que entendi que você quer fazer:

1. apaga na planilha Recebidos os registros que estão repetidos na planilha Base
(que são os registros das linhas 12, 32 e 33)

2. replica da planilha Recebidos na planilha Não recebidos os registros que estão na primeira e não estão repetidos na segunda
(que são todos os 39 registros que restaram da primeira ação acima)

Nas duas ações acima o critério utilizado para a comparação dos registros foi Pedido_Item, coluna A.
Se não for isso que você quer, então explique, se possível de forma resumida e objetiva.

Osvaldo

 
Postado : 25/05/2022 7:02 pm
(@tutoelizeu)
Posts: 160
Estimable Member
Topic starter
 

Boa noite!

Desculpe se não fiz me entender é quase isso que eu preciso. É ao contrario

O correto é:

1. apaga na planilha Base os registros que estão repetidos na planilha Recebidos
(que são os registros das linhas 12, 32 e 33)

2. replica da planilha Base (A partir da ultima linha preenchida), as linhas da planilha Não recebidos com os registros que estão na segunda (Planilha Não recebidos) e não estão repetidos na primeira (Planilha Base)
(que são todos os 39 registros que restaram da primeira ação acima)

Nas duas ações acima o critério utilizado para a comparação dos registros foi Pedido_Item, coluna A. correto

Eu vou trabalhar e atualizar sempre a planilha Base, que o vai diminuir o numero de dados por conta da exclusão dos pedidos repetidos, ou vai aumentar o numero de dados por conta da inserção dos pedidos não recebidos e que ainda não encontram - se na planilha  Base

Tentei alterar e não consegui.

Consegue me ajudar por favor?

Muito obrigado!

 

 
Postado : 26/05/2022 8:17 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Fiz as alterações. Testaí.

1. apaga na planilha Base os registros que estão repetidos na planilha Recebidos
(serão apagados os registros das linhas 2, 3 e 4)

2. replica da planilha Base (A partir da ultima linha preenchida), na planilha Base (a partir da primeira linha vazia) as linhas da planilha Não recebidos com os registros que estão na segunda (Planilha Não recebidos) e não estão repetidos na primeira (Planilha Base)
(serão replicados 347 registros)

Os registros serão colados na planilha Base na primeira linha vazia e a partir da coluna B, assim as fórmulas existentes na coluna A serão estendidas automaticamente após a colagem.
No entanto, se você quiser colar a partir da coluna A e não da B, e assim não estender as fórmulas para os registros colados, então altere conforme abaixo:
de ---> .Range("B2:Q" ...
para ---> .Range("A2:Q"
e
de ---> Sheets("Base").Cells(Rows.Count, 2).End(3)(2)
para ---> Sheets("Base").Cells(Rows.Count, 1).End(3)(2)

 

Sub FollowUpPedidosV2()
Application.ScreenUpdating = False
With Sheets("Base")
On Error Resume Next
.ListObjects("Tabela1").AutoFilter.ShowAllData
On Error GoTo 0
.[V2].FormulaLocal = "=CONT.SE(Tabela2[Pedido_Item];[@[Pedido_Item]])"
.[A1:V1].AutoFilter 22, ">0"
On Error Resume Next
Application.DisplayAlerts = False
.ListObjects("Tabela1").DataBodyRange.SpecialCells(12).Delete
.ListObjects("Tabela1").AutoFilter.ShowAllData
.Columns(22).Delete: .Columns(30).Copy: .Columns(22).Insert xlToRight
End With
With Sheets("Não recebidos")
On Error Resume Next
.ListObjects("Tabela3").AutoFilter.ShowAllData
On Error GoTo 0
.[R2].FormulaLocal = "=CONT.SE(Tabela1[Pedido_Item];[@[Pedido_Item]])"
.[A1:R1].AutoFilter 18, "=0"
On Error Resume Next
.Range("B2:Q" & .Cells(Rows.Count, 1).End(3).Row).SpecialCells(12).Copy Sheets("Base").Cells(Rows.Count, 2).End(3)(2)
On Error GoTo 0
.ListObjects("Tabela3").AutoFilter.ShowAllData
.Columns(18).Delete: .Columns(30).Copy: .Columns(18).Insert xlToRight
End With
Application.CutCopyMode = False
End Sub

 

Osvaldo

 
Postado : 26/05/2022 11:31 pm
(@tutoelizeu)
Posts: 160
Estimable Member
Topic starter
 

Osvaldo,

Você é fantástico!

Deu certo!

Muito obrigado!!!

 
Postado : 27/05/2022 12:29 pm
Osvaldomp reacted