Página 1 de 1

Ler dados de outra planilha fechada

Enviado: 11 Jun 2016 às 15:46
por FelipeArruda
Boa tarde!
Gostaria de saber se é possível ler através de uma macro(contar a quantidade de linhas não vazias) de outra planilha sem precisar abri-la.

Atualmente tenho uma planilhar em excel que tem alguns nomes das planilhas que são importadas de um sistema, preciso que através de uma coluna (que contenha os nomes) vá ate o diretório (por uma variável) e localize os arquivos que contenha os nomes e para cada planilha ele abra e faça uma contagem das linhas não vazias.

A respeito da contagem, já consegui fazer, porém esbarrei em não conseguir fazer com que ao executar o macro ele vá até o diretório e localize a planilhas.

Ex: através de uma coluna em uma planilha padrão ele vá ao diretório localize a planilha e faça a contagem das linhas.

Ler dados de outra planilha fechada

Enviado: 12 Jun 2016 às 03:40
por DJunqueira
Se vc tem o diretório e tem o nome da planilha vc não precisa de macro p/ contar o número de linhas com valor, basta usar a função:
=CONT.VALORES('D:\nomediretório\Planilhas\[NomePlanilha.xlsx]Plan1'!A:A)

Vc tb pode fazer Nova Consulta em Dados p/ retornar o número de linha em cada arquivo q vc desejar. Depois é só clicar no botão Atualizar.

Ler dados de outra planilha fechada

Enviado: 12 Jun 2016 às 13:38
por FelipeArruda
Entendi, porém eu tenho cerca de 100+ planilhas neste diretório que precisa ser feito a contagem e os números de registros variam de acordo com a planilha, algumas eu tenho poucos registros outras eu tenho quase milhões de registros, por isso achei mais fácil fazer uma macro que pega os valores e pare quando for a célula vazia.

Concorda comigo? Ou tem outra solução que possa me ajudar?

Att

Re: Ler dados de outra planilha fechada

Enviado: 14 Jun 2016 às 08:57
por alexandrevba
Bom dia!!

Isso deve ajudar, no mais é só adaptar.
Código: Selecionar todos
Sub AleVBA_2322()
    Dim wb As Workbook, wbXLS As Workbook
    Dim sPath As String, sFilename As String
    Dim NbRows As Integer, rg As Range
    DisplayAlerts = False
    Set wb = ThisWorkbook
    Application.ScreenUpdating = False
    sPath = "C:\Users\AleVBA\"       'Caminho de arquivos XLS
    sFilename = Dir(sPath & "*.xls")
    On Error Resume Next
    Do While Len(sFilename) > 0
        If sFilename <> ThisWorkbook.FullName Then
            Set wbXLS = Workbooks.Open(sPath & sFilename)           'Abre arquivos
            NbRows = wbXLS.Sheets(1).Range("A60000").End(xlUp).Row  'Num de linhas (favor ajustar qtd lin para seu caso)
'Na guia de nome AleVBA abaixo, coluna A ficará os nomes e Coluna B qtd de linhas
            Set rg = wb.Worksheets("AleVBA").Range("A60000").End(xlUp).Offset(1, 0)
            rg = sFilename
            rg.Offset(0, 1) = NbRows
            wbXLS.Close False   'Fecha os arquivos
        End If
        sFilename = Dir
    Loop
    Application.ScreenUpdating = True
    DisplayAlerts = True
End Sub
Att

Re: Ler dados de outra planilha fechada

Enviado: 15 Jun 2016 às 13:16
por FelipeArruda
Agora estou com um pouco de dificuldade de encontrar a planilha aberta.

Tenho uma planilha(Padrao.xlsm) que os valores iram ser gravados nela, e ao clicar no botão de atualizar os dados ele abre as planilhas faz a contagem e guarda na variável.

Porém não estou conseguindo fazer com que ele grave essas informações na planilha(Padrao.xlsm), pois quando mando ele abrir as outras planilhas para fazer a contagem ele grava na planilha em aberta(de contagem).

Há uma forma de pegar essas planilha e gravar nela?
Código: Selecionar todos
Sub atualizaDados()
    Dim sPath As String
    Dim linha As Integer
    Dim coluna As Integer
    
    Dim wb As Workbook, wbXLS As Workbook
    
    Dim a As String
    Dim b As String
    Dim qtd As Integer
    
    varColuna = 1
    varLinha = 1
    varConteudo = 1
    
    'Define a linha e coluna que ira comecar
    linha = 3
    coluna = 2
    
    'Caminho da pasta dos arquivos
    sPath = "C:\Users\felipe.arruda\Desktop\Nova pasta\"
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set arquivo = FSO.GetFolder(sPath)
    
    'Varre cada linha da coluna (linha x coluna)
    While Cells(linha, coluna).Value <> Empty
            a = UCase("sgu_" & Cells(linha, coluna).Value & ".csv")
        For Each arq In arquivo.Files
            b = UCase(arq.Name)
        
            If a = b Then
                'Abre o arquivo
                Set wbook = Application.Workbooks.Open(sPath & arq.Name)
                
                'Faz a contagem de linhas no arquivo
                Do While varConteudo <> Empty
                    varLinha = varLinha + 1
                    varConteudo = Cells(varLinha, varColuna).Value
                Loop
                
                'Alimenta a planilha
                Sheets(1).ActiveCell.Offset("C", linha).Value = "a"
                'Fecha o arquivo
                
                wbook.Close
            End If
            
        Next arq
        linha = linha + 1
    Wend
        
End Sub

Re: Ler dados de outra planilha fechada

Enviado: 15 Jun 2016 às 13:36
por alexandrevba
Boa tarde!!!

Se você observou o código na linha
Código: Selecionar todos
Set wb = ThisWorkbook
O arquivo (somente o arquivo) que estiver aberto e com o código dentro e com uma guia chamada "AleVBA" conforme abaixo.
Código: Selecionar todos
Set rg = wb.Worksheets("AleVBA").Range("A60000").End(xlUp).Offset(1, 0)
Então os dados serão mostrados neste arquivo.

Por tanto, insira o código dentro do arquivo Padrao.xlsm, deixe só esse arquivo aberto, rode a macro!!
Não se esqueça até apontar o caminho dos arquivos de deseja contar as linhas
Código: Selecionar todos
sPath = "C:\Users\AleVBA\"   
Att

Ler dados de outra planilha fechada

Enviado: 15 Jun 2016 às 17:02
por FelipeArruda
Meu caro muito obrigado pela ajuda.
Consegui progredir...
Irei terminar de fazer o que preciso, e assim que conseguir concretizar irei fechar o tópico, por enquanto deixarei aberto para não ficar criando outros.