Atualizar dados de ...
 
Notifications
Clear all

Atualizar dados de uma planilha para outra e se não existir os dados inserir  

  RSS

lspetrucci
(@lspetrucci)
New Member
Entrou: 1 mês atrás
Posts: 3
17/08/2020 12:38 pm  

Boa tarde a todos!

 

Estou com um novo desafio e estou precisando de uma ajuda de vocês.

Tenho 2 planilhas, uma com o nome de "Abertura" e a outra com o nome de "Ongoing", as duas planilhas não 100% iguais, a planilha "Abertura" tem algumas colunas a mais que a planilha "Ongoing", mas os dados que preciso atualizar e/ou inserir entre uma planilha e a outra são iguais. Então, o que eu preciso é:

 

1 - Percorra todos os registros na planilha "Abertura", verificando se o valor do campo "loja" existe na planilha "Ongoing", se existir, os dados da planilha "Ongoing" serão atualizados de acordo com os dados dos mesmos campos da planilha "Abertura". 

 

Campos tabela Abertura

Loja Chamado IN Chamado Field Motivo da abertura Func. loja SH/RUA Duração Abertura Conclusão Status Field Status TSS Problemas Solução Técnica

 

Campos tabela Ongoing

Chamado IN Chamado Field Motivo da abertura Loja Abertura Conclusão Status Field Status TSS Problemas Solução Técnica

 OBS: Observer que na tebale "Abertura" existem mais colunas que a tabela "Ongoing", mas existem campos em comum entre as duas planilhas e são estes campos que preciso atualizar da planilha "Atualizar" para "Ongoing". 

 

Para o item acima, eu conseguir fazer o código e está funcionando. Segue abaixo:

 

Sub inserir_atualizar()

Application.ScreenUpdating = False

'Rotina de checagem se existe a loja na TAB Ongoing e atualizar os dados com base na planilha Abertura
'---------------------------------------------------------------------------------------------------------------------------

Dim w_Abertura As Worksheet
Dim w_Ongoing As Worksheet
Dim loja As String
Dim linha, linha1 As Integer

Set w_Ongoing = Sheets("Ongoing")
Set w_Abertura = Sheets("Abertura")

linha = 2

Do While w_Abertura.Cells(linha, 1) <> ""

ultimalinha = w_Ongoing.Cells(Rows.Count, "A").End(xlUp).Row
j = w_Ongoing.Cells(Rows.Count, "A").End(xlUp).Row + 1

For i = 2 To ultimalinha

  loja = w_Ongoing.Cells(i, 4)

  If w_Abertura.Cells(linha, 1) = loja Then

     w_Ongoing.Cells(i, 1) = w_Abertura.Cells(linha, 2)
     w_Ongoing.Cells(i, 2) = w_Abertura.Cells(linha, 3)  
     w_Ongoing.Cells(i, 3) = w_Abertura.Cells(linha, 4) 
     w_Ongoing.Cells(i, 4) = w_Abertura.Cells(linha, 1)
     w_Ongoing.Cells(i, 5) = w_Abertura.Cells(linha, 8)
     w_Ongoing.Cells(i, 6) = w_Abertura.Cells(linha, 9)
     w_Ongoing.Cells(i, 7) = w_Abertura.Cells(linha, 10)
     w_Ongoing.Cells(i, 8) = w_Abertura.Cells(linha, 11)
     w_Ongoing.Cells(i, 9) = w_Abertura.Cells(linha, 12)
     w_Ongoing.Cells(i, 10) = w_Abertura.Cells(linha, 13)

     linha = linha + 1

 End If

  Next

     MsgBox "Dados atualizado com sucesso."

Loop

Application.ScreenUpdating = False

End Sub

2 - Percorra todos os registros na planilha "Abertura", verificando se o valor do campo "loja" existe na planilha "Ongoing", se não existir, será inserido uma nova linha "Ongoing" e copiar estes dados que não existem da planilha"Abertura" para planilha "Ongoing". Lembrando que as colunas da planilha "Abertura" não são totalmente iguais a planilha "Ongoing".

 

Obrigado!

Cordialmente; 


Editado pela Moderação. Motivo: Utilize o botão Código (< >) para inserir código VBA ou Fórmulas.


ResponderCitar (Quote)
Televisaos
(@televisaos)
Eminent Member
Entrou: 3 meses atrás
Posts: 27
18/08/2020 4:11 pm  

Bom dia @lspetrucci,

Uma função PROCV não resolveria o seu caso?

Att, Televisaos


ResponderCitar (Quote)
lspetrucci
(@lspetrucci)
New Member
Entrou: 1 mês atrás
Posts: 3
19/08/2020 7:33 pm  

@televisaos

Obirgado por sua resposta!!!

Infelizmente não, pois na planilha "Ongoing" eu mantenho um histórico dos dados e na planilha "Abertura" é onde entram os novos dados e/ou atualizam dados existentes, então, se na planilha "Abertura" tiver a entrada de um novo dado o mesmo deve ser add na planilha "Ongoing"  e utilizando o PROCV isso não iria funcionar.


ResponderCitar (Quote)
lspetrucci
(@lspetrucci)
New Member
Entrou: 1 mês atrás
Posts: 3
16/09/2020 6:24 pm  

Alguém consegue me ajudar. Infelizmente até o momento não conseguir achar uma solução para o meu problema.

 

Obrigado!

Cordialmente.


ResponderCitar (Quote)
Anderson
(@anderson)
Eminent Member
Entrou: 6 meses atrás
Posts: 49
16/09/2020 7:08 pm  

Eu fiz estes vídeos para te ajudar:

 

https://youtu.be/ZPkgQU8HQhE

https://youtu.be/WiidU5SfzKw

Para aprender Excel VBA, acesse o canal EVBA no Youtube.


ResponderCitar (Quote)
Raygsson
(@raygsson)
Eminent Member
Entrou: 2 meses atrás
Posts: 21
16/09/2020 7:12 pm  

Aparentemente fazer isso é bem simples, tente desta forma pra sempre que não localizar a loja da aba "Abertura"  na aba "Ongoing" incluir os novos dados em uma linha vazia na aba "Ongoing":

LinhaFinal = Sheet2.Range("A1048576").End(xlUp).Row
For LinhaAtual = 2 To LinhaFinal

Valor = Sheet2.Range("A" & LinhaAtual)
Existe = Application.VLookup(Valor, Sheet1.Range("D2:D1048576"), 1, 0)

If IsError(Existe) Then

LinhaVazia = Sheet1.Range("A1048576").End(xlUp).Row + 1

Sheet1.Range("A" & LinhaVazia) = Sheet2.Range("B" & LinhaAtual)
Sheet1.Range("B" & LinhaVazia) = Sheet2.Range("C" & LinhaAtual)
Sheet1.Range("C" & LinhaVazia) = Sheet2.Range("D" & LinhaAtual)
Sheet1.Range("D" & LinhaVazia) = Sheet2.Range("A" & LinhaAtual)
Sheet1.Range("E" & LinhaVazia) = Sheet2.Range("H" & LinhaAtual)
Sheet1.Range("F" & LinhaVazia) = Sheet2.Range("I" & LinhaAtual)
Sheet1.Range("G" & LinhaVazia) = Sheet2.Range("J" & LinhaAtual)
Sheet1.Range("H" & LinhaVazia) = Sheet2.Range("K" & LinhaAtual)
Sheet1.Range("I" & LinhaVazia) = Sheet2.Range("L" & LinhaAtual)
Sheet1.Range("J" & LinhaVazia) = Sheet2.Range("M" & LinhaAtual)

End If

Next

ResponderCitar (Quote)
Compartilhar: