Notifications
Clear all

Macro simples de copiar e colar com loop finito

10 Posts
3 Usuários
0 Reactions
1,923 Visualizações
(@shelton10)
Posts: 9
Active Member
Topic starter
 

Bom dia pessoal, eu tenho uma macro simples de copiar e colar, ela está funcionando perfeitamente, porém, gostaria de colocar mais um detalhe.
Do jeito que está se as células selecionadas estiverem vazias a macro copia e cola mesmo assim, gostaria que emitisse uma mensagem para quando estivessem vazias, " Preenha as Células". E tbm colocar o loop finito, quando chegar na célula A12 emitir a mensagem " Já está completo". Se alguém puder ajudar agradeço.

A macro está assim:

 Sub copiar()
     
        Range("A1:A10").Select
        Selection.Copy ' Se as células estiverem vazias mostrar uma mensgasem " Preencha as Células"
        Sheets("Plan2").Select
        Range("A1").Select
        Do
            If ActiveCell <> "" Then
            ActiveCell.Offset(1, 0).Select
            End If
        Loop Until ActiveCell = ""
        ActiveCell.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Application.CutCopyMode = False
     
        ' Quando chegar na célula A12 para o loop e emitir uma mensagem " Já está completo"    
       
    End Sub
 
Postado : 28/10/2014 7:02 am
sandroh
(@sandroh)
Posts: 40
Eminent Member
 

Primeira parte:
IF 'Se
Range("A1:A10").Value = " " 'Valor das células selecionadas for igual a vázio
msgBox "Preencha as células!" 'Manda msg
End IF 'Fim se

Segunda parte:
IF 'Se
Range("A12").Value <> " " 'A12 for diferente de vázio
msgBox "Já está completo" 'Envia msg na tela
End if 'Fim se

Conseguiu entender certinho?
Abraço!

Caso tenha resolvido, não esqueça de clicar na mãozinha ao lado da ferramenta "citar" e fechar o tópico ;)

 
Postado : 28/10/2014 1:53 pm
(@shelton10)
Posts: 9
Active Member
Topic starter
 

Olá Sandroh, primeiro muito obrigado pela ajuda amigo.

Estou tentando colocar a primeira parte do código mas está dando um erro no If, mas beleza, eu tento até conseguir..rsrs

Só na segunda parte que não irá dar certo pois a célula A12 estará vazia, tem como dizer no código pare na A12 estando ela do jeito que tiver?

Grande abraço e muito obrigado mesmo!!!

 
Postado : 28/10/2014 5:19 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

shelton,

Desculpe, mas o teu código não faz muito sentido, e a tua explicação também está confusa.

Até agora, não entendi para que serve o loop (ele está sem finalidade).

Seria bom se vc explicasse o que vc quer fazer, e não o que vc quer adaptar.

Em todo caso, segue um código pra ti:

Sub copiar_GT()
Application.ScreenUpdating = False
If Application.WorksheetFunction.CountBlank(Range("A1:A10")) > 0 Then
    MsgBox "Preenha as Células"
Else
    Range("A1:A10").Copy
    With Sheets("Plan2")
        .Range("A1").PasteSpecial Paste:=xlPasteAll, _
                                  Operation:=xlNone, _
                                  SkipBlanks:=False, _
                                  Transpose:=False
    End With
    MsgBox "Já está completo"
    Application.CutCopyMode = False
End If
Application.ScreenUpdating = True
End Sub

Abs

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

Gilmar

 
Postado : 28/10/2014 5:37 pm
(@shelton10)
Posts: 9
Active Member
Topic starter
 

Olá Gtsalikis, esse código não é meu, eu não sei programar ainda. Mas tbm não gosto de nada sem esforço, então eu tento encontrar respostas por minha conta e adaptar ao que preciso, e dá nisso...rs. Eu chego lá.

O que esse código deve fazer é: Eu tenho um botão ao lado das células A1:J10 na Plan1. Quando eu clicar no botão ele deve selecionar, copiar e enviar os dados dessa sequência de células e colar na plan2 a partir da célula A1, uma por vez até a A12:J10, na horizontal. Só que irei fazer essa ação 12 vezes, preencho as células A1:J10(plan1) clico em enviar, volto, limpo os dados enviados, digito outros dados e clico em enviar de novo. Isso por 12 vezes, quando interar as 12 vezes, daí o código avisaria, "Já esta completo". E se em alguma dessas 12 vezes que irei enviar os dados das células A1:J10 estiverem vazios avisa "preencha as células".

Essa quantidade de vezes é um exemplo, depois eu irei adaptar para centenas de vezes essa ação, por isso ele é importante para mim. Peço desculpa por não ser claro e tbm se infringi alguma regra fórum.

Agradeço de coração pelo que já fizeram!

 
Postado : 28/10/2014 6:48 pm
(@shelton10)
Posts: 9
Active Member
Topic starter
 

Este código abaixo está perfeito, só não está fazendo o loop 10 vezes, ele copia e cola a primeira vez e já para emitindo a mensagem. É tudo erro meu que não sei explicar direito, mas estou aprendendo até mesmo explicar, e prometo que se precisar de alguma ajuda irei explicar da melhor forma possível.

Sub copiar_GT()
Application.ScreenUpdating = False
If Application.WorksheetFunction.CountBlank(Range("A1:A10")) > 0 Then
    MsgBox "Preenha as Células"
Else
    Range("A1:A10").Copy
    With Sheets("Plan2")
        .Range("A1").PasteSpecial Paste:=xlPasteAll, _
                                  Operation:=xlNone, _
                                  SkipBlanks:=False, _
                                  Transpose:=False
    End With
    MsgBox "Já está completo"
    Application.CutCopyMode = False
End If
Application.ScreenUpdating = True
End Sub

E este abaixo é como eu tentei explicar e não tinha consegui:

Sub copiar_GT()
Application.ScreenUpdating = False
If Application.WorksheetFunction.CountBlank(Range("A1:A10")) > 0 Then
MsgBox "Preenha as Células"
Else
Range("A1:A10").Copy ' Pega o conteúdo daqui(Plan1) e cola na Plan2, isso por 10 vezes.
With Sheets("Plan2")
.Range("A1").PasteSpecial Paste:=xlPasteAll, _ ' Cola nessa 1º...
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False

.Range("A2").PasteSpecial Paste:=xlPasteAll, _ Depois nessa....
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False

.Range("A3").PasteSpecial Paste:=xlPasteAll, _ Depois nessa, até a coluna A10
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False

||
||

' Quando colar na última que é a A10 então emiti a mensagem abaixo!

End With
MsgBox "Já está completo"
Application.CutCopyMode = False
End If
Application.ScreenUpdating = True
End Sub

 
Postado : 31/10/2014 8:27 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Ainda não estou certo se eu entendi, mas veja se está no caminho:

Sub copiar_GT()
Application.ScreenUpdating = False
Dim i As Long

i = Sheets("Plan2").Cells(1, Columns.Count).End(xlToLeft).Column
If Not IsEmpty(Sheets("Plan2").Cells(1, i)) Then i = i + 1
If i >= 11 Then
    MsgBox "Já está completo"
Else
    If Application.WorksheetFunction.CountBlank(Range("A1:A10")) > 0 Then
        MsgBox "Preenha as Células"
    Else
        Range("A1:A10").Copy
        With Sheets("Plan2")
            .Cells(1, i).PasteSpecial Paste:=xlPasteAll, _
                                      Operation:=xlNone, _
                                      SkipBlanks:=False, _
                                      Transpose:=False
        End With
        Application.CutCopyMode = False
    End If
End If
Application.ScreenUpdating = True
End Sub

ABs

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

Gilmar

 
Postado : 31/10/2014 10:51 am
(@shelton10)
Posts: 9
Active Member
Topic starter
 

Aqui está Gilmar, baixe está planilha e você entenderá o que eu quis dizer, mais uma vez eu não soube explicar...aff. Mas agora, se você clicar no botão "enviar" vai entender, tem uma macro lá que faz o que estou dizendo, ela apenas não para o loop e emiti as mensagens.
https://www.dropbox.com/s/63mq40o0gg1yo10/exemplo-copiar-colar.rar?dl=0

 
Postado : 31/10/2014 2:26 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

É, agora ficou fácil, rsrs

Eu tinha entendido, mas copiando por colunas, e não por linhas.

Usei o mesmo código que mandei acima, apenas inverti colunas e linhas.

Sub copiar_GT()
Application.ScreenUpdating = False
Dim i As Long

i = Sheets("Plan2").Cells(Rows.Count, 1).End(xlUp).Row
If Not IsEmpty(Sheets("Plan2").Cells(i, 1)) Then i = i + 1
If i >= 11 Then
    MsgBox "Já está completo"
Else
    If Application.WorksheetFunction.CountBlank(Range("A1:J1")) > 0 Then
        MsgBox "Preenha as Células"
    Else
        Range("A1:J1").Copy
        With Sheets("Plan2")
            .Cells(i, 1).PasteSpecial Paste:=xlPasteAll, _
                                      Operation:=xlNone, _
                                      SkipBlanks:=False, _
                                      Transpose:=False
        End With
        Application.CutCopyMode = False
    End If
End If
Application.ScreenUpdating = True
End Sub

Abs

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

Gilmar

 
Postado : 31/10/2014 3:43 pm
(@shelton10)
Posts: 9
Active Member
Topic starter
 

Eu apenas gostaria de dizer uma coisa a todos aqui do fórum e ao Gilmar, MUITO OBRIGADO!

Grande abraço meu amigo Gilmar, a gente se fala!

 
Postado : 31/10/2014 4:51 pm