none
CONSULTAR DADOS DA PLANILHA ? RRS feed

  • Pergunta

  • Pessoal, boa noite!

    Preciso de uma ajuda...

    Tenho uma planilha como nome "BASE", nela eu tenho uma a coluna ("T") onde constam dias de produtos sem venda.

    Preciso de uma macro que possibilite eu buscar desta planilha todos os produtos com mais de 365 dias sem venda e copiá-los para uma outra planilha. Os dados a serem copiados são das colunas A até a coluna V.

    Desde já muito obrigado!

    Abraço.

    segunda-feira, 10 de novembro de 2014 22:25

Respostas

  • Boa noite Everton_Delmiro, como vai?

    Segue um exemplo de filtro avançado que pode ser usado no seu caso:

    Base:

    Código:

     Range("C2:F7").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("I1:I2"), CopyToRange:=Range("L2:O7"), Unique:=False

    Espero que seja útil.

    Abraço.

    • Marcado como Resposta Everton_Delmiro sexta-feira, 14 de novembro de 2014 00:52
    segunda-feira, 10 de novembro de 2014 23:03
  • Olá... 

    Bem não sou expert mas este cod soluciona o que você pede. Claro que pode melhorar, mas fiz em 10 mins kk

    Espero ter ajudado.

    Function fteste()
        'considerando que a coluna dias é a "J" e que elas vão de A até J
        
            
        Dim wb As Workbook
            Set wb = ActiveWorkbook
        Dim ws As Worksheet, base As Worksheet
            Set ws = wb.Sheets(1) 'defina a planilha aqui
            Set base = wb.Sheets(2)
            
        Dim l As Long 'linha
        l = ws.Range("A:A").End(xlDown).Row 'qtde de linhas
        
        Dim rg As Range
            Set rg = ws.Range("A1:J" & l) 'define o range dos dados
            
        
        rg.AutoFilter 'hab o filter
        
        ws.AutoFilter.Sort.SortFields.Add ws.Range("J1:J" & l), , xlDescending, xlSortNormal 'filtro por col j  descendente
        
        rg.AutoFilter 'desabilta o filter
        
        Dim p As Long  'ponteiro
            p = 2
            
        Do While ws.Range("j" & p).Value > 365 'marca até 365 dias
            p = p + 1
        Loop
        base.Range("a1:j" & p).Value = ws.Range("a1:j" & p).Value
            
    End Function

    • Marcado como Resposta Everton_Delmiro sexta-feira, 14 de novembro de 2014 00:51
    quinta-feira, 13 de novembro de 2014 17:13
  • Everton,

    A primeira solução apresentada parece ser adequada para seu caso. Apenas altere o argumento CopyToRange:=Range("L2:O7") por CopyToRange:=Range("L2:O700000"), por exemplo.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Everton_Delmiro sexta-feira, 14 de novembro de 2014 00:52
    quinta-feira, 13 de novembro de 2014 21:28
    Moderador

Todas as Respostas

  • Boa noite Everton_Delmiro, como vai?

    Segue um exemplo de filtro avançado que pode ser usado no seu caso:

    Base:

    Código:

     Range("C2:F7").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("I1:I2"), CopyToRange:=Range("L2:O7"), Unique:=False

    Espero que seja útil.

    Abraço.

    • Marcado como Resposta Everton_Delmiro sexta-feira, 14 de novembro de 2014 00:52
    segunda-feira, 10 de novembro de 2014 23:03
  • Bom dia cara...

    Obrigado pela ajuda, mais na verdade algo um pouco mais complexo. Minha planilha tem mais de 80 mil linhas.

    Preciso de algo que faça uma busca em todas as linhas e quando encontrar itens igual ou maior que 365 dias sem vendas, copie-os e cole-os em uma nova guia da minha pasta de trabalho.

    Mais uma vez muito obrigado!

    Abraço.

    terça-feira, 11 de novembro de 2014 10:49
  • Bom dia, 

    Mas se for para copiar e colar como você diz, acho que isso pode funcionar normal, tem uma imagem de seu banco de dados ai?

    terça-feira, 11 de novembro de 2014 11:29
  • Bom dia!

    Estou precisando muito desta ajuda...alguém consegue me orientar como proceder?

    Obrigado!

    quinta-feira, 13 de novembro de 2014 11:05
  • Olá... 

    Bem não sou expert mas este cod soluciona o que você pede. Claro que pode melhorar, mas fiz em 10 mins kk

    Espero ter ajudado.

    Function fteste()
        'considerando que a coluna dias é a "J" e que elas vão de A até J
        
            
        Dim wb As Workbook
            Set wb = ActiveWorkbook
        Dim ws As Worksheet, base As Worksheet
            Set ws = wb.Sheets(1) 'defina a planilha aqui
            Set base = wb.Sheets(2)
            
        Dim l As Long 'linha
        l = ws.Range("A:A").End(xlDown).Row 'qtde de linhas
        
        Dim rg As Range
            Set rg = ws.Range("A1:J" & l) 'define o range dos dados
            
        
        rg.AutoFilter 'hab o filter
        
        ws.AutoFilter.Sort.SortFields.Add ws.Range("J1:J" & l), , xlDescending, xlSortNormal 'filtro por col j  descendente
        
        rg.AutoFilter 'desabilta o filter
        
        Dim p As Long  'ponteiro
            p = 2
            
        Do While ws.Range("j" & p).Value > 365 'marca até 365 dias
            p = p + 1
        Loop
        base.Range("a1:j" & p).Value = ws.Range("a1:j" & p).Value
            
    End Function

    • Marcado como Resposta Everton_Delmiro sexta-feira, 14 de novembro de 2014 00:51
    quinta-feira, 13 de novembro de 2014 17:13
  • Everton,

    A primeira solução apresentada parece ser adequada para seu caso. Apenas altere o argumento CopyToRange:=Range("L2:O7") por CopyToRange:=Range("L2:O700000"), por exemplo.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Everton_Delmiro sexta-feira, 14 de novembro de 2014 00:52
    quinta-feira, 13 de novembro de 2014 21:28
    Moderador
  • Vlw Cara!!!!!! Muito Obrigado!
    sexta-feira, 14 de novembro de 2014 00:51
  • Felipe, obrigado!

    Desta forma também funcionou!

    Abraço.

    sexta-feira, 14 de novembro de 2014 00:52