Página 1 de 2

Importar TXT com critério

Enviado: Seg Mar 28, 2016 7:26 am
por Marciel Silva
Senhores, bom dia!

Mais uma vez precisando da ajuda de vocês.

Toda batida de ponto é registrado em um .txt
No excel tenho o número do funcionário e os dias do mês.

Ao abrir o txt, na coluna 11 até a 19 tem a data da batida.
Os últimos 12 números são os dos funcionários.

Preciso que a macro encontre por exemplo 000000001123 no txt, vai na planilha e no dia 08/03/2016 (coluna 11 do txt) e coloque um "T" na linha.
Segue exemplo simples na planilha.
Planilha_230316.zip
(3.79 KiB) Baixado 419 vezes
Desde já agradeço.

Marciel Silva

Re: Importar TXT com critério

Enviado: Seg Mar 28, 2016 9:22 am
por Mikel Silveira Fraga
Marciel, bom dia.

Baixei seu modelo e entendi o que você deseja fazer, mas não entendi muita coisa do Txt que você enviou, já que aparentemente existe o registro de vários funcionários na mesma linha.

Poderia dar mais detalhes sobre o layout desse arquivo texto? Dessa forma seria mais fácil de tentar lhe ajudar.

Outra coisa, observei que na planilha, o registro dos funcionários é composto de 12 caracteres: "000000001273". No arquivo texto, irei encontrar exatamente essa mesma sequência?

Aguardo retorno.

Re: Importar TXT com critério

Enviado: Seg Mar 28, 2016 10:17 am
por Marciel Silva
Mikel Silveira Fraga escreveu:Marciel, bom dia.

Poderia dar mais detalhes sobre o layout desse arquivo texto? Dessa forma seria mais fácil de tentar lhe ajudar.

Outra coisa, observei que na planilha, o registro dos funcionários é composto de 12 caracteres: "000000001273". No arquivo texto, irei encontrar exatamente essa mesma sequência?
Mikel, bom dia!
Muito obrigado pelo retorno.

O TXT da 3ª linha para baixo tem os seguintes dados:
0000392523080320161738000000001273
0000392533080320161745000000001279
0000392543080320161746000000001309

Do 11º ao 18° (08032016) é a data da batida do ponto.
Do 23° até o último (000000001273) é o número do funcionário.
Todos terão 12 caracteres e terão essa mesma ordem.
A macro irá pegar na planilha esses 12 caracteres e procurar no txt. Encontrou? Colocar um "T" na planilha no dia 08032016 e assim sucessivamente.
Todos os dias irei trocar o txt para a macro puxar a batida do ponto.
Caso você tenha uma ideia melhor e mais simples... fique a vontade!

Espero ter explicado melhor.

Desde já muito obrigado.

Re: Importar TXT com critério

Enviado: Seg Mar 28, 2016 12:23 pm
por Mikel Silveira Fraga
Marciel, boa tarde.

Cara, assim ficou mais fácil de entender a estrutura, mas esse arquivo texto vem de uma forma muito complicada. Normalmente, os arquivos possuem várias linhas, mas este esta com toda a informação gravada em uma única linha.

Por este motivo, tive que montar um código que iria verifica se a sequencia de Data, Hora e Matricula existia. Veja o código abaixo:

Código: Selecionar todos

Public Sub LeArquivoTexto()
    Dim Arquivo As Integer
    Dim CaminhoArquivo As String
    Dim TextoArquivo As String
    Dim iLinha, iColuna As Integer
    Dim strMatricula, strData As String
 
    'Configura a leitura do arquivo
    Arquivo = FreeFile
    
    'Endereço fixo, mas uma opção seria o comando abaixo:
    'CaminhoArquivo = Application.GetOpenFilename("Arquivos Textos, *.txt")
    CaminhoArquivo = ThisWorkbook.Path & "\Ponto 080316.txt"
            
    'Abre o arquivo para leitura
    Open CaminhoArquivo For Input As Arquivo
    
    'Lê o conteúdo do arquivo linha a linha
    Do While Not EOF(Arquivo)
        Line Input #Arquivo, TextoArquivo
    Loop
    
    'Fecha o arquivo
    Close Arquivo
    
    For iLinha = 3 To 10
    
        strMatricula = VBA.Format(Plan1.Cells(iLinha, 1).Value, "000000000000")
        
        For iColuna = 2 To 32
    
            strData = VBA.Replace(VBA.CDate(Plan1.Cells(2, iColuna).Value), "/", "")
        
            If TextoArquivo Like "*" & strData & "????" & strMatricula & "*" Then
                Plan1.Cells(iLinha, iColuna).Value = "T"
            End If
        
        Next iColuna
        
    Next iLinha
End Sub
Para montar esse código, utilizei um artigo publicado pelo Tomás em seu Blog:
VBA – LENDO UM ARQUIVO TEXTO LINHA A LINHA (SEM FILESYSTEMOBJECT)

Espero que esse código lhe ajude.

Abraços e excelente semana.

Re: Importar TXT com critério

Enviado: Seg Mar 28, 2016 1:24 pm
por Marciel Silva
Mikel, boa tarde!

Vou tentar esse código.

É estranho que para você o texto esteja saindo em uma linha.
Para mim ele sai conforme eu colei com exemplo para você.
0000392523080320161738000000001273
0000392533080320161745000000001279
0000392543080320161746000000001309

De qualquer forma vou testar o código e te dou um parecer.

Desde já meu muito obrigado.

Abraços.

Re: Importar TXT com critério

Enviado: Seg Mar 28, 2016 2:41 pm
por Marciel Silva
Mikel, boa tarde!

Fiz o teste e funcionou exatamente o que preciso.

Agora só preciso que esclareça algumas dúvidas:

1- Se por ventura eu quiser jogar uns 5 TXT em uma pasta para que ele pegue tudo de uma vez... é possível alterando a linha "CaminhoArquivo = ThisWorkbook.Path & "\Ponto 080316.txt" ?

2- Estou inserindo esse código em outra planilha. Coloco ele em um módulo e altero o nome da Plan1 e o número de linha e coluna?
For iLinha = 3 To 10 For iColuna = 2 To 32

Muito obrigado pela ajuda!

Abraços

Re: Importar TXT com critério

Enviado: Seg Mar 28, 2016 2:54 pm
por Mikel Silveira Fraga
Marciel, boa tarde.

Vamos responder as suas respostas:
1- Se por ventura eu quiser jogar uns 5 TXT em uma pasta para que ele pegue tudo de uma vez... é possível alterando a linha "CaminhoArquivo = ThisWorkbook.Path & "\Ponto 080316.txt" ?
Para utilizar múltiplos arquivos, é possível utilizar a biblioteca Microsoft Scripting Runtime. Com ela, é possível montar uma rotina que avalie todos os arquivos existentes em um diretório e criar um laço For Each com os objetos Files da biblioteca.

Outra forma de se fazer isso é utilizando a função GetOpenFileName, atribuir o parâmetro MultiSelect da função. Na sequência, os nomes dos arquivos seriam atribuídos a uma Array e utilizada para explorar todos os arquivos textos.
2- Estou inserindo esse código em outra planilha. Coloco ele em um módulo e altero o nome da Plan1 e o número de linha e coluna?
For iLinha = 3 To 10 For iColuna = 2 To 32
Exatamente. Todos os valores utilizados no comando acima, foram assim definidos para atender ao Layout que você enviou. Já no caso do código esta sendo transportado para outro arquivo, é necessário que esses comandos sejam adaptados, exatamente nos pontos que você informou.

Faça os testes e tente acertar os códigos.

Abraços.

Re: Importar TXT com critério

Enviado: Seg Mar 28, 2016 3:56 pm
por Marciel Silva
Mikel.... o negócio está mais difícil do que eu imaginava... rsrsrs

Tentei adaptar na minha planilha mais sem sucesso.

A planilha é enorme para eu postar aqui (17mb).
Não sei onde estou pecando ao transferir o código.

Vou ver se consigo simplificar ela para enviar para você.

Obrigado!

Att,

Re: Importar TXT com critério

Enviado: Ter Mar 29, 2016 3:05 pm
por Marciel Silva
Mikel, boa tarde!

Consegui adaptar o código na minha planilha.
Porém tive que deixar a planilha com o mesmo layout da que eu mandei por exemplo para funcionar.
O que deixei de alterar?
Queria que começasse na linha 9 até a 50 e da coluna 14 até 40 (exemplo).

Outra coisa:
Abusando da sua boa vontade, como faço:
1- Para utilizar múltiplos arquivos, é possível utilizar a biblioteca Microsoft Scripting Runtime. Com ela, é possível montar uma rotina que avalie todos os arquivos existentes em um diretório e criar um laço For Each com os objetos Files da biblioteca.
Desde já obrigado!!!

Abraços

Re: Importar TXT com critério

Enviado: Ter Mar 29, 2016 3:44 pm
por Mikel Silveira Fraga
Marciel, boa tarde.

Conforme conversa via Skype, essa biblioteca é utilizada para criar objetos que realizam manipulação de Arquivos de Sistema (FileSystemObject), como Diretórios (FolderObjects) e Arquivos (Files).

Seguem alguns links de referência do uso desta biblioteca:
- Excel: Microsoft Scripting Runtime
- VBA – LISTAR ARQUIVOS DE UM DIRETÓRIO
- Usando o FileSystemObject - FSO - Tratando arquivos e diretórios

Todos esses links possuem excelentes exemplos que você pode seguir e adaptar.

Se tiver alguma dificuldade, é só entrar em contato.

Abraços.