Notifications
Clear all

(VBA) Varias planilhas alimentando uma matriz

24 Posts
3 Usuários
0 Reactions
2,925 Visualizações
(@gsousa)
Posts: 12
Active Member
Topic starter
 

Boa tarde pessoal!
Tenho um grande desafio e gostaria muito de contar com a ajuda de vocês.

Tenho esta planilha: http://www.sendspace.com/file/9kcfy7

Esta, é um banco de dados de anomalias de segurança da empresa. Ela tem aproximadamente 120 abas. A ultima aba desta planilha é a "P128". Eu preciso, criar uma aba "P129", cujo esta apresentara as informações das abas: P03 P04 P05 P06 P07 P10 P11 P12 P13 P14 P15 P17 P18 P19 P20 P21 P22 P24 P25 P26 P27 P28 P29 P30 P31 P33 P34 P35 P36 P37 P38 P39 P40 P41 P42 P44 P45 P46 P47 P48 P49 P50 P51 P52 P53 P55 P56 P57 P58 P59 P60 P61 P63 P64 P65 P66 P68 P69 P70 P71 P72 P73 P75 P76 P77 P78 P79 P80 P81 P82 P83 P85 P86 P89 P90 P91 P93 P94 P95 P97 P98 P99 P103 P104 P105 P106 P107 P109 P110 P111 P112 P113 P115 P116 P117 P119 P120 P121 P123 P124 P125 P126 P127 P128 (TODAS ESTAS ABAS TEM O MESMO LAYOUT)

No caso, a aba "P129" teria o mesmo layout das abas citadas acima, enquanto as planilhas acima forem atualizadas, a "p129" automaticamente também será.
Desta forma, a "P129" se tornara um grande banco de dados, onde futuramente, eu criarei uma aba com filtros para extrair relatorios distintos.

esta situação, me parece bem cabeluda, porem sei que aqui irei encontrar ajuda.

Obrigado!!

 
Postado : 16/12/2013 1:19 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

gsousa,

Boa Tarde!

São necessários maiores detalhes para poder lhe ajudar. Sua explicação está bem clara, entretanto, para fazer um sumário como esse, creio que a melhor forma seja utilizando código VBA e, para isso, é necessário que se saiba outros detalhes, como por exemplo, onde as linhas começam (linhas e colunas), quantas colunas possuem os arquivos, que colunas devem ser copiadas, se há algum critério para que as linhas e colunas sejam copiadas, como se sabe que uma linha foi alterada nas abas de origem, se a aba de destino será cumulativa, ou seja, sempre receberá dados e estes não serão sobrescritos e por aí vai...)

Desse modo, sugiro você colocar um exemplo do seu arquivo aqui, compactando-o antes. Detalhe: logo abaixo do campo de mensagem há um local para inserção de arquivos aqui mesmo no fórum. Muitos integrantes do fórum encontram-se em locais de trabalho (como eu, por exemplo), que não conseguem acessar esses sites de armazenamento gratuito.

 
Postado : 16/12/2013 1:38 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

tente assim..

Sub AleVBA_9942()
Dim ws As Worksheet, ws1 As Worksheet, LR As Long

Set ws1 = Sheets("P129")
'If MsgBox("Limpar os dados existentes da guia Tabela Dinâmica?", vbYesNo, "Confirmação") = vbYes Then ws1.Cells.Clear

For Each ws In Worksheets
    If ws.Name <> ws1.Name Then
        LR = ws.Range("B" & Rows.Count).End(xlUp).Row
        ws.Range("B11:K" & LR).Copy ws1.Range("A" & Rows.Count).End(xlUp).Offset(1)
    End If
Next ws

End Sub
 
Postado : 16/12/2013 1:55 pm
(@gsousa)
Posts: 12
Active Member
Topic starter
 

Wagner, bom dia!
Eu gostaria de copiar o intervalo B11 até K11 e até que linha seria copiado, é infinito. Pois, na teoria quando alguma das planilhas que mencionei acima recebesse uma atualização a, "P129" também se atualizaria. Desta forma, ela seria cumulativa, e todos os dados inseridos nas "planilhas filhas" permaneceriam na "P129"

Seu código Alexandre é exatamente o que eu queria, porém, eu o executei com um botão. Agora seria possível, essa macro ser executada sem a necessidade de um botão ou qualquer outro comando para que eu a execute? Vejam esta planilha: http://www.sendspace.com/file/ep4kov.

Este é o resultado final que eu quero chegar, mas para chegar neste resultado, eu tenho que consolidas todas as "abas filhas" em uma unica aba (P129), para depois, criar uma suposta aba "P130" para gerar os relatórios com os filtros do modelo acima.

Você me entenderam?

Muito obrigado pela excelente ajuda de vocês!
Fico no aguardo do retorno

 
Postado : 17/12/2013 4:58 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

No link que você postou o arquivo tem somente 3 guias ( Relatorio,Exemplo BD, Estrutura), tem certeza que é esse o arquivo?

Agora seria possível, essa macro ser executada sem a necessidade de um botão ou qualquer outro comando para que eu a execute

Com vai querer executar o código???
Att

 
Postado : 17/12/2013 6:25 am
(@gsousa)
Posts: 12
Active Member
Topic starter
 

Ola Alexandre,
este link é referente a uma planilha que um amigo fez pra mim, para extrair relatorios com filtros (podendo selecionar exatamente o que eu quero extrair)
Eu só à anexei, para você terem ideia do por que eu quero unificar todas informações das planilhas mencionada na minha pergunta. Ou seja, esta ultima planilha de 3 abas é somente um exemplo do que eu pretendo fazer com a planilha que eu enviei inicialmente. A aba P129 será o banco de dados de todas informações unificadas e a aba P130 sera a aba cujo eu irei conseguir emitir um relatório com as informações da aba P129...

Entendeu?
Muito obrigado,

Gabriel

 
Postado : 17/12/2013 7:10 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Ok, mas como vai querer executar o código???

Att

 
Postado : 17/12/2013 7:15 am
(@gsousa)
Posts: 12
Active Member
Topic starter
 

A minha ideia, era a aba "p129" conter apenas o banco de dados, desta forma, o usuario não teria contato com essa aba. Ela deveria se atualizar sozinha, para assim, a aba "P130" extrair relatorios com base na "P129"

 
Postado : 17/12/2013 7:52 am
(@gsousa)
Posts: 12
Active Member
Topic starter
 

Resumindo melhor, a aba "P129" se atualizaria sempre que a planilha fosse aberta ou salva, por exemplo... (Consequentemente o codigo se executaria automaticamente....)

 
Postado : 17/12/2013 7:54 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Quanto ao executar quando abrir o arquivo veja a imagem
http://www.ozgrid.com/VBA/auto-run-macros.htm

Esse código fica dentro de=o módulo EstaPasta_de_trabalho

Private Sub Workbook_Open()
AleVBA_9942
End Sub

Esse código fica dentro de=o módulo comum

Sub AleVBA_9942()
Dim ws As Worksheet, ws1 As Worksheet, LR As Long

Set ws1 = Sheets("P129")
'If MsgBox("Limpar os dados existentes da guia Tabela Dinâmica?", vbYesNo, "Confirmação") = vbYes Then ws1.Cells.Clear

For Each ws In Worksheets
    If ws.Name <> ws1.Name Then
        LR = ws.Range("B" & Rows.Count).End(xlUp).Row
        ws.Range("B11:K" & LR).Copy ws1.Range("A" & Rows.Count).End(xlUp).Offset(1)
    End If
Next ws

End Sub

Att

 
Postado : 17/12/2013 8:36 am
(@gsousa)
Posts: 12
Active Member
Topic starter
 

Olá Alexandre.
Veja a planilha:

Eu apliquei a macro conforme você orientou, mas quando eu abro e fecho a planilha e transcrevo algum dado em alguma das "Abas filhas" a "P129" não o demonstra. Também, a macro que vc me enviou executa um comando para limpar a primeira linha. Este eu não intendi.

Vc poderia checar se eu apliquei os codigos nos respectivos lugares?
obrigado!

 
Postado : 17/12/2013 9:56 am
(@gsousa)
Posts: 12
Active Member
Topic starter
 

Me esqueci do link.Agora, segue o mesmo.

http://www.sendspace.com/file/v7tfcy

 
Postado : 17/12/2013 9:58 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!!

Também, a macro que vc me enviou executa um comando para limpar a primeira linha. Este eu não intendi.

Eu ajustei o código quanto a linha.
http://www.sendspace.com/file/hjwvo7

mas quando eu abro e fecho a planilha e transcrevo algum dado em alguma das "Abas filhas" a "P129" não o demonstra.

Oc´digo vai copiar todas as guias diferentes da guia "P129", acontece que após alterar um determinada dado em uma guia, após salvar, você deve fachar o arquivo, somente após abri-lo, e executar a macro é que o código vai trabalhar novamente.

Caso os dados copiados das guias, não seja isso que quer tente demostrar com exemplos.

Obs A maior parte das suas guias tem dados somente em duas colunas não contíguo além de nem todas estarem preenchidas por dados.

Olhe com atenção e faça os testes.

Att

 
Postado : 17/12/2013 10:19 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Segue uma correção do código...

Sub AleVBA_9942()

Dim ws As Worksheet, ws1 As Worksheet, LR As Long

Set ws1 = Sheets("P129")
If MsgBox("Limpar os dados existentes da guia P129?", vbYesNo, "Confirmação") = vbYes Then ws1.Cells.Clear
Application.ScreenUpdating = 0
For Each ws In Worksheets
    If ws.Name <> ws1.Name Then
        LR = ws.Range("B" & Rows.Count).End(xlUp).Row
        ws.Range("B11:K" & LR).Copy ws1.Range("A" & Rows.Count).End(xlUp).Offset(1)
    End If
Next ws

With Sheets("P129")
   Sheets("P129").Range("A1:K1").Value = Worksheets("P3").Range("B10:K10").Value
   With ws1.Cells
        .Copy
        .PasteSpecial xlPasteValues
   End With
   '.Columns("E:F").EntireColumn.Delete  '<- Caso queira deletar alguma coluna
   '.Columns("H:K").EntireColumn.Delete  '<- Caso queira deletar alguma coluna
End With
Application.ScreenUpdating = 1
End Sub

Na postagem anterior estava com alguns defeitos!!

Att

 
Postado : 17/12/2013 10:38 am
(@gsousa)
Posts: 12
Active Member
Topic starter
 

Alexandre, exatamente isso! massa!
Porém, existe um detalhe crucial... Não sei em que parte deste codigo que voce me mandou, define quais abas serão copiadas para a P129.
Pois, não sao todas abas da planilha que serão copiadas. Algumas abas, são as abas de direcionamento para as planilhas banco de dados.
As abas que deverão ser copiadas e extraidas para a aba P129 são:
P03 P04 P05 P06 P07 P10 P11 P12 P13 P14 P15 P17 P18 P19 P20 P21 P22 P24 P25 P26 P27 P28 P29 P30 P31 P33 P34 P35 P36 P37 P38 P39 P40 P41 P42 P44 P45 P46 P47 P48 P49 P50 P51 P52 P53 P55 P56 P57 P58 P59 P60 P61 P63 P64 P65 P66 P68 P69 P70 P71 P72 P73 P75 P76 P77 P78 P79 P80 P81 P82 P83 P85 P86 P89 P90 P91 P93 P94 P95 P97 P98 P99 P103 P104 P105 P106 P107 P109 P110 P111 P112 P113 P115 P116 P117 P119 P120 P121 P123 P124 P125 P126 P127 P128

Como altero isso no codigo que me enviou?

 
Postado : 17/12/2013 12:01 pm
Página 1 / 2