Notifications
Clear all

VBA - Filtro Avançado - Colar outro Local - Não substituir

9 Posts
2 Usuários
0 Reactions
1,699 Visualizações
tfcastro
(@tfcastro)
Posts: 131
Estimable Member
Topic starter
 

Boa Tarde !!

Mais uma vez preciso da ajuda de vocês :D
Na aba Filtro tenho os dados que precisam que sejam Filtrados
Na aba PR003 de B2:J3 os critérios para esse filtro
Preciso que o macro ao executar o filtro avançado ele cole na ultima linha preenchida B5:J5 em diante em em seguida remova os duplicados.

Fiz o macro porem só consegui fazer com que ele cole sempre no B5:J5 e não na ultima linha.

Sub Copiar_PR003()
'
' Copiar_PR003 Macro
'

'
    Sheets("Filtro").Range("F3:N200").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("PR003!Criteria"), CopyToRange:=Range("B5:J5"), _
        Unique:=False
    Range("B6:J6").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.Range("$B$6:$J$1000").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7 _
        , 8, 9), Header:=xlYes
End Sub

Tentei esse cód abaixo mas deu erro.

CopyToRange:=Range("B5:J5").End(xlUp).Row  

Ou seja na verdade preciso que ele copie os dados da aba Filtro e cole na aba PR003 não substituindo os dados diferentes e substituindo os iguais.

Resposta útil? Clique na mãozinha ao lado do botão Citar.

 
Postado : 20/08/2015 11:27 am
pfarias
(@pfarias)
Posts: 265
Reputable Member
 

Não entendi!

Você quer que seja filtrado na aba Filtro os critérios especificado em PR003. E depois copie e cole o que existe nos dados filtrados da aba Filtro para a aba PR003 na ultima linha vazia, e então remova os dados duplicados?

Funciona como uma consulta, cadastro?

Pietro Farias

Se foi resolvido suas dúvidas, lembre se de marcar o tópico como RESOLVIDO.

ANALISTA X

 
Postado : 20/08/2015 11:51 am
tfcastro
(@tfcastro)
Posts: 131
Estimable Member
Topic starter
 

isso !! So que quero pode adicionar itens manualmente nessa lista tambem, por isso não quero que quando eu uso o macro ele substitua os itens q ja estavam na aba PR003, só adicione os novos itens que foram filtrados.
Vou usa essa planilha de base para uma nova planilha

Resposta útil? Clique na mãozinha ao lado do botão Citar.

 
Postado : 20/08/2015 12:33 pm
pfarias
(@pfarias)
Posts: 265
Reputable Member
 

Utiliza a macro abaixo, vê se é o que quer.

sub Copiar_PR003()

With Plan4.ListObjects("Tabela1").Range
    .AutoFilter Field:=1, Criteria1:=Plan3.Cells(3, 2)
    '.AutoFilter Field:=2, Criteria1:=Plan3.Cells(3, 3)
    '.AutoFilter Field:=3, Criteria1:=Plan3.Cells(3, 3)
    '*****
    '* se quiser continuar os criterios de filtração é so continuar a sequencia
    '*****
End With

Range("Tabela1").SpecialCells(xlCellTypeVisible).Copy
Plan3.Cells(Range("B5").End(xlDown).Row + 1, 2).PasteSpecial Paste:=xlPasteValues

Range(Selection, Selection.End(xlUp)).Select
Selection.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9), Header:=xlYes

On Error Resume Next
Plan4.ShowAllData
End Sub

Pietro Farias

Se foi resolvido suas dúvidas, lembre se de marcar o tópico como RESOLVIDO.

ANALISTA X

 
Postado : 20/08/2015 12:59 pm
tfcastro
(@tfcastro)
Posts: 131
Estimable Member
Topic starter
 

Fiz um testes aqui !
De primeira parece que funcionou mas deletei alguns itens na aba PR003 e adicionei um novo parou de funcionar !!
Não sei se fiz algo errado !!

Resposta útil? Clique na mãozinha ao lado do botão Citar.

 
Postado : 20/08/2015 1:34 pm
tfcastro
(@tfcastro)
Posts: 131
Estimable Member
Topic starter
 

Segui seu cód e fiz assim

Sub Copiar_PR003()

With Plan4.ListObjects("Tabela1").Range
.AutoFilter Field:=1, Criteria1:=Plan3.Cells(3, 2)
.AutoFilter Field:=2, Criteria1:=Plan3.Cells(3, 3)
.AutoFilter Field:=3, Criteria1:=Plan3.Cells(3, 4)
.AutoFilter Field:=4, Criteria1:=Plan3.Cells(3, 5)
.AutoFilter Field:=5, Criteria1:=Plan3.Cells(3, 6)
.AutoFilter Field:=6, Criteria1:=Plan3.Cells(3, 7)
.AutoFilter Field:=7, Criteria1:=Plan3.Cells(3, 8)
.AutoFilter Field:=8, Criteria1:=Plan3.Cells(3, 9)
.AutoFilter Field:=9, Criteria1:=Plan3.Cells(3, 10)
'*****
'* se quiser continuar os criterios de filtração é so continuar a sequencia
'*****
End With

Range("Tabela1").SpecialCells(xlCellTypeVisible).Copy
Plan3.Cells(Range("B5").End(xlDown).Row + 1, 2).PasteSpecial Paste:=xlPasteValues

Range(Selection, Selection.End(xlUp)).Select
Selection.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9), Header:=xlYes

On Error Resume Next
Plan4.ShowAllData
End Sub

Está dando erro nessa parte.

Range("Tabela1").SpecialCells(xlCellTypeVisible).Copy

Resposta útil? Clique na mãozinha ao lado do botão Citar.

 
Postado : 20/08/2015 1:44 pm
pfarias
(@pfarias)
Posts: 265
Reputable Member
 

Acontece esse erro por não haver nenhum item com o critério do filtro que você informou.
Por haver muitos filtros, fica muito criterioso o filtro. Eu sugeria você utilizar o minimo possível de filtro. Ou só o nome ou só o código.

Fiz uma alteração na Macro, substitui ela.

Sub Copiar_PR003()


With Plan4.ListObjects("Tabela1").Range
    .AutoFilter Field:=1, Criteria1:=Plan3.Cells(3, 2)
    .AutoFilter Field:=1, Criteria1:=Plan3.Cells(3, 2)
    .AutoFilter Field:=2, Criteria1:=Plan3.Cells(3, 3)
    .AutoFilter Field:=3, Criteria1:=Plan3.Cells(3, 4)
    .AutoFilter Field:=4, Criteria1:=Plan3.Cells(3, 5)
    .AutoFilter Field:=5, Criteria1:=Plan3.Cells(3, 6)
    .AutoFilter Field:=6, Criteria1:=Plan3.Cells(3, 7)
    .AutoFilter Field:=7, Criteria1:=Plan3.Cells(3, 8)
    .AutoFilter Field:=8, Criteria1:=Plan3.Cells(3, 9)
    .AutoFilter Field:=9, Criteria1:=Plan3.Cells(3, 10)
End With

On Error GoTo FIM
Range("Tabela1").SpecialCells(xlCellTypeVisible).Copy
Plan3.Cells(Range("B5").End(xlDown).Row + 1, 2).PasteSpecial Paste:=xlPasteValues

Range(Selection, Selection.End(xlUp)).Select
Selection.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9), Header:=xlYes

Range("Tabela1").AutoFilter
Exit Sub

FIM:
MsgBox "Produto não encontrado!"
End Sub

Pietro Farias

Se foi resolvido suas dúvidas, lembre se de marcar o tópico como RESOLVIDO.

ANALISTA X

 
Postado : 20/08/2015 2:01 pm
tfcastro
(@tfcastro)
Posts: 131
Estimable Member
Topic starter
 

Coloquei a nova e testei mas não deu certo !!
Ele chega a fazer o Filtro certo na Planilha Filtro mas da erro e não copia para a PR003 !!!
Mas não esquenta pfarias, vou ver se faço de outro jeito !!

Obrigado mesmo assim !!!

Resposta útil? Clique na mãozinha ao lado do botão Citar.

 
Postado : 21/08/2015 6:05 am
tfcastro
(@tfcastro)
Posts: 131
Estimable Member
Topic starter
 

Juntei alguns cód q achei aqui no forum e tive q usar uma coluna auxiliar mas consegui com esse cód.
Enfim, ficou uma gambiarra mas deu certo !!
Se interessar a mais alguém:

Sub Copiar_PR003()
'
' teste Macro
'
    Sheets("Filtro").Range("Tabela1[#All]").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("B2:J3"), CopyToRange:=Range("N2:V2"), Unique:=False
    Range("N3:O3").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Cut
    Dim ws          As Worksheet
    Dim lLastRow    As Long
    Dim lNextRow    As Long
        Set ws = ActiveSheet                                    'Planilha que será validada pelo botão,
        With ws
            lLastRow = .Cells(.Cells.Rows.Count, 3).End(xlUp).Row  'Pega o nº da última célula preenchida na coluna 3 (C)
            lNextRow = lLastRow + 1                                'Soma um (1) à última linha preenchida.
           
            If Application.CutCopyMode <> 0 Then                   'Verifica se há algo no Ctrl+C ou no Ctrl+X
                .Range("B" & lNextRow).Select                      'Seleciona a primeir célula em branco da coluna B
                .Paste                                             'Cola o que estiver na área de transferência
    Range("B7:C7").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.Range("$B$7:$C$1048576").RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
    Range("D6").Select
    Selection.AutoFill Destination:=Range("D6:D5000")
    Range("D6:D5000").Select
            End If
        End With
End Sub

Resposta útil? Clique na mãozinha ao lado do botão Citar.

 
Postado : 25/08/2015 1:52 pm