none
Como eu faço para copiar uma linha de uma planilha em outra com uma condição em uma coluna? RRS feed

  • Pergunta

  • Eu estou tentando fazer uma macro para que cada linha que contenha "x" em uma determinada coluna, seja copiada para uma outra aba/planilha. O problema é que eu quero que esta informação seja copiada na próxima linha em branco da outra planilha. Enfim, a minha macro está da seguinte forma até o momento (o erro de depuração está em negrito):

    Sub CriarDerivadaCEB()
        Const DerivadaCEB As String = "DerivadaCEB"
        Const CEB As String = "CEB"
        Const c_sCritério As String = "E"
        Const c_lDados As Long = 2
        
        Dim lDerivada As Long
        Dim lCEB As Long
        Dim wsDerivada As Worksheet
        Dim wsCEB As Worksheet
        
        With ThisWorkbook
            'Apaga Planilha de Resumo, se existir
            Application.DisplayAlerts = False
            On Error Resume Next
            .Sheets(DerivadaCEB).Delete
            On Error GoTo 0
            Application.DisplayAlerts = True
            
            'Atribui variável à Planilha:
            Set wsCEB = .Sheets(CEB)
            
            'Cria Planilha de Resumo
            Set wsDerivada = .Sheets.Add
                'Cria cabeçalhos
                With wsDerivadaCEB
                    .Name = c_sDerivadaCEB
                    wsCEB.Rows(1).Copy Destination:=.Rows(1)
                End With
        End With
            
        lDerivadaCEB = c_lDados
        For lCEB = c_lDados To RowLast(wsCEB.Columns(c_sCritério))
            If wsCEB.Cells(lCEB, c_sCritério) = "X" Then
                wsCEB.Rows(lCEB).Copy Destination:=wsDerivadaCEB.Cells(lCEB, "A")
                lDerivadaCEB = lDerivadaCEB + 1
            End If
        Next lCEB
    End Sub

    Function RowLast(rng As Range) As Long
        'Retorna o valor da última linha povoada do intervalo rng
        With rng
            On Error Resume Next
            RowLast = .Find(What:="*" _
              , After:=.Cells(1) _
              , SearchDirection:=xlPrevious _
              , SearchOrder:=xlByColumns _
              , LookIn:=xlFormulas).Row
            If RowLast = 0 Then RowLast = rng.Cells(1).Row
        End With
    End Function

    Alguém pode me sugerir um outro código que faça isso ou solucionar este problema? 

    Muito obrigada!!

    quarta-feira, 14 de maio de 2014 19:07

Todas as Respostas

  • Ao inserir um código no fórum, utilize blocos de código. Para utilizar essa ferramenta, clique no botão cuja legenda é “Inserir bloco de código” na barra do editor de mensagens do fórum. Uma janela aparecerá onde você deverá colar seu código cru na caixa de texto à esquerda. Então, selecione a opção Vb.Net na caixa de combinação que você verá em cima à esquerda e depois clique no botão Inserir.

    ---

    Quais são as condições para a cópia de linha a outra planilha aconteça?


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sábado, 17 de maio de 2014 20:19
    Moderador