Página 1 de 2

Extrair dados de uma planilha com base em outra

Enviado: 14 Abr 2015 às 16:05
por OrfeuVBA
Boa tarde

Estou trabalhando na planilha em anexo onde tenho diversas informações. Criei o código abaixo para extrair as informações da Plan2 (que é a planilha base) para a Plan1 (onde será gerado o relatório). Porém ao executar o código apenas consigo copiar os dados se na coluna F estiverem na mesma ordem (algo que ao fazer o relatório semanalmente não acontecerá), caso a ordem da Plan1 não seja a mesma que a Plan2 o código para.

Gostaria da ajuda dos colegas para que mesmo que a ordem da coluna F das duas folhas não seja a mesma a Plan1 seja preenchida.

Abaixo o código que estou usando:

Sub teste()

ultimacelula = Plan2.Cells(Rows.Count, 6).End(xlUp).Row
lin = 2

For i = 2 To ultimacelula
If Plan2.Cells(i, 6) = Plan1.Cells(lin, 6) Then
Plan1.Cells(lin, 2) = Plan2.Cells(i, 2)
Plan1.Cells(lin, 3) = Plan2.Cells(i, 3)
Plan1.Cells(lin, 7) = Plan2.Cells(i, 7)
Plan1.Cells(lin, 8) = Plan2.Cells(i, 8)
Plan1.Cells(lin, 9) = Plan2.Cells(i, 9)
lin = lin + 1
Else
MsgBox "Cota não encontrada " & Plan1.Cells(lin, 6).Value
lin = lin + 1
End If
Next

End Sub

A linha amarela na Plan1 não possui a cota na Plan2. A linha em azul na Plan1 a cota existe mas o código não busca as informações.

Re: Extrarir dados de uma planilha com base em outra

Enviado: 14 Abr 2015 às 16:32
por alexandrevba
Boa tarde!!

Eu não sei se entendi...
Veja se é isso
Código: Selecionar todos
Sub teste()

ultimacelula = Plan2.Cells(Rows.Count, 6).End(xlUp).Row
lin = 2

For i = 2 To ultimacelula
    If Plan2.Cells(i, 6) = Plan1.Cells(i, 6) Then 'linha alterada
        Plan1.Cells(lin, 2) = Plan2.Cells(i, 2)
        Plan1.Cells(lin, 3) = Plan2.Cells(i, 3)
        Plan1.Cells(lin, 7) = Plan2.Cells(i, 7)
        Plan1.Cells(lin, 8) = Plan2.Cells(i, 8)
        Plan1.Cells(lin, 9) = Plan2.Cells(i, 9)
        lin = lin + 1
    Else
        'MsgBox "Cota não encontrada " & Plan1.Cells(lin, 6).Value
        lin = lin + 1
    End If
Next

End Sub
Att

Extrarir dados de uma planilha com base em outra

Enviado: 14 Abr 2015 às 16:54
por OrfeuVBA
Boa tarde,

Obrigado pelo retorno, mas infelizmente não deu certo. Se executar o código irá parar na linha 56, pois o código não encontra a cota 1134. O que preciso nesse caso é quando não encontrar a cota na planilha base o código continue a procura para as demais cotas da coluna, porém ele esta parando na cota não encontrada e não executa mais.

Att

Re: Extrarir dados de uma planilha com base em outra

Enviado: 14 Abr 2015 às 18:42
por laennder
Acrescente a linha abaixo no início do código, e veja se atende.
Código: Selecionar todos
On Error Resume Next

Extrarir dados de uma planilha com base em outra

Enviado: 15 Abr 2015 às 09:21
por OrfeuVBA
Bom dia,

Infelizmente não deu certo, quando o código roda e chega na cota 1134 a mensagem de cota não atendida aparece, ao clicar em OK para o código continuar ele informa que a cota 8522 também não foi encontrada, porém se olhar na Plan2 existe essa cota com as informações, mas o código não trás as informações para a Plan1 como deveria.

Extrarir dados de uma planilha com base em outra

Enviado: 15 Abr 2015 às 09:23
por laennder
Você pode anexar a sua planilha? Assim fica mais fácil ajudar.

Extrarir dados de uma planilha com base em outra

Enviado: 15 Abr 2015 às 09:27
por OrfeuVBA
Anexo planilha para analise.

Grato

Extrarir dados de uma planilha com base em outra

Enviado: 15 Abr 2015 às 09:57
por laennder
Não tinha visto que já tinha anexado a planilha no início do tópico. Tem que ser por macro o que você quer? Se entendi bem, não é só fazer uma busca do que está na plan2 e jogar na plan1? Dá pra fazer utilizando ÍNDICE e CORRESP por exemplo.

Extrarir dados de uma planilha com base em outra

Enviado: 15 Abr 2015 às 10:22
por OrfeuVBA
Na verdade precisa ter macro. Esse é um relatório em arquivo txt que faço a formatação toda através de macro. Possuo outras macros antes dessa onde faço a formação do arquivo txt para o Excel. Para continuar a formatação do relatório preciso buscar algumas informações em uma planilha padrão. Esse é um relatório txt semanal gerado em um programa da empresa onde trabalho que preciso acrescentar outras informações e quero automatizar esse relatório devido o trabalho que é fazer tudo manualmente toda semana, perco muito tempo realizando a tarefa.

Re: Extrarir dados de uma planilha com base em outra

Enviado: 15 Abr 2015 às 15:00
por alexandrevba
Boa tarde!!

Tem como dar mais detalhes?
seu objetivo é verificar quais dados da coluna F da guia Plan1 e se são iguais
a coluna F da guia Plan2, caso sim, popular as colunas B:C e G:I da guia Plan1 ?

Seria isso?

Att

Extrarir dados de uma planilha com base em outra

Enviado: 15 Abr 2015 às 15:16
por OrfeuVBA
Isso mesmo. Só que com o código abaixo que postei apenas consigo fazer até a cota (coluna F) da Plan1 1134, quando o código passa para a cota 8522 ele compara e informa que não existe essa cota na Plan2, porém ela existe.
Código: Selecionar todos
Sub teste()

ultimacelula = Plan2.Cells(Rows.Count, 6).End(xlUp).Row
lin = 2

For i = 2 To ultimacelula
    If Plan2.Cells(i, 6) = Plan1.Cells(lin, 6) Then
        Plan1.Cells(lin, 2) = Plan2.Cells(i, 2)
        Plan1.Cells(lin, 3) = Plan2.Cells(i, 3)
        Plan1.Cells(lin, 7) = Plan2.Cells(i, 7)
        Plan1.Cells(lin, 8) = Plan2.Cells(i, 8)
        Plan1.Cells(lin, 9) = Plan2.Cells(i, 9)
        lin = lin + 1
    Else
        MsgBox "Cota não encontrada " & Plan1.Cells(lin, 6).Value
        lin = lin + 1
    End If
Next

End Sub

Re: Extrarir dados de uma planilha com base em outra

Enviado: 15 Abr 2015 às 15:21
por alexandrevba
Boa tarde!!

Isso porque essa linha só vai contar o que ver na guia "Plan2", que neste caso é 690 linhas!!!
Código: Selecionar todos
Sub TestandoLinhas()
   ultimacelula = Plan2.Cells(Rows.Count, 6).End(xlUp).Row
   MsgBox "tem " & ultimacelula & " linhas na guia Plan2"
End Sub
O seu loop vai gira em torno das 690 linhas
Código: Selecionar todos
For i = 2 To ultimacelula
Att

Extrarir dados de uma planilha com base em outra

Enviado: 15 Abr 2015 às 15:27
por OrfeuVBA
Desculpa não consegui entende. Por favor poderia esclarecer melhor?

Re: Extrarir dados de uma planilha com base em outra

Enviado: 15 Abr 2015 às 16:15
por alexandrevba
Boa tarde!!

Eu disse, que seu loop vai percorrer uma quantidade de linhas baseado na quantidade de dados na coluna F da guia Plan1.

Ex:
Se na coluna F da guia Plan1, tem 10 linhas, o loop vai percorrer (para comparar), 10 vezes!

Se na comparação uma guia tem mais linha que a outra, ou você define um número fixo (grande), ou usa a guia que terá mais linhas que a outra.

Att

Extrarir dados de uma planilha com base em outra

Enviado: 15 Abr 2015 às 16:23
por OrfeuVBA
Eu alterei o código para buscar a Plan1 que no exemplo possui mais linhas e mesmo assim não retorna as demais informações.

Mesmo assim obrigado pela ajuda.

Re: Extrarir dados de uma planilha com base em outra

Enviado: 16 Abr 2015 às 09:33
por alexandrevba
Bom dia!!

Orfeu, eu sinto em lhe informa que eu creio não poder lhe ajudar :(

Eu consigo verificar via VBA quais dados da coluna F tem em uma guia que não tem na outra, eu consigo compara e inserir os dados que você deseja que seja feito, o problema está na falta de padrão para que isso ocorra.

Você tem dados (colunas vazias B:C, G:I), na guia Plan1, e referente a coluna F, onde há dados duplicados, me faz entender que esses dados devem receber da guia Plan2, caso os dados da coluna F, sejam iguais, mas o problema é que seus dados da guia Plan1, estão com "lacunas" onde é composto por dados preenchidos (em uma parte) e vazios (em outra), isso nas colunas (B:C, G:I) .

Acontece que devido a esse fato, eu não consigo perceber um padrão logico, se eu classificar esses dados (para os preenchidos ficarem juntos de todos preenchidos), me leva crer que os dados repetidos ou não faz sentido te-los na guia, ou não podem ser classificados (mudar suas posições).
:? :?


Att

Extrarir dados de uma planilha com base em outra

Enviado: 16 Abr 2015 às 09:37
por OrfeuVBA
Obrigado!!!

Re: Extrarir dados de uma planilha com base em outra

Enviado: 16 Abr 2015 às 09:45
por alexandrevba
Bom dia!!

Talvez se você conseguisse explicar de uma forma bem manual (imagina que você está fazendo passo-a-passo, tudo na mão), ou gravasse uma macro, somente então talvez eu poderia lhe ajuda.

Já tentou Gravar uma Macro

Att

Extrarir dados de uma planilha com base em outra

Enviado: 16 Abr 2015 às 10:00
por OrfeuVBA
O que estou tentando fazer é como se fosse um PROCV da Plan1 com as informações da Plan2, ou seja, procurar o valor da coluna F em Plan1 na Plan2 e trazer as informações.

Porque não faço um PROCV? Devido o arquivo ser um relatório txt, ele não vem no formato da Plan1, possuo outras macros que já fazem essa formatação. O que preciso agora é buscar as informações das colunas B:C e G:I da Plan1 na Plan2, pois as demais colunas já vem preenchidas quando o relatório txt é gerado.

Pensei em fazer através do método Find mas infelizmente não consegui estruturar o código a busca não retorna nada ou aparece alguma mensagem de erro.

Att.

Re: Extrarir dados de uma planilha com base em outra

Enviado: 16 Abr 2015 às 13:33
por laennder
Agora eu acho que eu entendi. Veja se funciona.
Código: Selecionar todos
Sub PreencheDados()

ultimacelula = Plan1.Cells(Rows.Count, 6).End(xlUp).Row
Set Rng = Plan2.Range("F:F") ' Coluna de Cotas

lin = 2

For i = 2 To ultimacelula
    
    On Error Resume Next
    indice = Application.WorksheetFunction.Match(Plan1.Cells(i, 6), Rng, 0)
    
    If Err > 0 Then
        'valor não encontrado
        Err.Clear
    Else
        'tranfere os dados
        Plan1.Cells(i, 2) = Plan2.Cells(indice, 2)
        Plan1.Cells(i, 3) = Plan2.Cells(indice, 3)
        Plan1.Cells(i, 7) = Plan2.Cells(indice, 7)
        Plan1.Cells(i, 8) = Plan2.Cells(indice, 8)
        Plan1.Cells(i, 9) = Plan2.Cells(indice, 9)
    End If
    
Next

End Sub