Notifications
Clear all

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

9 Posts
2 Usuários
0 Reactions
1,684 Visualizações
(@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.

 
Postado : 20/08/2015 11:27 am
(@pfarias)
Posts: 0
New 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?

 
Postado : 20/08/2015 11:51 am
(@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

 
Postado : 20/08/2015 12:33 pm
(@pfarias)
Posts: 0
New 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

 
Postado : 20/08/2015 12:59 pm
(@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 !!

 
Postado : 20/08/2015 1:34 pm
(@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

 
Postado : 20/08/2015 1:44 pm
(@pfarias)
Posts: 0
New 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
 
Postado : 20/08/2015 2:01 pm
(@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 !!!

 
Postado : 21/08/2015 6:05 am
(@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
 
Postado : 25/08/2015 1:52 pm