Notifications
Clear all

VBA-Copiar Dados de uma planilha para outra com condição

4 Posts
3 Usuários
0 Reactions
1,087 Visualizações
(@ferzane)
Posts: 2
New Member
Topic starter
 

Prezados,
procurei pelo site mas não encontrei algum tópico, se me ajudarem a encontrar agradeço, caso não se puderem ajudar com o meu caso.

Tenho uma planilha onde a planilha 2 é minha banco de dados, todos os dados são lançados ali.
Na primeira coluna tenho um identificador semanal, 1 a 52, correspondendo às 52 semanas do ano, e tenho 52 planilhas, nomeadas, semana 1, semana 2....

qual a ideia, construir uma VBA onde, encontrado o valor de 1 a 52, os valores das linhas correspondentes sejam copiados para a planilha correspondente, mas não deixando linhas vazias entre elas.

eu consegui fazer isso, mas atribuindo valores coluna por coluna, e deu uma macro muito grande e estourou o limite de linhas da macro. Então fiquei limitado a 5 semanas, ou seja, quando eu executo a vba, só consigo copiar as linhas até a semana 5 e só.

Eu acredito que tenha uma forma mais simples pra isso, mas não consegui fazê-lo.

Sub Relatorio()
    ultimaLinha = Plan2.Cells(Rows.Count, "a").End(xlUp).Row
    Plan3.Range("A2:AH71").ClearContents
    Lin = 2
    For i = 2 To ultimaLinha
    If Plan2.Cells(i, 1) = "1" Then
Plan3.Cells(Lin, 1) = Plan2.Cells(i, 1)
Plan3.Cells(Lin, 2) = Plan2.Cells(i, 2)
Plan3.Cells(Lin, 3) = Plan2.Cells(i, 3)
Plan3.Cells(Lin, 4) = Plan2.Cells(i, 4)
Plan3.Cells(Lin, 5) = Plan2.Cells(i, 5)
Plan3.Cells(Lin, 6) = Plan2.Cells(i, 6)
Plan3.Cells(Lin, 7) = Plan2.Cells(i, 7)
Plan3.Cells(Lin, 8) = Plan2.Cells(i, 8)
Plan3.Cells(Lin, 9) = Plan2.Cells(i, 9)
Plan3.Cells(Lin, 10) = Plan2.Cells(i, 10)
Plan3.Cells(Lin, 11) = Plan2.Cells(i, 11)
Plan3.Cells(Lin, 12) = Plan2.Cells(i, 12)
Plan3.Cells(Lin, 13) = Plan2.Cells(i, 13)
Plan3.Cells(Lin, 14) = Plan2.Cells(i, 14)
Plan3.Cells(Lin, 15) = Plan2.Cells(i, 15)
Plan3.Cells(Lin, 16) = Plan2.Cells(i, 16)
Plan3.Cells(Lin, 17) = Plan2.Cells(i, 17)
Plan3.Cells(Lin, 18) = Plan2.Cells(i, 18)
Plan3.Cells(Lin, 19) = Plan2.Cells(i, 19)
Plan3.Cells(Lin, 20) = Plan2.Cells(i, 20)
Plan3.Cells(Lin, 21) = Plan2.Cells(i, 21)
Plan3.Cells(Lin, 22) = Plan2.Cells(i, 22)
Plan3.Cells(Lin, 23) = Plan2.Cells(i, 23)
Plan3.Cells(Lin, 24) = Plan2.Cells(i, 24)
Plan3.Cells(Lin, 25) = Plan2.Cells(i, 25)
Plan3.Cells(Lin, 26) = Plan2.Cells(i, 26)
Plan3.Cells(Lin, 27) = Plan2.Cells(i, 27)
Plan3.Cells(Lin, 28) = Plan2.Cells(i, 28)
Plan3.Cells(Lin, 29) = Plan2.Cells(i, 29)
Plan3.Cells(Lin, 30) = Plan2.Cells(i, 30)
Plan3.Cells(Lin, 31) = Plan2.Cells(i, 31)
Plan3.Cells(Lin, 32) = Plan2.Cells(i, 32)
Plan3.Cells(Lin, 33) = Plan2.Cells(i, 33)
Plan3.Cells(Lin, 34) = Plan2.Cells(i, 34)
        Lin = Lin + 1
   End If
Next

se puderem me ajudar, agradeceria.

Obrigado
Fernando

 
Postado : 27/03/2018 12:46 pm
(@lustosag)
Posts: 39
Eminent Member
 

Espero que alguem te ajude, mas se não ajudar, faça gambiarras... voce conseguiu até 5 semanas, coloque esse codigo das 5 semanas em uma check box em evento change(), e no codigo principal só coloca pra dar change na checkbox... faça varias checkbox do mesmo metodo que no fim voce vai chegar a todas as semanas ... é gambiarra total, e concerteza tem um método melhor que eu tambem nao sei, mas ta ai se ninguem responder hehe

 
Postado : 27/03/2018 1:08 pm
(@klarc28)
Posts: 971
Prominent Member
 
dim j as integer
For i = 2 To ultimaLinha
If Plan2.Cells(i, 1) = "1" Then
for j = 1 to 34
Plan3.Cells(Lin, j) = Plan2.Cells(i, j)
next j
Lin = Lin + 1
End If
Next
 
Postado : 30/03/2018 3:57 pm
(@ferzane)
Posts: 2
New Member
Topic starter
 

:D Obrigado pela Dica LustosaG!!!!!
:D Klarc28, matou a charada, a VBA agora esta como eu queria, fiz um pequeno ajuste para apagar a planilha antes de executar o restante!!!

show de bola,

muito obrigado!!

PS. Desculpe a demora em responder-lhe!!
um abraço. :D

 
Postado : 09/04/2018 11:44 am