Puxar Informação de...
 
Notifications
Clear all

Puxar Informação de duas ou mais Sheets

17 Posts
2 Usuários
0 Reactions
2,352 Visualizações
(@ueleodoro)
Posts: 133
Estimable Member
Topic starter
 

Minha dúvida esta em consultar e listar informações de duas sheets diferentes. No caso estou utilizando o código abaixo para realizar uma listagem de certos dados. A rotina busca os dados na Sheets("dados1") e lista eles na Sheets("listagem"), porém eu gostaria que também buscasse dados na Sheets("dados2") obedecendo a informação listada na linha "Sheets("listagem").Cells(Linha, 1) = Sheets("dados1").Cells(lin, 1)".

Ou seja, tenho duas fontes com dados que se completam. Vamos supor na 'Dados1' tenho as informações: cód, carro, cor. Na "Dados2" tenho as informações: cód, nome, endereço, cidade. A informação comum é cód, e a listagem é para juntar as duas informações cód, carro, cor, nome endereço e cidade.

Espero que alguém possa me ajudar.

Sheets("listagem").Range("A2:k5000").ClearContents

lin = 2
Linha = 2

Do Until Sheets("dados1").Cells(lin, 2) = ""
'If Sheets("dados1").Cells(lin, 2) Like "*" & Me.cbsequencia & "*" Then _

If Sheets("dados1").Cells(lin, 20) = "" Then _

Sheets("listagem").Cells(Linha, 1) = Sheets("dados1").Cells(lin, 1)
Sheets("listagem").Cells(Linha, 2) = Sheets("dados1").Cells(lin, 2)

Linha = Linha + 1

End If
lin = lin + 1
Loop

 
Postado : 18/02/2013 5:28 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Enquanto isso poste seu arquivo modelo compactado!!

Att

 
Postado : 18/02/2013 8:42 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Está superficial as informações, voce pega todos os dados da sheet Dados1 e "salva" em listagem. Para pegar os dados de outra Sheet poderia "duplicar" o mesmo codigo logo após o termino de primeiro, mas pelas informações não há garantia de trazer os dados na linha correspondente;. talvez se as duas sheets tiverem os mesmos dados e mesma ordem

lin = 2
Linha = 2
Do Until Sheets("dados1").Cells(lin, 2) = ""
'If Sheets("dados1").Cells(lin, 2) Like "*" & Me.cbsequencia & "*" Then _
If Sheets("dados1").Cells(lin, 20) = "" Then _
Sheets("listagem").Cells(Linha, 1) = Sheets("dados1").Cells(lin, 1)
Sheets("listagem").Cells(Linha, 2) = Sheets("dados1").Cells(lin, 2)
Linha = Linha + 1
End If
lin = lin + 1
Loop
'Aqui acrescenta outro loop para sheet dados2
lin = 2
Linha = 2
Do Until Sheets("dados2").Cells(lin, 2) = ""
'If Sheets("dados2").Cells(lin, 2) Like "*" & Me.cbsequencia & "*" Then _
If Sheets("dados2").Cells(lin, 20) = "" Then _
Sheets("listagem").Cells(Linha, 3) = Sheets("dados2").Cells(lin, 1)
Sheets("listagem").Cells(Linha, 4) = Sheets("dados2").Cells(lin, 2)
Linha = Linha + 1
End If
lin = lin + 1
Loop
 
Postado : 18/02/2013 11:23 am
(@ueleodoro)
Posts: 133
Estimable Member
Topic starter
 

Criei um arquivo modelo mais simplificado que minhas planilhas, mas com o mesmo objetivo.

Possui 3 pastas: Listar, Dados1 e Dados2

Veja a pasta Listar lá tem as colunas SEQUENCIA, MATRICULA, VALOR VENDA, NOME, CIDADE e ESTADO.

Os dados: SEQUENCIA, MATRICULA e VALOR VENDA estão na pasta Dados2

Os dados: MATRICULA, NOME, CIDADE e ESTADO estão na pasta Dados1

Teste os botões, e veja que nem todas as informações são listadas. Essa é minha dificuldade, não sei como listar informações de duas pastas diferentes.

Espero que tenho ficado mais claro.

Aguardo.

 
Postado : 18/02/2013 11:37 am
(@ueleodoro)
Posts: 133
Estimable Member
Topic starter
 

Reinaldo sua idéia é boa, mas da problema com a ordem, não colocando os dados na linha correta....

 
Postado : 18/02/2013 1:31 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Foi o que pensei, se não houver resposta, tentarei "ver" seu modelo amanhã durante o dia.

 
Postado : 18/02/2013 1:40 pm
(@ueleodoro)
Posts: 133
Estimable Member
Topic starter
 

Muito obrigado Reinaldo...Se tiver como fazer isso vai ajudar muito e evitar de ficar duplicando informacoes entre planilhas...

 
Postado : 18/02/2013 3:41 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Segue uma possibilidade, veja se está no caminho

Sub Listando()
'Declaração de variaveis
Dim lRow1 As Integer, lRow2 As Integer, Lin As Integer, Linha As Integer, aLin As Integer
Sheets("Listar").Range("A4:Z5000").ClearContents

lRow1 = Sheets("Dados1").Cells(Cells.Rows.Count, "A").End(xlUp).Row
lRow2 = Sheets("Dados2").Cells(Cells.Rows.Count, "A").End(xlUp).Row

Linha = 4
For Lin = 2 To lRow1

    Sheets("Listar").Cells(Linha, 2) = Sheets("Dados1").Cells(Lin, 1)
    Sheets("Listar").Cells(Linha, 4) = Sheets("Dados1").Cells(Lin, 2)
    Sheets("Listar").Cells(Linha, 5) = Sheets("Dados1").Cells(Lin, 3)
    Sheets("Listar").Cells(Linha, 6) = Sheets("Dados1").Cells(Lin, 4)
'Localiza o registro em Dados2
    aLin = Application.Match(Sheets("Dados1").Cells(Lin, 1), Sheets("dados2").Range("B:B"), 0)
        If Not IsError(aLin) Then
            Sheets("listar").Cells(Linha, 1) = Sheets("dados2").Cells(aLin, 1)
            Sheets("listar").Cells(Linha, 3) = Sheets("dados2").Cells(aLin, 3)
        End If
    Linha = Linha + 1
Next
End Sub
 
Postado : 19/02/2013 7:18 am
(@ueleodoro)
Posts: 133
Estimable Member
Topic starter
 

Reinaldo é bem isso mesmo que estou procurando, porém tem a condição 1 ou 2 em Dados2 na ultima coluna, no exemplo a rotina tem que listar os dados das duas tabelas porém apenas na condição 1 ou na condição 2. Como sou um iniciante perneta eu não entendi algumas coisas do seu código. Como as declarações lRow1 e lRow2, aLin e a utilização do If Not IsError(aLin)...em suma quase nada. Se tiver com tempo gostaria que me explicasse.

Outra coisa será que tem como adicionar um nivel condicional para a listagem no tipo explicado acima listar somente se for condição 1 ou 2 dependendo o caso.

Obrigado.

 
Postado : 19/02/2013 5:52 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não entendi nada da explicação "Condicional".
Qto ao codigo:
as variaveis lRow1 e lRow2 "pegam" a ultima linha (com dados) das Planilhas Dados1 e Dados2.
aLin é para a procura do registro de dados1 em dados2, para garantir que "ache" o registro e dados corretos; o retorno e um numero correspondente a linha onde foi encontrado o registro.
o if not isError, é para caso não seja encontrado o registro de dados1 em dados2, ou seja se não encontrar, nao faça nada

 
Postado : 19/02/2013 6:42 pm
(@ueleodoro)
Posts: 133
Estimable Member
Topic starter
 

Entendi o funcionamento.

Sobre a Condional.

Olha O código original:

" If Sheets("Dados2").Cells(lin, 4) = 1 Then _"

Onde "1" é uma condição para listar ou não uma determinada linha. Esse "1" é encontrado na coluna 4 de Dados2. Observa que tem um dado apenas com o numero "2".

então devemos listar apenas os que apresentar o numero "1".

 
Postado : 19/02/2013 8:52 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Então assim?

Sub Listando1()
'Declaração de variaveis
Dim lRow1 As Integer, lRow2 As Integer, Lin As Integer, Linha As Integer, aLin As Integer
Sheets("Listar").Range("A4:Z5000").ClearContents

lRow1 = Sheets("Dados1").Cells(Cells.Rows.Count, "A").End(xlUp).Row
lRow2 = Sheets("Dados2").Cells(Cells.Rows.Count, "A").End(xlUp).Row

Linha = 4
For Lin = 2 To lRow2
    If Sheets("Dados2").Cells(Lin, 4) = 1 Then
            Sheets("listar").Cells(Linha, 1) = Sheets("dados2").Cells(Lin, 1)
            Sheets("Listar").Cells(Linha, 2) = Sheets("Dados2").Cells(Lin, 2)
            Sheets("listar").Cells(Linha, 3) = Sheets("dados2").Cells(Lin, 3)
'Localiza o registro em Dados2
    aLin = Application.Match(Sheets("Dados2").Cells(Lin, 2), Sheets("dados1").Range("A1:A" & lRow1), 0)
        If Not IsError(aLin) Then
            Sheets("Listar").Cells(Linha, 4) = Sheets("Dados1").Cells(aLin, 2)
            Sheets("Listar").Cells(Linha, 5) = Sheets("Dados1").Cells(aLin, 3)
            Sheets("Listar").Cells(Linha, 6) = Sheets("Dados1").Cells(aLin, 4)
        End If
    Linha = Linha + 1
    End If
Next
End Sub
 
Postado : 20/02/2013 5:36 am
(@ueleodoro)
Posts: 133
Estimable Member
Topic starter
 

Compreendi...

Sobre a Condicional: da uma olhada em Dados2 na coluna 4, essa coluna é condicional. Tem a condição 1 e 2. E a rotina deve listar se for 1. Não deve listar tudo.

 
Postado : 20/02/2013 7:21 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Voce não testou a rotina no meu post acima? Foi modificada para o que fazer o que pediu.

 
Postado : 20/02/2013 7:52 am
(@ueleodoro)
Posts: 133
Estimable Member
Topic starter
 

Reinaldo na pasta Dados2 na coluna 4 tem a CONDICIONAL pode ser 1 ou 2, note que apenas um dado é 2. A rotina deve poder listar se é 1 ou se 2.

 
Postado : 20/02/2013 8:26 am
Página 1 / 2