Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por JNilson
Posts
#16751
Amigos,

Tenho uma pasta de trabalho com 3 planilhas: A, B e C.

Nas planilhas A e B, estão os dados que pretendo filtrar. A planilha C receberá os dados das planilhas A e B.

Os critérios de pesquisa não mudam.

Quero primeiramente filtrar os dados da planilha A. Depois, numa linha abaixo, filtrar os dados da planilha B.

No entanto não estou conseguindo fazer o CopyToRange variável.

Se puderem me ajudar, agradeço.
Por rahfaeu
Posts
#16752
Olá JNilson, bom dia!

Eu utilizaria o código abaixo para sua questão, veja se lhe atende:

Código: Selecionar todos
Sub IntervaloRelativo()
Dim i As Long
    
    'Limpa o local que receberão os dados (Planilha C)
    Sheets("C").Range("A2:C1048576").ClearContents
    
    'Copia dados da selação relativa da Planilha A
    Sheets("A").Range("A2:C" & Sheets("A").Range("A1048576").End(xlUp).Row).Copy
    
    'Identifica linha disponivel sem informação na Planilha C
    i = Sheets("C").Range("A1048576").End(xlUp).Offset(1, 0).Row
            
    'Cola os dados copiados da Planilha A para a C
    Sheets("C").Range("A" & i).PasteSpecial xlPasteValuesAndNumberFormats
                
    'Copia dados da selação relativa da Planilha B
    Sheets("B").Range("A2:C" & Sheets("B").Range("A1048576").End(xlUp).Row).Copy
    
    'Identifica linha disponivel sem informação na Planilha C
    i = Sheets("C").Range("A1048576").End(xlUp).Offset(1, 0).Row
    
    'Cola os dados copiados da Planilha A para a C
    Sheets("C").Range("A" & i).PasteSpecial xlPasteValuesAndNumberFormats
    
    'Limpa a área de transferência (últimos dados copiados)
    Application.CutCopyMode = False
    
    Sheets("C").Activate
    Range("A1").Activate
    
End Sub
Por JNilson
Posts
#16905
Amigo, muito obrigado pela atenção.

Eu entendo pouquíssimo de VBA, por isso, não consegui aplicar o seu código ao meu caso.

Coloco abaixo o código que estou tentando fazer funcionar:

Tenho 6 planilhas no meu projeto: planilha 2016, planilha 2017, planiha 2018, planiha 2019, planilha 2020 e Relatório.

Coloquei uma condição para, de acordo com o valor da célula "B14" da planilha Relatório, o excel filtrar os dados da de determinado planilha e copiar para a planilha Relatório. Por exemplo: se o valor da célular "B14" for 2016, buscará os dados da planilha 2016. Até aí ocorre tudo bem.

No entanto, quero que, se a célula B14 estiver vazia, quero que filtre os dados de todas a plnilhas: Filtre os dados planilha 2016, depois, logo abaixo, filtre os dados da planilha 2017 e assim por diante.

Não estou conseguindo fazer isso. Ele copia os dados da planilha 2016, e quando vai copiar os dados da planilha 2017, aparece o erro "O intervalo de extração tem um nome de campo ausente ou inválido".

Se puder me ajudar, agradeço.

Segue o código abaixo:

Public Sub GerarR()

‘Filtrar dados da planilha 2016

If shtRelatorio.Range("b14").Value = 2016 Then

Sheets("Planilha 2016").Range("B2:J722").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=shtRelatorio.Range("criterios"), CopyToRange:=shtRelatorio.Range("LocalRelatorio"), Unique:=False


'Filtrar dados da Planilha Planilha 2017

ElseIf shtRelatorio.Range("b14").Value = 2017 Then

Sheets("Planilha 2017").Range("B2:J722").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=shtRelatorio.Range("criterios"), CopyToRange:=shtRelatorio.Range("LocalRelatorio"), Unique:=False

‘Filtrar Dados da Planilha Planilha 2018

ElseIf shtRelatorio.Range("b14").Value = 2018 Then

Sheets("Planilha 2018").Range("B2:J722").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=shtRelatorio.Range("criterios"), CopyToRange:=shtRelatorio.Range("LocalRelatorio"), Unique:=False

‘Filtrar Dados da Planilha Planilha 2019

ElseIf shtRelatorio.Range("b14").Value = 2019 Then

Sheets("Planilha 2019").Range("B2:J722").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=shtRelatorio.Range("criterios"), CopyToRange:=shtRelatorio.Range("LocalRelatorio"), Unique:=False

‘Filtrar dados da Planilha 2020

ElseIf shtRelatorio.Range("b14").Value = 2020 Then

Sheets("Planilha 2020").Range("B2:J722").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=shtRelatorio.Range("criterios"), CopyToRange:=shtRelatorio.Range("LocalRelatorio"), Unique:=False

' Filtrar os dados de todas as as planilhas


ElseIf shtRelatorio.Range("b14").Value = "" Then

Sheets("Planilha 2016").Range("B2:J722").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=shtRelatorio.Range("f2:h3"), CopyToRange:=shtRelatorio.Range("f7:j7"), Unique:=False

shtRelatorio.Range("f722").End(xlUp).Offset(1, 0).Select

Sheets("Planilha 2017").Range("B2:J722").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=shtRelatorio.Range("f2:h3"), CopyToRange:=ActiveCell, Unique:=False


End If

End Sub
Avatar do usuário
Por DJunqueira
Avatar
#16907
O erro poderia estar na linha abaixo onde o nome do intervalo não estaria definido na sua planilha de 2017.

CriteriaRange:=shtRelatorio.Range("criterios"), CopyToRange:=shtRelatorio.Range("LocalRelatorio"), Unique:=False
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord