Notifications
Clear all

Macro simples de copiar e colar com loop finito

10 Posts
3 Usuários
0 Reactions
1,906 Visualizações
(@shelton10)
Posts: 0
New 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)
Posts: 0
New 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!

 
Postado : 28/10/2014 1:53 pm
(@shelton10)
Posts: 0
New 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

 
Postado : 28/10/2014 5:37 pm
(@shelton10)
Posts: 0
New 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: 0
New 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

 
Postado : 31/10/2014 10:51 am
(@shelton10)
Posts: 0
New 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

 
Postado : 31/10/2014 3:43 pm
(@shelton10)
Posts: 0
New 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