Notifications
Clear all

Macro - Copiar Relatório com células ocultas

13 Posts
4 Usuários
0 Reactions
2,394 Visualizações
(@francisco)
Posts: 78
Trusted Member
Topic starter
 

Prezados Boa Noite.

Já estou estressado tentando achar uma solução para o meu problema. Como não consegui, venho solicitar o conhecimento especializado de vocês.
Tenho uma planilha que todo o ano preciso copiar algumas informações para a planilha do ano seguinte. No meu caso é o Relatório 2014 para o 2015. No início era tranquilo porque o nº de informações era pequeno eu copiava um a um. Como a planilha cresceu não tem jeito, teria de passar dias e dias copiando. :(
As planilhas são iguais, mesmo padrão, no entanto, na hora de copiar algumas informações para essa outra pasta - Relatório 2015, as informações estão copiando para as células ocultas e não para as células que precisam ter as informações.
Me ajudem por favor.
No aguardo e agradecendo antecipadamente,
Francisco Jr.
*Para melhor elucidar, postei em anexo, uma planilha exemplificativa que tem os maiores detalhes do que eu preciso. A informação está na parte abaixo da planilha.

 
Postado : 08/01/2015 9:36 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Já tinha visto este relatório em outro tópico e ainda não entendi o que deseja copiar? Ou entendi parte, a parte das colunas, mas não as linhas serão as linhas 9/31/42/53??
Para que possamos "dizer" o que copiar, precisa-se de um algorítmico lógico que permita mecanizar/automatizar a transferência, que ainda não consegui "enchergar"

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 09/01/2015 12:59 pm
(@edcronos)
Posts: 1006
Noble Member
 

nem lembrava que tinha ajudado em algo parecido até ver sua MP

em vez de fazer outro topico era para ter colocado mais informação no outro
isso iria centralizar informação e daria para saber oq não deu certo

mas se o mestre reinaldo não conseguiu te ajudar, imagina eu

em vez de ficar "PA" daqui e "PA" de lá
pegue suas planilha retire tudo que é informação pessoal ou faça uma igual com informação compatível
pegue a planilha para onde os dados vão ser colados e informe onde tem que ser colado cada dado

e de informação de quantas planilhas são e qual o esquema de copiar colar
tipo
pla1_aba1_2014 ---->>> pla1_aba1_2015
pla1_aba2_2014 ---->>> pla1_aba2_2015
pla1_aba3_2014 ---->>> pla1_aba3_2015
ou
pla1_aba1_2014 ---->>> pla1_aba1_2015
pla2_aba1_2014 ---->>> pla2_aba1_2015
pla3_aba1_2014 ---->>> pla3_aba1_2015
ou...
o dificil não é fazer oq vc quer "com a planilha"
é adivinhar o vc quer

obs.
para informar para onde os dados tem que ir
use as formas do excel cada cor para uma range, e explique qual é a informação que vai determinar a colagem

eu entendi que os processos não terminados em 2014 iram ter continuação em 2015, então tem que ir para a nova planilha
não entendi sua movimentação de processos, mas me pareceu meio complicado de manusear

sei que não tenho nada com isso...

mas em vez de uma planilha por ano, e a mistura de concluídas e não consolidas,
não seria mais interessante uma planilha de (Ativos), onde seria sempre a mesma de trabalho, apenas adicionando novos processos, sem se preocupar de a cada ano ter que fazer uma nova

e "Movimentar" os Concluídos para uma planilha de (Arquivo)

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 10/01/2015 9:10 am
(@francisco)
Posts: 78
Trusted Member
Topic starter
 

Prezados,

Me vejo numa situação difícil para explicar. Como manuseio os dados todos os dias, repassá-los é mais complicado.
Em relação a cópia das linhas, para melhor elucidar, deverá obedecer o seguinte:
Devem ser copiadas todas as linhas cuja coluna "T" esteja com a situação "Em andamento". Mas apenas as informações constantes das linhas 9/20/31 e 53, devem ser copias para a outra planilha(Planilha 2015), pois a coluna T9, T20, T31 e T53 estão com a situação "Em andamento". A linha 42 não será copiada pois está com a situação "Concluída".
Porém, na hora de copiar para a outra planilha (2015) tem de seguir o mesmo padrão da planilha 2014 no quesito, número de linhas entre uma ordem e a outra. Ou seja, considerando que a ordem 1, vai da linha 4 a 14, a linha 9 é a que deve ser copiada, então esse padrão tem de ser obedecido. Da mesma forma, ordem 2, vai da linha 15 a 25, é a linha 20 que deve ser copiada, então esse padrão tem de ser obedecido. Assim sucessivamente, desde que a coluna T esteja com a situação Em andamento.
Segue anexa a planilha 2015 (vazia). Planilha essa que tem de ser copiado os dados da planilha 2014 discriminadas acima. Lembro que a macro tem de considerar até 350 ordens.
Espero ter sido um pouco mais claro.
Qualquer outra dúvida estou à disposição.
Muito obrigado pela atenção dispensada.
Abs,
Francisco Jr.

 
Postado : 11/01/2015 7:12 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não tenho certeza de haver entendido completamente a demanda, mas vamos iniciar.
No arquivo 2015 a rotina

Sub Copia()
Dim sPath As String, sPlanAnt As String, sPlanAtual
Dim x As Integer, y As Integer
'Anota onome do arquivo atual
sPlanAtual = ThisWorkbook.Name
'Caminho completo do arquivo anterior
sPath = "D:ReinaldoDownloadsENTRADA E SAÍDA"
'Nome do arquivo anterior
sPlanAnt = "RELATÓRIO 2014.xlsx"
'abre o arquivo
Workbooks.Open Filename:=sPath & sPlanAnt
'determina qual a ultima linha da coluna T com dados
lrow = Workbooks(sPlanAnt).Sheets(1).Cells(Cells.Rows.Count, "T").End(xlUp).Row
'Inicia lopp nas linhas do arquivo anterior
For x = 4 To lrow
    'Verifica se esta em andamento, se estiver segue
    If UCase(Cells(x, "T").Value) = UCase("em Andamento") Then
        'Verifica se coluna e visivel, se for copia valores
        For y = 1 To 83 'Coluna A ate coluna CE
            If Workbooks(sPlanAnt).Sheets(1).Columns(y).Hidden <> True Then
              Workbooks(sPlanAtual).Sheets(1).Cells(x, y).Value = Workbooks(sPlanAnt).Sheets(1).Cells(x, y).Value
            End If
        Next
    End If
Next
'Fecha arquivo anterior
Workbooks(sPlanAnt).Close
End Sub

Copia as linhas 2014"Em Andamento" , para mesma linha em 2015

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 13/01/2015 10:58 am
(@francisco)
Posts: 78
Trusted Member
Topic starter
 

Prezado Reinaldo, como vai?

Muitíssimo obrigado pelo retorno. O entendimento está perfeito. É exatamente essa a rotina.
Só preciso saber se pode adequar três detalhes no código:

1ª) Não é necessário copiar as informações da coluna A (ORDEM);
2ª) No código, a linha 42 da Planilha 2014 não foi copiada. Acertou em cheio, perfeito. Mas será que é possível na hora de copiar as informações da Planilha 2014 (aquelas que a coluna T estejam preenchidas com a condição: EM ANDAMENTO), e colá-las na Planilha 2015 seguir a sequência sem pular as linhas. Exemplo: As informações constantes da linha 53 serem coladas na linha 42 e assim sucessivamente, sem pular?
3ª) A macro prever a possibilidade de copiar, seguindo o padrão, informações até a ordem 325, que equivale a linha 3585.

Desde já agradeço imensamente a sua atenção.

No aguardo.
Francisco Júnior

 
Postado : 13/01/2015 8:49 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

"1ª) Não é necessário copiar as informações da coluna A (ORDEM)"
Altere na linha For y = 1 To 83 'Coluna A ate coluna CE
para For y = 2 To 83 'Coluna B ate coluna CE, assim iniciará a copia à partir da coluna B

"3ª) A macro prever a possibilidade de copiar,"
No caso a variável lRow obtém o ultimo registro na coluna T com valor, independente do numero da ordem.
Assim não atende??

Quanto ao item 2ª), não encontrei/visualizei um algoritmo que me permita essa sequencia

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 14/01/2015 8:31 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Peguei o bonde andando, e na verdade, não avaliei todo o código comparado com o que foi discutido no tópico, mas, Reinaldo, sobre esse item 2, não daria pra fazer algo do tipo:

For x = 4 To lrow
    z = x 'INSERIDO GT
    'Verifica se esta em andamento, se estiver segue
    If UCase(Cells(x, "T").Value) = UCase("em Andamento") Then
        'Verifica se coluna e visivel, se for copia valores
        For y = 1 To 83 'Coluna A ate coluna CE
            If Workbooks(sPlanAnt).Sheets(1).Columns(y).Hidden <> True Then
               Workbooks(sPlanAtual).Sheets(1).Cells(z, y).Value = Workbooks(sPlanAnt).Sheets(1).Cells(x, y).Value ' ALTERADO GT
               z = z + 1 'INSERIDO GT
            End If
        Next
    End If
Next

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 14/01/2015 8:36 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Gilmar,
até poderia ser algo do tipo, não testei ainda.
Pelo que foi postado anteriormente, entendi que o numero de linhas entre uma ordem e outra é variável assim como a linha do status;
apesar que no exemplo sempre há 11 (onze) linhas para cada ordem e sempre a linha central tem o status esperado,
sendo desejado que a linha com o status "Em andamento" fique na mesma posição relativa à que ocupava.
Se for garantido que uma ordem sempre ocupará 11 linhas, mesmo que nem todas sejam preenchidas, já é um bom ponto de partida.
Estou esperando o parecer do Francisco.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 14/01/2015 11:22 am
(@francisco)
Posts: 78
Trusted Member
Topic starter
 

Reinaldo e Gilmar, boa noite e me desculpo por só dar retorno agora. Como falei, estou na fase prestação de contas e a ralação está enorme. :( Madrugando no trabalho e chegando tarde da noite em casa. Vcs não têm ideia da ajuda que estão me dando. Agradeço sempre.

Bom, para melhor esclarecer, informo que o padrão é esse mesmo. Sempre cinco linhas em branco pra cima, a próxima preenchida, e mais cinco linhas em branco pra baixo.
Sempre há 11 (onze) linhas para cada ordem e sempre a linha central tem o status esperado. No caso tem de levar em consideração o status EM ANDAMENTO.
A base de dados sempre será assim, no exemplo da planilha modelo entre uma ordem e outra é respeitada essa condição de preenchimento (linhas: 9; 20; 31; 42; 53) e assim por diante.

Muito obrigado,
À disposição.
Abs,
Francisco Jr.

 
Postado : 14/01/2015 8:40 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

então acho que daria pra adaptar algo tipo:

For x = 4 To lrow
    z = Application.WorksheetFunction.Ceiling(x, 11) + 3 'INSERIDO GT
    'Verifica se esta em andamento, se estiver segue
    If UCase(Cells(x, "T").Value) = UCase("em Andamento") Then
        'Verifica se coluna e visivel, se for copia valores
        For y = 1 To 83 'Coluna A ate coluna CE
            If Workbooks(sPlanAnt).Sheets(1).Columns(y).Hidden <> True Then
               Workbooks(sPlanAtual).Sheets(1).Cells(z, y).Value = Workbooks(sPlanAnt).Sheets(1).Cells(x, y).Value ' ALTERADO GT
               z = z + 1 'INSERIDO GT
            End If
        Next
    End If
Next

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 15/01/2015 4:49 am
(@francisco)
Posts: 78
Trusted Member
Topic starter
 

Prezado Gilmar,

Obrigado pelo retorno. Irei testar o código e dou um retorno.

Mais uma vez agradeço a enorme força.

Um ótimo dia para todos.

Francisco Jr.

 
Postado : 16/01/2015 5:57 am
(@francisco)
Posts: 78
Trusted Member
Topic starter
 

Fique um tempão sem computador. Simplesmente tive de comprar outro.
No meu trabalho não é permitido entrar no Fórum

Fiquei devendo um retorno.

Só pra dizer mais uma vez que vcs são FERAS!!!!

OBRIGADÃO PELA AJUDA!!!! DEU TUDO CERTO... ACABEI DE TESTAR!!!!!

ABRAÇOS

 
Postado : 22/02/2015 7:58 am