Ir ao conteúdo
  • Cadastre-se

Copiar dados de outra planilha mas com critérios excel vba


Posts recomendados

Pessoal.

 

Desenvolvi uma planilha com vba utilizando o código abaixo, ela funciona bem, mas preciso aprimorar o código, pois quando executo a macro todos os dados das outras planilhas são copiados. Até mesmo o cabeçalho é copiado. 

 

Preciso que o cabeçalho que fica na célula A1 não seja copiado e que os dados que já foram copiados não sejam copiados novamente. Ex.: tenho uma coluna com datas e apenas que copie as datas que ainda não foram copiadas.

 

Segue o código:


 

Sub Gravar_BD()
Application.DisplayAlerts = False
    
Dim Pasta As String
    Dim Arquivo As String
    
    'Seleciona a pasta do Windows onde estão todas as
    'pastas de trabalho a serem copiadas
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Show
        Pasta = .SelectedItems(1)
    End With
    
    'Armazena o nome do primeiro arquivo (pasta de trabalho) na variável "Arquivo"
    Arquivo = Dir(Pasta & "\" & "*.xls*")
    
    'Laço para para percorrer todos os arquivos da pasta do windows
    Do
        Application.ScreenUpdating = False
  
        'Abre o arquivo
        Workbooks.Open (Pasta & "\" & Arquivo)
        
        'Copia a região adjacente à celula A2 para a planilha de consolidação
        [Plan1!A2].CurrentRegion.Copy ThisWorkbook.ActiveSheet.Cells(Cells.Rows.Count, "A").End(xlUp).Offset(1, 0)
        
        'Fecha o arquivo
        Workbooks(Arquivo).Close False
                
        'Lista o próximo arquivo
        Arquivo = Dir
    Loop While Arquivo <> ""
    
    Application.CutCopyMode = False
    
    Application.ScreenUpdating = True
    
    MsgBox "Fim de Execução da Macro"
    
 Application.DisplayAlerts = True
    
End Sub

 

Grato pela ajuda.

Link para o comentário
Compartilhar em outros sites

Valeu DJunqueira.

 

Mas isto não resolve meu problema, pois os dados que tenho são atualizados diariamente e como citei, preciso que apenas os dados novos sejam inseridos. A fonte de dados são outras 8 planilhas de outros usuários.

 

Ainda tenho o problema de serem copiados também  o cabeçalhos dos arquivos.

 

Tks

Link para o comentário
Compartilhar em outros sites

Fiz da seguinte forma, usei o seu código do início do tópico na pasta de trabalho BD.xlsm, depois adicionei alguns dados na plan1 da Andre Diario.xlsx e constatei q o problema estava no uso de:

 

'Copia a região adjacente à celula A2 para a planilha de consolidação         [Plan1!A2].CurrentRegion.Copy ThisWorkbook.ActiveSheet.Cells(Cells.Rows.Count, "A").End(xlUp).Offset(1, 0)

 

No caso CurrentRegion seleciona e copia tudo q estiver escrito na aba, inclusive o cabeçalho, e depois cola na BD.xlsm.

Minha proposta de solução é você trocar essa parte do código por:

 

'Copia a região adjacente à celula A2 para a planilha de consolidação         [Plan1!A2:F20].Copy ThisWorkbook.ActiveSheet.Cells(Cells.Rows.Count, "A").End(xlUp).Offset(1, 0)

 

Sendo q F20 é apenas um número qq q representa o número - com folga - de linhas q você irá costumeiramente copiar. Se forem 100 linhas coloque F200.

 

Sua planilha Andre Diario.xlsx poderia se beneficiar de uma revisão nas fórmulas e alguma coisa no layout, se quiser posso fazer, mas p/ isso você deverá me repassar a estrutura sem senha, sem vínculos quebrados e sem informações sigilosas como nomes, CPF, etc.

Substitua nomes por Cliente1, Cliente2 e assim por diante.

BD.zip

Link para o comentário
Compartilhar em outros sites

DJunqueira, o teu código deu certo para copiar apenas os dados, mas teria como melhorar e apenas copiar os dados que ainda não foram copiados? Ex.: ontem foi atualizado com os dados até dia 06, hj irei atualizar e queria que copiasse apenas os dados a partir do dia 07, pois os dados de 01 à 06 já estão na planilha BD.

Obrigado pela ajuda, segue o arquivo do Andre destravado e sem vínculos.

 

 

CasaDoHardware, o código vai na planilha BD, mas ele está lá, só salvei em xls por causa do upload.

 

 

Andre Diario01.zip

Link para o comentário
Compartilhar em outros sites

30 minutos atrás, Ricstos disse:

DJunqueira, o teu código deu certo para copiar apenas os dados, mas teria como melhorar e apenas copiar os dados que ainda não foram copiados? Ex.: ontem foi atualizado com os dados até dia 06, hj irei atualizar e queria que copiasse apenas os dados a partir do dia 07, pois os dados de 01 à 06 já estão na planilha BD.

Obrigado pela ajuda, segue o arquivo do Andre destravado e sem vínculos.

 

 

 

Andre Diario01.zip

Uma sugestão apague os dados da planilha Andre apos a copia assim vai copiar somente os dados novos.

Link para o comentário
Compartilhar em outros sites

Em 09/01/2017 às 23:48, DJunqueira disse:

Fiz diversas alterações nas fórmulas da sua pasta de trabalho especialmente relacionadas a pesquisa na aba dos dias.

Estas fórmulas agora tem apenas uma linha.

 

Quanto ao código siga a orientação do @CasaDoHardware.

Andre Diario vDJ 1.zip

Valeu DJunqueira, as fórmula ficaram ótimas e a planilha roda mais rápido. Só não irei utilizar a parte da função _xlfn, pois meu Office é 2007. Sem pedir muito, poderia explicar o funcionamento dela? Obrigado.

 

CasaDoHardware, obrigado pela sugestão, mas os dados não podem ser apagados da planilha André, pois é o histórico que ele tem para justificar no final do mês. Além disso, a planilha fica com o André e não comigo. valeu

 

Vou tentar achar solução, acho q vou criar uma outra aba, onde deixo os dados para copiar e ao fechar a planilha eles são apagados, e outra planilha para ficar de histórico. 

 

O que acham?

 

Obrigado

Link para o comentário
Compartilhar em outros sites

Me manda a planilha com acumulo de dias p/ entender melhor o q você quer.

 

Quanto a função_xlfn pode ser qq uma das novas funções do Excel 2016, mas imagino q no caso seja a SEERRO(), essa função é interessante porque evita o trabalho dobrado, antes dela o Excel calculava uma fórmula e se não houvesse erro ele calculava novamente :(. Agora com ela o Excel só faz mais alguma coisa se der erro.

 

A alternativa p/ o 2007 é testar se houve erro:

=SE(ÉRRROS(TestaFunção); RespostaFunçãoComErro; FunçãoOkCalculaNovamente)

Link para o comentário
Compartilhar em outros sites

Me diz uma coisa Se a planilha Andre é igual a sua porque fazer uma atualização diaria, e nao uma mensal.

 

Se você precisa ter acesso a pasta basta deixar a pasta na rede da empresa onde os dois podem ter acesso, e se você precisar de um backup pode realizar esse processo 1 vez por mes.

 

Seja la qual for a razão nao tem motivo para ter duas planilha iguais.

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, CasaDoHardware disse:

Me diz uma coisa Se a planilha Andre é igual a sua porque fazer uma atualização diaria, e nao uma mensal.

Se você precisa ter acesso a pasta basta deixar a pasta na rede da empresa onde os dois podem ter acesso, e se você precisar de um backup pode realizar esse processo 1 vez por mes.

Seja la qual for a razão nao tem motivo para ter duas planilha iguais.

Concordo plenamente com o @CasaDoHardware.

Link para o comentário
Compartilhar em outros sites

20 horas atrás, DJunqueira disse:

Concordo plenamente com o @CasaDoHardware.

Pessoal,

 

Eu não utilizo a planilha Andre, apenas André a utiliza. O Coordenador recebe os resultados do supervisores (no caso André é um deles) para ver as justificativas dos resultados não alcançados. É necessário o monitoramento diário e mensalmente ocorre o fechamento e verificação do atingimento das metas. Não há duplicação da planilha.

 

Fiz uma alteração na planilha, inclui uma aba "histórico", que vai acumulando os dados dia após dia até o fechamento do mês. Inclui uma macro para apagar os dados de "plan1". Então quando fecha a planilha "Andre" ela copia os dados de "Resumo diario" para "Plan1" e depois copia de "Plan1" para "Histórico". Abrir a planilha os dados de "Plan1" são apagados. Funcionou bem.

 

Mas ocorreu um problema ao utilizar a planilha "BD", pois quando ela vai extrair os dados das planilhas dos supervisores, ela abre as planilhas e apaga os dados a serem copiados.

 

Resolvi um problema e criei outro.

 

Ah, não tem como colocar a planilha numa rede, pois os supervisores trabalham em campo no território nacional.

 

Não estou conseguindo fazer upload das planilhas. Tentarei depois

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!