Notifications
Clear all

Copiar da folha1 para a folha 2 - Macro

9 Posts
2 Usuários
0 Reactions
1,477 Visualizações
(@geovanna)
Posts: 5
Active Member
Topic starter
 

Oi, sou nova aqui, gostaria da ajuda para copiar e colar da folha1 para a folha2 usando uma macro. O criterio sao as datas. nesse modelo em anexo ela filtra os dados na folha1, queria que fosse copiado e colado na folha2

 
Postado : 04/03/2014 5:24 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Supondo que quer colocar na Plan2 - Colunas A, B e C a partir da linha 2, troque a sua rotina por esta:

Primeiro adicione a Plan2

Sub relatorioII()
    Plan2.Range("A2:C100").ClearContents
    
    DataIni = InputBox("Digite a data Inicial")
        If DataIni = "" Then
            MsgBox "Data Invalida ou operação cancelada"
            Exit Sub
        End If
    
    dataFim = InputBox("Digite a data Final")
        If dataFim = "" Then
            MsgBox "Data Invalida ou operação cancelada"
            Exit Sub
        End If
    
    
    lin = 2
    linha = 2
    
    Do Until Plan1.Cells(lin, 1) = ""
        If Plan1.Cells(lin, 2) >= CDate(DataIni) And Plan1.Cells(lin, 2) <= CDate(dataFim) Then
            Plan2.Cells(linha, 1) = Plan1.Cells(lin, 1)
            Plan2.Cells(linha, 2) = CDate(Plan1.Cells(lin, 2))
            Plan2.Cells(linha, 3) = Plan1.Cells(lin, 3)
            linha = linha + 1
        End If
        lin = lin + 1
    Loop
    MsgBox "Processo concluído com sucesso - de: " & DataIni & " até: " & dataFim
End Sub

Editei pelo motivo de ter ajustado se as Datas estiverem em Branco ou clicar em Cancelar.

[]s

 
Postado : 04/03/2014 5:36 pm
(@geovanna)
Posts: 5
Active Member
Topic starter
 

Sr. Mauro,

eu colei seu codigo na planilha e executei ela, mas deu erro:

Erro em tempo de execução 424
O objeto é obrigatorio

o que quer dizer isso.

 
Postado : 04/03/2014 6:01 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Você criou a Plan2 ? No seu modelo só tem Plan1.

 
Postado : 04/03/2014 6:04 pm
(@geovanna)
Posts: 5
Active Member
Topic starter
 

Sim, Sr. Mauro. A folha2 existe

 
Postado : 04/03/2014 6:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

eheheheh, brigado pelo Sr, rsrsrsr

Geovanna a questão é que estamos lidando com WorkSheets, Sheets(Aba) que são Objetos, então quando você adicionou uma nova Aba, se reparar no editor do VBA na Janela Propriedade neste seu modelo está assim :
Plan3(Plan2), neste caso, para referenciarmos corretamente, o objeto é Plan3.

Só para você entender um pouco, da forma que está acima teriamos duas formas para ajustar na rotina :
1ª opção ) Trocando todas as Referências direta "Plan2" por "Plan3"; ou;

2ª opção) Substituir "Plan2" por Worksheets("Plan2")
Exemplificando, a primeira instrução ficaria :
Worksheets("Plan2").Range("A2:C100").ClearContents, e as demais;
Worksheets("Plan2").Cells(linha, 1) = Plan1.Cells(lin, 1)

Só que eu não entendi porque você alterou as outras linhas, então substitua sua rotina pela a abaixo, sem alterar nada na mesma.

Sub relatorioIII()
    Worksheets("Plan2").Range("A2:C100").ClearContents
    
    DataIni = InputBox("Digite a data Inicial")
        If DataIni = "" Then
            MsgBox "Data Invalida ou operação cancelada"
            Exit Sub
        End If
    
    dataFim = InputBox("Digite a data Final")
        If dataFim = "" Then
            MsgBox "Data Invalida ou operação cancelada"
            Exit Sub
        End If
    
    
    lin = 2
    linha = 2
    
    Do Until Plan1.Cells(lin, 1) = ""
        If Plan1.Cells(lin, 2) >= CDate(DataIni) And Plan1.Cells(lin, 2) <= CDate(dataFim) Then
            Worksheets("Plan2").Cells(linha, 1) = Plan1.Cells(lin, 1)
            Worksheets("Plan2").Cells(linha, 2) = CDate(Plan1.Cells(lin, 2))
            Worksheets("Plan2").Cells(linha, 3) = Plan1.Cells(lin, 3)
            linha = linha + 1
        End If
        lin = lin + 1
    Loop
    MsgBox "Processo concluído com sucesso - de: " & DataIni & " até: " & dataFim
End Sub
 
Postado : 04/03/2014 6:32 pm
(@geovanna)
Posts: 5
Active Member
Topic starter
 

Sr. Mauro, poderia me exlicar as linhas abaixo, o que cada uma executa.

Lin = 2
linha = 2

Do Until Plan12.Cells(Lin, 2) = ""
If Plan12.Cells(Lin, 2) >= CDate(DataIni) And Plan12.Cells(Lin, 2) <= CDate(dataFim) Then
Worksheets("Plan9").Cells(linha, 2) = Plan12.Cells(Lin, 2)
Worksheets("Plan9").Cells(linha, 3) = CDate(Plan12.Cells(Lin, 3))
Worksheets("Plan9").Cells(linha, 4) = Plan12.Cells(Lin, 4)
linha = linha + 1

 
Postado : 04/03/2014 6:58 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Sr. Mauro, poderia me exlicar as linhas abaixo, o que cada uma executa.

Lin = 2
linha = 2

Do Until Plan12.Cells(Lin, 2) = ""
If Plan12.Cells(Lin, 2) >= CDate(DataIni) And Plan12.Cells(Lin, 2) <= CDate(dataFim) Then
Worksheets("Plan9").Cells(linha, 2) = Plan12.Cells(Lin, 2)
Worksheets("Plan9").Cells(linha, 3) = CDate(Plan12.Cells(Lin, 3))
Worksheets("Plan9").Cells(linha, 4) = Plan12.Cells(Lin, 4)
linha = linha + 1

Primeiramente, vejo que alterou os nomes das abas, espero que esteja funcionando corretamente.
Lin = 2 - Primeira Variável definida com o Valor 2, nesta rotina seria Linha 2
linha = 2 - Mesmo caso da anterior, só que é a Segunda Variável definida com o Valor 2, ou seja Linha 2 tambem

Do Until Plan12.Cells(Lin, 2) = ""
Enquanto na Plan12 as Celulas(Linha(lin), coluna(2) for diferente de Vazia a rotina continua, se tiver uma celula vazia sai da rotina, por isto todas as celulas na Coluna B tem de estar preenchidas, na primeira execução, lembre-se que a Variavel Lin é = a 2

If Plan12.Cells(Lin, 2) >= CDate(DataIni) And Plan12.Cells(Lin, 2) <= CDate(dataFim) Then
Se a Data na Plan12.Cells(Lin, 2) for Maior ou Igual que a Data Inicial e Menor ou Igual a Data Final
Worksheets("Plan9").Cells(linha, 2) = Plan12.Cells(Lin, 2) - Copia para a Plan9 conforme a Variavel Linha, o valor referente a Plan12.Cells(Lin, 2)
O restante é a mesma coisa, só mudando as Colunas
Worksheets("Plan9").Cells(linha, 3) = CDate(Plan12.Cells(Lin, 3))
Worksheets("Plan9").Cells(linha, 4) = Plan12.Cells(Lin, 4)
linha = linha + 1 - 'Aqui incrementamos a linha somando + 1, ou seja iniciamos na linha 2 e enquanto a condição Do Until for Verdadeira passamos para a proxima Linha.

Espero ter conseguido explicar direito.

[]s

 
Postado : 04/03/2014 7:17 pm
(@geovanna)
Posts: 5
Active Member
Topic starter
 

Sr. Mauro, muito obrigado. Eu consegui entender e funcionou perfeitinho.

 
Postado : 04/03/2014 9:06 pm