Notifications
Clear all

Copiar conteúdo de diversos arquivos em uma única sheet

28 Posts
3 Usuários
0 Reactions
3,998 Visualizações
(@ericksant)
Posts: 109
Estimable Member
Topic starter
 

Pessoal,
boa tarde!

Estou com uma nova dúvida, tenho uma pasta específica com diversos arquivos em excel, eu precisava copiar o conteúdo de todos arquivos e copiar em uma planilha específica. (Eu faço esse trabalho na mão, copio todo o conteúdo do primeiro arquivo, depois vou até a última linha e copio o seguinte e assim vai...)

Precisava de uma forma automática... Vi alguns tópicos aqui mas não achei nenhum que pegava de arquivos diferentes...

Alguém consegue me ajudar ?
Obrigado!

 
Postado : 25/04/2018 1:49 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa tarde,

Todos os arquivos tem o mesmo padrão?

Você pode fazer isso usando o Power Query, se tiver o Office 2013 ou 2016.

Anexe uma planilha de exemplo, assim fica mais fácil tentar ajudar.

att,

 
Postado : 25/04/2018 2:32 pm
(@ericksant)
Posts: 109
Estimable Member
Topic starter
 

boa noite!
Obrigado pelo rápido retorno!

Então, serão sempre 9 arquivos em excel, estarão sempre em um diretório específico, 5 arquivos tem um padrão exato e 4 tem outro padrão, entendendo o anexo.

Teste1 = um padrão
Teste2 = outro padrão
Teste3 = Arquivo onde receberá o conteúdo dos outros, na planilha 'teste' especificamente....

Segue anexo.

 
Postado : 25/04/2018 4:52 pm
(@ericksant)
Posts: 109
Estimable Member
Topic starter
 

Amigos,
Consegui achar uma solução na internet, segue abaixo o código que estou utilizando:

Option Explicit

Sub Importa_Fiscal()

Application.ScreenUpdating = False

'Definição das variáveis
'-----------------------
Dim W               As Worksheet
Dim WNew            As Workbook
Dim ArqParaAbrir    As Variant
Dim a               As Integer
Dim NomeArquivo     As String

'Captura arquivo para tratamento
'-------------------------------

ArqParaAbrir = Application.GetOpenFilename("Arquivo de Retorno (*.*), *.*", Title:="Escolha o arquivo a ser importado", MultiSelect:=True)

If Not IsArray(ArqParaAbrir) Then

    If ArqParaAbrir = "" Or ArqParaAbrir = False Then
        MsgBox "Processo abortado. Não foi selecionado arquivos para processar...", vbOKOnly, "Processo abortado"
        Exit Sub
    End If

End If

Set W = Sheets("Fiscal")

W.UsedRange.EntireColumn.Delete
W.Select
  
For a = LBound(ArqParaAbrir) To UBound(ArqParaAbrir)
    
    NomeArquivo = ArqParaAbrir(a)
    
    Application.Workbooks.Open (NomeArquivo)
    Set WNew = ActiveWorkbook
    ActiveSheet.Range("A1").CurrentRegion.Select
    Selection.Copy Destination:=W.Cells(W.Rows.Count, 1).End(xlUp).Offset(1, 0)
    
    Application.DisplayAlerts = False
    
        ActiveWorkbook.Close SaveChanges:=False
    
    Application.DisplayAlerts = True

    W.Cells(W.Rows.Count, 1).End(xlUp).Offset(1, 0).Select
    
Next a

Application.ScreenUpdating = True

MsgBox "Processo concluído", vbOKOnly, "Processo concluído"


End Sub

Tenho uma nova dúvida, feito a importação das bases, eu precisava pegar a SOMA de VALORES de uma certa coluna cujo seto alguns filtros antes... Isso é possível ? Vejam o anexo para melhor entendimento.
A idéia é pegar a soma dos valores de determinada coluna e colar em uma célula específica em outra sheet.
Estou travado na parte de pegar a soma dos valores, o pior é que nem sempre serão o mesmo número de linhas dessa coluna onde tenho que pegar a soma dos valores...

Estou travado, me ajudem por favor!!!

Sub teste()

    Sheets("Planilha1").Select
    Cells.Select
    Selection.AutoFilter
    Selection.AutoFilter
    Range("D6").Select
    ActiveSheet.Range("$B$2:$AQ$10931").AutoFilter Field:=3, Criteria1:=Array( _
        "121", "448", "450"), Operator:=xlFilterValues
    Range("R3").Select
    ActiveSheet.Range("$B$2:$AQ$10931").AutoFilter Field:=17, Criteria1:= _
        "Entrada"
    Range("AO3").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("TESTE RESULTADO").Select
    Range("B2").Select
    ActiveSheet.Paste
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-1]:R[134]C[-1])"
    Range("C2").Select
End Sub

Mais uma vez, obrigado!

 
Postado : 25/04/2018 8:19 pm
(@klarc28)
Posts: 971
Prominent Member
 

Creio que ficou fácil para você adaptar.

 
Postado : 26/04/2018 5:11 am
(@ericksant)
Posts: 109
Estimable Member
Topic starter
 

Uma nova Dúvida!
Essa macro, importa todos os excel de uma lista de arquivos que eu escolher...
Como faço para pegar todo o conteúdo do primeiro arquivo com a primeira linha e a partir dos próximos pegar só o conteúdo depois da primeira linha?
É possível ?

Option Explicit

Sub Importa_Fiscal()

Application.ScreenUpdating = False

'Definição das variáveis
'-----------------------
Dim W               As Worksheet
Dim WNew            As Workbook
Dim ArqParaAbrir    As Variant
Dim a               As Integer
Dim NomeArquivo     As String

'Captura arquivo para tratamento
'-------------------------------

ArqParaAbrir = Application.GetOpenFilename("Arquivo de Retorno (*.*), *.*", Title:="Escolha o arquivo a ser importado", MultiSelect:=True)

If Not IsArray(ArqParaAbrir) Then

    If ArqParaAbrir = "" Or ArqParaAbrir = False Then
        MsgBox "Processo abortado. Não foi selecionado arquivos para processar...", vbOKOnly, "Processo abortado"
        Exit Sub
    End If

End If

Set W = Sheets("Fiscal")

W.UsedRange.EntireColumn.Delete
W.Select
  
For a = LBound(ArqParaAbrir) To UBound(ArqParaAbrir)
    
    NomeArquivo = ArqParaAbrir(a)
    
    Application.Workbooks.Open (NomeArquivo)
    Set WNew = ActiveWorkbook
    ActiveSheet.Range("A1").CurrentRegion.Select
    Selection.Copy Destination:=W.Cells(W.Rows.Count, 1).End(xlUp).Offset(1, 0)
    
    Application.DisplayAlerts = False
    
        ActiveWorkbook.Close SaveChanges:=False
    
    Application.DisplayAlerts = True

    W.Cells(W.Rows.Count, 1).End(xlUp).Offset(1, 0).Select
    
Next a

Application.ScreenUpdating = True

MsgBox "Processo concluído", vbOKOnly, "Processo concluído"


End Sub
 
Postado : 26/04/2018 5:38 am
(@klarc28)
Posts: 971
Prominent Member
 

Procure no código onde está:

ActiveSheet.Range("A1").CurrentRegion.Select

Creio que essa linha é que deve ser alterada.

Seria mais ou menos assim:

If NomeArquivo = "NomeTal" then
ActiveSheet.Range("A1").CurrentRegion.Select
else
ActiveSheet.Range("A2").CurrentRegion.Select
end if

ou

If a = 1 then
ActiveSheet.Range("A1").CurrentRegion.Select
else
ActiveSheet.Range("A2").CurrentRegion.Select
end if

Não sei se esse a começa em 0 ou em 1.
Se começar em 0, seria if a = 0 then.
Se começar em 1, seria if a = 1 then.
Sendo que esse 0 ou 1 seria o número do primeiro arquivo.
Teste e faça as adaptações necessárias.

 
Postado : 26/04/2018 5:55 am
(@ericksant)
Posts: 109
Estimable Member
Topic starter
 

Obrigado pela ajuda até o momento!

Estou tentando adaptar o código de pegar a soma de valores de uma coluna específica depois de lançar alguns filtros mas não estou conseguindo, segue o código.

Sub teste()
'
' teste Macro
'

'
    Sheets("Fiscal").Select
    Cells.Select
    Range("AE1").Activate
    Selection.AutoFilter
    Range("D2").Select
    ActiveSheet.Range("$A$2:$DU$10931").AutoFilter Field:=4, Criteria1:="453"
    Range("S2").Select
    ActiveSheet.Range("$A$2:$DU$10931").AutoFilter Field:=19, Criteria1:= _
        "Autorizada"
    Range("AF2").Select
    ActiveSheet.Range("$A$2:$DU$10931").AutoFilter Field:=32, Criteria1:=Array( _
        "5101", "5401", "6101", "6401"), Operator:=xlFilterValues
    
     SomaDaColunaAV
   
End Sub

Sub SomaDaColunaAV()
    
    Dim ul As Double
    Dim i As Long
    ul = 0
    'da linha 3 até a ultima linha preenchida
    For i = 3 To Planilha1.UsedRange.Rows.Count
        'verifica se a linha não está oculta
        If Planilha1.Rows(i).Hidden = False Then
            'verifica se a célula não está em branco
            If Planilha3.Range("AV" & i).Value <> "" Then
                'soma o valor
                ul = ul + Planilha3.Range("AV" & i).Value
                
            End If
            
        End If
    Next i
    'coloca a soma na célula d16 da Planilha1
    Planilha1.Range("D16").Value = ul
End Sub

Eu fazendo na mão, o total dá 1810657,89 o valor pego na macro foi 10061,71...

 
Postado : 26/04/2018 12:38 pm
(@klarc28)
Posts: 971
Prominent Member
 

Envie o arquivo que tem a planilha Fiscal. Sem esse arquivo, não dá para identificar o erro.

 
Postado : 26/04/2018 3:29 pm
(@ericksant)
Posts: 109
Estimable Member
Topic starter
 

Prezados,
boa noite,

Segue o anexo, reparem que no arquivo 'teste macro-copy' há um template criado, junto com as macros, devido ao limite de envio de arquivos do fórum, tive que dividir as sheets em arquivos diferentes, o arquivo real do 'fiscal' é bem maior que o enviado, porém a formatação está igual, deixei apenas as colunas que serão utilizadas na macro...

A idéia é inserir na célula 'd16' do arquivo 'teste macro-copy' a soma de valores da coluna AV da sheet Fiscal, mas com alguns filtros setados antes...

Se repararem, na 'cidade2', embaixo do número 18(no arquivo 'teste macro-copy') será inserido a soma de valores de uma outra coluna também com alguns filtros setados...

Ou seja, essa primeira lógica, eu iria reutilizar para criar para as outras células, pq no final de tudo, a idéia é a macro preencher todas as células com as somas de valores de certas colunas com alguns filtros setados, de bases extraidas pela macro criada inicialmente...

OBRIGADO!

 
Postado : 26/04/2018 8:50 pm
(@klarc28)
Posts: 971
Prominent Member
 

Manda a planilha correta, pois, do jeito que você mandou, está dando erro na linha:

ActiveSheet.Range("$A$2:$DU$10931").AutoFilter Field:=32, Criteria1:=Array( _
        "5101", "5401", "6101", "6401"), Operator:=xlFilterValues
 
Postado : 27/04/2018 3:58 am
(@ericksant)
Posts: 109
Estimable Member
Topic starter
 

Bom dia!
Estava dando erro pois a sheet do código estava em outro arquivo excel...
Corrigi, veja agora por favor o anexo, ele está pegando a soma da coluna mas sem os filtros que eu setei antes...

Obrigado!

 
Postado : 27/04/2018 5:44 am
(@klarc28)
Posts: 971
Prominent Member
 

Quando executo o filtro, não fica nenhum valor na coluna AV.
Mande um arquivo que apresente dados após a filtragem para que possamos fazer testes.

 
Postado : 27/04/2018 6:01 am
(@ericksant)
Posts: 109
Estimable Member
Topic starter
 

Desculpe,
Segue o arquivo corrigido, repare que executando a macro que fiz, ele pega a soma diferente do que o filtro pega...

 
Postado : 27/04/2018 7:00 am
(@klarc28)
Posts: 971
Prominent Member
 

Fiz a soma por fórmula e a soma pela macro e os valores foram idênticos:

Sub SomaDaColunaAV()
    
    Dim ul As Double
    Dim i As Long
    ul = 0
    'da linha 3 até a ultima linha preenchida
    For i = 3 To Planilha2.UsedRange.Rows.Count
        'verifica se a linha não está oculta
        If Planilha2.Rows(i).Hidden = False Then
            'verifica se a célula não está em branco
            If Planilha2.Range("AV" & i).Value <> "" Then
                'soma o valor
                ul = ul + Planilha2.Range("AV" & i).Value
                
            End If
            
        End If
    Next i
    'coloca a soma na célula d16 da Planilha1
    Planilha2.Range("BB36").Value = ul
End Sub
 
Postado : 27/04/2018 7:14 am
Página 1 / 2