none
Macro para copiar e colar em Loop páginas e dados da mesma Planilha RRS feed

  • Pergunta

  • Preciso de ajuda, ou seja, uma macro, pois não consegui fazer com os meus conhecimentos, o seguinte:

    Na Planilha Ação, o intervalo A1:L56, é a página 1, que esta com a quebra de página ajustada ao intervalo.

    Nesta página 1, as células  D3,F3,H3  -  D5,F5,H5   -  D7,F7,H7, estão vazias para receber dados com nomes.

    Estas células estão com bordas e texto fixo acima delas ( Nome:)

    Na mesma Planilha Ação, mas fora do intervalo da página 1, tem um pequeno cadastro, com as células R1,S1,T1  -  R2, S2,T2   -  R3,S3,T3 contendo os nomes. 

    Como neste cadastro da planilha Ação tem 3 linhas iniciadas em R1,R2 e R3 com os dados, preciso de 3 páginas na mesma planilha Ação contendo cada uma os dados enviados de cada linha do cadastro.

    Exemplo:

    Na página 1 dados da linha R1, página 2 dados da linha R2 e página 3 dados da linha R3.

    Cada página também deve ter a formatação da página 1 (células com bordas e texto fixo acima).

    Esta macro deverá fazer:

    Criar na mesma planilha Ação a quantidade páginas necessárias (3)

    Em loop, na Planilha Ação, Copiar a página 1 e cola-la após a última linha da página 1, o que resultará na página 2.

    Após repetir, mas colando no final da última linha da página 2, o que resultará na página 3.

    Em loop, copiar os dados da linha R1,S1,T1 e colá-las nas células D3,F3,H3 da página 1.

    Depois copiar os dados da linha R2,S2,T2 e colá-las nas células D5,F5,H5 da página 2.

    Depois copiar os dados da linha R3,S3,T3 e colá-las nas células D7,F7,H7 da página 3.

    Agradeço a ajuda.

    segunda-feira, 21 de julho de 2014 18:30

Respostas

Todas as Respostas

  • anders0nn.

    O que ocorre é o seguinte:

    Resumindo, eu preciso de um loop para copiar e colar um intervalo, e também um loop para copiar o conteúdo de células, e colar em cada um destes intervalos.

    Estes dados são apenas para exemplo, pois depois da macro ser criada irei adapta-la.

    O que eu tenho:

    Na planilha Ação, existe um pequeno cadastro, ou seja, a partir da linha 1 as células R1, S1, T1 contem dados, e assim sucessivamente nas linha 2 R21, S2, T2 , linha 3 R3, S3, T3.

    Também na planilha Ação, têm um intervalo A1:L56, o qual eu chamei de  “página” pois ao verificar a sua a quebra de página, o intervalo aparece entre linhas azuis e com a palavra Página 1.

    Ocorre que este intervalo A1:L56 (página1), é uma espécie de formulário, possuindo uma imagem inserida (um logotipo) e células vazias formatadas (bordas, tipo de fonte, etc.) onde serão colados dados.

    A macro deverá fazer em loop:

    1 – Intervalos (páginas) a serem criados:

    Que o intervalo A1:L56 (página1), com todo o seu conteúdo (imagem e formatação) seja copiado e colado logo após a linha A56, e assim sucessivamente.

    A quantidade ou limite de copia e cola do intervalo A1:L56 (página1), será determinada pela quantidade linhas preenchidas do cadastro (R1, R2 ...)

    Assim, serão sido criados intervalos (páginas) personalizados, que poderão até ser impressos individualmente.

    2 – Copiar as células da linha do cadastro e colar em cada intervalo criados

    As células do intervalo A1:L56 serão preenchidas com os dados da linha 1 R1

    Copia a célula R1 do cadastro e cola na célula D3 do intervalo A1:L56

    Copia a célula S1 do cadastro e cola na célula F3 do intervalo A1:L56

    Copia a célula R1 do cadastro e cola na célula D3 do intervalo A1:L56

    As células do intervalo A57:L112 serão preenchidas com os dados da linha 2 R2,

    Copia a célula R2 do cadastro e cola na célula D59 do intervalo A57:L112

    Copia a célula S2 do cadastro e cola na célula F59 do intervalo A57:L112

    Copia a célula R2 do cadastro e cola na célula D59 do intervalo A57:L112

    As células do intervalo A112:L1168 serão preenchidas com os dados da linha 3 R3,

    Copia a célula R3 do cadastro e cola na célula D115 do intervalo A112:L1168

    Copia a célula S3 do cadastro e cola na célula F115 do intervalo A112:L1168

    Copia a célula R3 do cadastro e cola na célula D115 do intervalo A112:L1168

    E assim sucessivamente até a última linha do cadastro, ser tiver mais linhas.

    Sendo que a quantidade de copia e cola do intervalo (página1), formando novos intervalos, um imediatamente após o outro, será determinada pela quantidade de linhas a partir da linha R1. 

    Penso que para conseguir o meu objetivo, deve-se:

    1º criar os intervalos na quantidade determinada pelo cadastro

    2º copiar e colar o cadastro em cada intervalo correspondente

    Ok? Espero ter conseguido explicar.


    quarta-feira, 23 de julho de 2014 00:03
  • Testei aqui. Esta parte está funcionando corretamente.

    Sub copiarDados()
    
        Dim lin, j As Integer
            
        lin = 1
        j = 3
        
        While Sheets("Ação").Range("R" & lin) <> ""
            
            Sheets("Ação").Range("D" & j) = Sheets("Ação").Range("R" & lin)
            Sheets("Ação").Range("F" & j) = Sheets("Ação").Range("S" & lin)
            Sheets("Ação").Range("H" & j) = Sheets("Ação").Range("T" & lin)
            
            j = j + 56
            
            lin = lin + 1
        
        Wend
    
    End Sub
    




    quarta-feira, 23 de julho de 2014 03:53
  • O código necessita de algumas alterações, pois referente aos:

    Intervalos

    O código copiou e colou parcialmente a quantidade de novos intervalos.

    Como o cadastro tem três linhas ( R1, R2 e R3), e o intervalo A1:L56 correspondente a linha 1 R1 já existe na planilha, então o código teria que ter copiado e colado mas dois intervalos.

    O código somente copiou uma vez o intervalo A1:L56 e colou na célula A57 formando o novo intervalo A57:L116 correspondente a linha 2 R2 do cadastro.

    Mas não foi adiante, ou seja, não continuou colando o intervalo seguinte correspondente a linha 3 R3 do cadastro.

    Formatação das células

    Ele copiou e colou todo conteúdo das células do intervalo A1:L56, mas porém sem copiar a formatação da células (fonte em negrito, bordas, células mescladas).

    Imagem

    Copiou e colou no intervalo A57:L116, três imagens .jpg uma cima da outra, que seriam as imagens a serem coladas nos intervalos que não foram criados.

    Mas o correto é terem sido coladas somente duas imagens, correspondentes aos dois intervalos a serem colados (criados), porque uma imagem já esta no intervalo A1:L56.

    Seria possível fazer essas alterações em seu código?


    quarta-feira, 23 de julho de 2014 19:14
  • Testei aqui. Esta parte está funcionando corretamente. Ainda sem formatação.

    Sub copiarDados2()
    
        Dim x As Object
        
        Dim lin As Integer
          
        lin = 1
        
        While Sheets("Ação").Range("R" & lin) <> ""
        
            For Each x In Worksheets("Ação").Range("A1:L56").Cells
            
            x.Activate
            
                If x.Value <> "" Then
                    
                    Sheets("Ação").Cells(x.Row + 56 * lin, x.Column) = x.Value
                
                End If
            
            
            Next x
        
        
                
            lin = lin + 1
        
        Wend
    
    End Sub

    quarta-feira, 23 de julho de 2014 21:28
  • Testei aqui. Está funcionando corretamente. Com formatação.

    Sub copiarDadosImagem2()
    
        Dim lin As Integer
          
        lin = 1
    
    Worksheets("Ação").Range("A1:L56").Select
    
        Application.CutCopyMode = False
        Selection.Copy
       
        While Sheets("Ação").Range("R" & lin) <> ""
        
             Sheets("Ação").Cells(lin + 56 * lin, 1).Select
        
        ActiveSheet.Paste
    
    
            lin = lin + 1
        
        Wend
        
    
    
    Sheets("Ação").Range("A1").Select
    
    ThisWorkbook.Save
    
    End Sub
    

    quarta-feira, 23 de julho de 2014 22:04
  • Tá quase lá anders0n!

    Seu ultimo código de copiar e colar o intervalo com a formatação funcionou.

    Mas ele colou 01 intervalo a mais, ou seja, colou 3 intervalos formatados.

    Teria que colar somente mais 2 intervalos, correspondentes as linha 2 R2 e a linha 3 R3 do cadastro, pois a intenção inicial era de que o intervalo de origem A1:L56, ficasse com os dados da linha 1 R1.

    Ao colar os dados do cadastro nos intervalos, resultou que no final sobrou um intervalo sem preenchimento.

    E ainda aproveitando sua atenção, seria possível o código inserir o numero 1 na célula L1 do primeiro intervalo, o numero 2 na célula L57 do segundo intervalo, o numero 3 na célula L116 do terceiro intervalo, e assim sucessivamente.

    Poderia fazer estas alterações ?

    quarta-feira, 23 de julho de 2014 22:56
  • Veja se o código está de acordo.

    Sub copiarDadosImagem3()
    
        Dim lin, i, j As Integer
          
        lin = 2
    
    Worksheets("Ação").Range("A1:L56").Select
    
        Application.CutCopyMode = False
        Selection.Copy
       
    j = 57
    
        While Sheets("Ação").Range("R" & lin) <> ""
        
             Sheets("Ação").Cells(j, 1).Select
        
            ActiveSheet.Paste
    
            j = j + 56
            lin = lin + 1
        
        Wend
        
    
    j = 1
    
        For i = 1 To lin -1
        
            Sheets("Ação").Range("L" & j) = i
            j = j + 56
            
        Next i
    
    Sheets("Ação").Range("A1").Select
    
    ThisWorkbook.Save
    
    End Sub


    quinta-feira, 24 de julho de 2014 00:04
  •  Ok, esta tudo funcionando com eu preciso.

    anders0nn, Muito Obrigado por sua atenção em criar os códigos.

    quinta-feira, 24 de julho de 2014 00:52
  • Que bom que deu certo, Oscar.

    Disponha.

    Um abraço.

    quinta-feira, 24 de julho de 2014 03:20
  • Está funcionando, muito obrigado!
    sexta-feira, 9 de junho de 2017 06:23