Extração de dados com criterio em planilha


#1

Ola galera, estou com uma duvida que acredito ser simples. Estou em um projeto onde preciso automatizar uma planilha de controle de notas fiscais de compra e de venda. Estou tentando criar um form onde ao clicar em uma nota fiscal dentro de um listbox ele consulte na planilha se a NF clicada existe um valor igual em uma célula de uma coluna pré determinada na planilha, se for ele trará os dados que se repetem de uma determinada coluna (itens da nota).
Estou usando esse código para tal e apresenta cada vez um erro diferente, agradeço quem puder ajudar.

Sub extrair_dados_criterio()
Dim lin As Integer, j As Byte
j = 2 'começo da linha a ser procurada

With Planilha1
Do Until Sheets(“Planilha1”).Cells(lin, 3).Value = Empty
’For lin = 2 To .Range(“A” & Rows.Count).End(x1Up).Row
If .Range(“C” & lin) = txtNF1.Value Then
Planilha2.Range(“B” & j) = .Range(“A” & lin)
Planilha2.Range(“C” & j) = .Range(“B” & lin)
Planilha2.Range(“D” & j) = .Range(“C” & lin)
j = j + 1
End If
’Next lin
Loop
End With
End Sub


#2

Fala, @adeilson. Tudo bem?

Eu achei este código um pouco confuso. Mas uma primeira coisa que notei é que a variável lin não é iniciada. Pode ser este o problema.


#3

Opa Xavier, é que eu meio que mandei um trecho do código, estou enviando novamente mais uma tentativa frustrada de preencher o segundo list2 box do meu form, assim que o primeiro list1 contar como preenchido e com um valor selecionado. O evento que estou usando para ativar o listbox1 é o “Change”.

Private Sub LstDescricao_Change()
Dim lin As Integer
lin = 2

Do Until Sheets(“Planilha1”).Cells(lin, 3).Value = Empty
If Sheets(“Planilha1”).Cells(lin, 3).Value = LstDescricao.Value Then
txtART1.Value = Sheets(“Planilha1”).Cells(lin, 1).Value
txtCodForn1.Value = Sheets(“Planilha1”).Cells(lin, 2).Value

    txtNF1.Value = Sheets("Planilha1").Cells(lin, 3).Value
        If txtNF1.Value = Sheets("Planilha1").Cells(lin, 3).Value Then
            Do Until Sheets("Planilha1").Cells(lin, 3).Value = Empty
                lstItens1.Value = Planilha1.Range("A" & lin)
                lin = lin + 1
            Loop
        End If
    
    txtQtdItensNf1.Value = Sheets("Planilha1").Cells(lin, 4).Value
    txtFornecedor1.Value = Sheets("Planilha1").Cells(lin, 5).Value
    txtDescricao1.Value = Sheets("Planilha1").Cells(lin, 6).Value
    txtDataEmissao1.Value = Sheets("Planilha1").Cells(lin, 7).Value
    
    Exit Do
End If

lin = lin + 1
Loop

End Sub


#4

@adeilson, você está usando a mesma variável nos dois loops, isso faz com que o seu contador, ao sair do loop interno, já esteja no valor máximo.


#5

Bom dia @xavier, realmente, não me atentei ao fator da mesma variável, porem mesmo fazendo essa alteração, o listbox 2 não traz nenhuma informação, continua vindo em branco. Já tentei chamar de outras formas esses dados mas não consegui Teria alguma sugestão de alteração no próprio código acima?
Agradeço novamente pela atenção.


#6

@adeilson, não sei dizer se este é, de fato, o problema, mas acho que você precisa usar o método additem do ListBox para que o VBA vá adicionando os itens.

https://msdn.microsoft.com/pt-br/library/office/ff835328.aspx