← Conversa Geral

Importar células de ficheiro excel

Lida 8876 vezes

Offline

Roberto Francisco 
Membro
Mensagens 669 Gostos 1
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Ando de volta de um "bicho de 7 cabeças" e não lhe dou com o mal  :-x

Estou a tentar interligar dois ficheiros excel da seguinte forma:

São criados ficheiros todos os dias (baseado num original) em que o nome do ficheiro é o dia em que são feitos esses registos, o que acontece é que sempre que muda de dia é necessário copiar os valores do final do dia e colocar no início do seguinte.
A minha ideia é automatizar este processo que leva bastante tempo e é trabalhoso.

O meu problema é que não consigo uma forma de fazer isto porque eu preciso que numa célula possa definir o nome do ficheiro do dia anterior (ex: 14-05-2010) e depois cada célula (que esteja definida para isso) vá buscar o valor de final do dia anterior, neste caso esses valores seriam colocados nas células do inicio do dia.

Algo do tipo: ='[(Célula onde coloco a data anterior).xls]Folha1'!$B$10:$B$11

Não sei se me fiz entender, espero que alguém no +t que "mange" de excel me possa dar uma mãozinha  :cool:
Offline

Roberto Francisco 
Membro
Mensagens 669 Gostos 1
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Alguém?  :-?
Offline

cjseven 
Administrador
Mensagens 1809 Gostos 26
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

Boas Roberto!

Ei pá... Li e reli o que escreveste e não consigo perceber o que pretendes...

Que tal fazeres uns printscreens ou até um video no jing?!

Não sou barra no excel mas quem sabe vejo a luz ao fundo do tunel. :)
Offline

Roberto Francisco 
Membro
Mensagens 669 Gostos 1
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Pois era o que temia, que não me fizesse entender.
Vamos ver se me faço entender...

Na imagem os ficheiros têm nomes diferentes (um por dia, em que o nome é a data do dia dos registos).
Offline

cjseven 
Administrador
Mensagens 1809 Gostos 26
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

Estou a ver...

A tua dificuldade prende-se com a nomeação dos ficheiros, correcto?

Já tentaste criar uma macro no excel para fazer isso? Se não for possivel através das macros do excel, necessitas de uma ferramenta externa:

winautomation
ou
macroexpress
Offline

Roberto Francisco 
Membro
Mensagens 669 Gostos 1
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Ups!

Eu consigo importar cada célula, mas para isso tenho de em cada novo ficheiro definir qual é o ficheiro onde esses valores estão para serem importados.

É isso que quero evitar, ou seja, ter uma célula onde defina o nome do ficheiro e depois as células de inicio vão buscar os valores de fim do dia anterior.

Penso que foi isso que percebeste... agora macros, não sei usar... achas que essas ferramentas conseguem fazer isto?

EDIT:
Pelo que estive a ver Macros são acções que são definidas pelo utilizador, que são executadas automaticamente, no Excel eu posso definir para ele ir buscar valores de determinadas células noutro ficheiro?
Offline

cjseven 
Administrador
Mensagens 1809 Gostos 26
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

Deixa ver se entendi o processo:

1- Tens o ficheiro 14.05.2010.xls com dados inseridos
2- No dia 15.05.2010 queres que o excel crie automaticamente o ficheiro 15.05.2010.xls e copie alguns dados do ficheiro anterior para o novo ficheiro

Já consegues:

- Copiar os dados para um novo ficheiro automaticamente

Não consegues:

- Criar o novo ficheiro automaticamente e com o nome correcto

---

Acertei?

Se sim, então acho que precisas mesmo de explorar as macro do excel. Fiz aqui uma macro de teste e consigo fazer isso. O problema é que sempre que activo a macro, o excel abre o ficheiro 14.05.2010.xls, copia as células, cola num novo ficheiro e grava-o como 15.05.2010.xls.

Ou seja, não serve para os dias seguintes :D

Mas quase de certeza que dá para fazer com as macros do excel. Google it! ;)

Se não der (o que eu duvido) necessitas de uma ferramenta externa para criar macros.

Uma macro é um conjunto de operações ordenadas e que são repetidas após a macro ser activada. É semelhante às actions no photoshop.

Essas operações podem incluir variáveis. Neste caso procuras uma forma de incluir duas variáveis: nome do ficheiro fonte dos dados a copiar, e nome do ficheiro a gravar.

Começa por gravar uma macro de teste em Ferramentas >> Macros >> Gravar Macros

e depois googla por:

excel macros beginner
excel macros variables
create file excel macros
save file excel macros

e seguramente ficarás com uma ideia das potencialidades.
Offline

Roberto Francisco 
Membro
Mensagens 669 Gostos 1
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Bem esta tarde andei de volta disto e como tinhas falado nas macros fui procurar o que fazer com isso.

O que tenho neste momento é quase o que preciso:

Defini uma macro que me copia todo o conteúdo de um ficheiro para outro tudo no sitio certo, até aqui sem problema.
O que me falta agora é resolver a questão da origem, já que sempre que abro um novo ficheiro e executo a macro, para cada célula, pede-me para identificar o ficheiro de origem, o que para preencher algumas dezenas de células não é lá grande solução.

O que tinha pensado, se for possível é, no Visual Basic definir que a macro vai buscar os dados a um determinado ficheiro (ex: semnome.xls), neste caso o ficheiro do dia, 15-04-2010.xls seria renomeado para semnome.xls e colocado numa pasta especifica, executada a macro no novo ficheiro e renomeado de volta o ficheiro de origem, o problema aqui é que não consigo que vá buscar os valores sempre ao mesmo ficheiro.

Ou então escrever numa célula do ficheiro de destino o nome do ficheiro de origem e a macro usar isso para saber qual o ficheiro de origem onde deve ir buscar as variáveis.

Obrigado pela ajuda que me está a dar.
Roberto Francisco
Offline

cjseven 
Administrador
Mensagens 1809 Gostos 26
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

Infelizmente não te sei dizer se isso é possivel com os macros do excel... E VB não é a minha praia :D

Se não te safares, faz o download trial de 30 dias do macro express:

http://www.macroexpress.com/

Com esse software consegues automatizar praticamente tudo. Tenho (quase) certeza que dá para fazer o que pretendes (e talvez mais!)

Boa sorte!
Offline

Roberto Francisco 
Membro
Mensagens 669 Gostos 1
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Estou aqui ver uns artigos de VBA e parece-me que dá para fazer isto... vou ter de estudar um pouco de VBA mas valeu pela ajuda ;)

Se me conseguir safar, posto aqui o resultado, embora seja para uma utilização muito específica.
Offline

cjseven 
Administrador
Mensagens 1809 Gostos 26
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1 1000 Posts

Puseste-me a brincar com o macro express... :)

1- Abre o ficheiro default com os dados do último dia
2- Copia o fim para o inicio
3- Grava o ficheiro como default (para continuar a ser preenchido e será utilizado no proximo dia)
4- Grava o ficheiro com um novo nome (que vai buscar a um txt previamente carregado com os nomes dos próximos dias)

http://www.screencast.com/users/AntonioAlmeida/folders/Jing/media/386ffa80-b3d1-47ea-bf7e-36f009a80290

P.S. Após inserir os dados do "fim" será necessário gravar o ficheiro 15.05.2010.xls e depois gravar tb como default.xls, já que será o ficheiro utilizado para correr novamente a macro no dia seguinte.
Offline

Roberto Francisco 
Membro
Mensagens 669 Gostos 1
Feedback +3

Troféus totais: 28
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Bem, desde já obrigado pelo teu empenho nesta questão.

A tua solução é demais mas como não tenho permissão para instalar nada naquele pc não seria viável.
Contudo, andei a "fuçar" até conseguir chegar ao que pretendia, belas madrugadas em frente ao pc.  :superlol:

Agora como prometido deixo aqui o resultado final:

Código: [Seleccione]
Sub Macro3()
'
' Macro3 Macro
'
' Keyboard Shortcut: Ctrl+r
'

Dim origem                                          (Define a variável)
Dim destino                                    (Define a variável)
Dim origem1 As Date                                     (Define a variável)
Dim destino1 As Date                                 (Define a variável)

origem1 = InputBox("Data origem?")                          (Define que a variável origem1 é recolhida numa inputbox)
destino1 = InputBox("Data destino?")                   (Define que a variável destino1 é recolhida numa inputbox)
origem = origem1 & ".xls"                          (Formatação do nome do ficheiro de origem)         
destino = destino1 & ".xls"                              (Formatação do nome do ficheiro de destino)

    Workbooks.Open "C:\documentos\" & origem                   (Abrir o ficheiro de origem)
    Range("F51:I51").Select                               (Selecciona a célula que queremos copiar)         
    Selection.Copy                                                (Copia a célula seleccionada)
    Windows(destino).Activate                                         (Activa o ficheiro de destino)
    ActiveSheet.Paste                                                    (Cola os valores copiados atrás)
    Windows(origem).Activate                                       (Activa o ficheiro de origem)
    Range("F52:I52").Select                                        (daqui para baixo o processo repete-se para as restantes células)
    Selection.Copy
    Windows(destino).Activate
    Range("F52:I52").Select
    ActiveSheet.Paste
    Windows(origem).Activate
    Range("F53:I53").Select
    Selection.Copy
    Windows(destino).Activate
    Range("F53:I53").Select
    ActiveSheet.Paste
    Windows(origem).Activate
    ActiveWindow.Close                               (aqui fecha o ficheiro de origem que já não é necessário)
   
    MsgBox "Dados copiados com sucesso", vbOKOnly, "Mensagem de Sistema"        (Mensagem de sucesso)
End Sub



Fica óbvio para quem testar que pode dar alguns erros, por exemplo no caso de se enganarem nos nomes dos ficheiros, mas a base está aqui, depois é trabalha-la para a melhorar.

Agora vou tentar aprender mais de VBA para conseguir melhorar a interface e aplica-la a outras coisas :obrigado:
Roberto Francisco