Notifications
Clear all

Apagar conteúdo de linhas quando apagar uma célula

4 Posts
2 Usuários
0 Reactions
1,602 Visualizações
(@cristy0505)
Posts: 28
Eminent Member
Topic starter
 

Bom dia, chego aqui com outra questão (na esperança de que possam me ajudar na de ontem também).

Se tenho uma planilha com 6 colunas (vamos supor que sejam coluna A, B, C, D, E e F) e linhas de 1 a 10, como eu faço para que caso eu apague o conteúdo de qualquer célula em uma determinada linha, apague-se juntamente o conteúdo de toda a linha sem ser manualmente?

Grata.

 
Postado : 18/07/2013 7:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia,

Sugiro incluir o seguinte código no evento Change da sua planilha:

Private Sub Worksheet_Change(ByVal Target As Range)

    'Se a célula apagada está no intervalo A1:F10
    If Not Intersect(Target, [A1:F10]) Is Nothing And Target.Text = "" Then
    
        'Apaga a linha correspondente
        Range(Cells(Target.Row, 1), Cells(Target.Row, 6)).ClearContents
    End If
End Sub

Abraço

 
Postado : 18/07/2013 8:47 am
(@cristy0505)
Posts: 28
Eminent Member
Topic starter
 

Bom dia,

Sugiro incluir o seguinte código no evento Change da sua planilha:

Private Sub Worksheet_Change(ByVal Target As Range)

    'Se a célula apagada está no intervalo A1:F10
    If Not Intersect(Target, [A1:F10]) Is Nothing And Target.Text = "" Then
    
        'Apaga a linha correspondente
        Range(Cells(Target.Row, 1), Cells(Target.Row, 6)).ClearContents
    End If
End Sub

Abraço

Boa tarde, muito obrigada pela ajuda.

Consegui ajuda em um fórum americano que deu certo, porém está demorando muito e parece-me que as colunas com formatação condicional ficaram bugadas após limpar o conteúdo delas (principalmente as que continham datas), o que me passaram foi este:

Sub Botão1_Clique()

Dim vazia As Range, número_da_linha As Integer

Application.ScreenUpdating = False

número_da_linha = 4

    For Each vazia In Range("B4:B3000")
        If vazia.FormulaR1C1 = "" Then Range(Range("B" & número_da_linha) _
            , Range("B" & número_da_linha).Offset(, 9)).ClearContents
        número_da_linha = número_da_linha + 1
    Next vazia

número_da_linha = 4

    For Each vazia In Range("D4:D3000")
        If vazia.FormulaR1C1 = "" Then Range(Range("D" & número_da_linha).Offset(, -2) _
            , Range("D" & número_da_linha).Offset(, 7)).ClearContents
        número_da_linha = número_da_linha + 1
    Next vazia

número_da_linha = 4

    For Each vazia In Range("E4:E3000")
        If vazia.FormulaR1C1 = "" Then Range(Range("E" & número_da_linha).Offset(, -3) _
            , Range("E" & número_da_linha).Offset(, 6)).ClearContents
        número_da_linha = número_da_linha + 1
    Next vazia

número_da_linha = 4

    For Each vazia In Range("F4:F3000")
        If vazia.FormulaR1C1 = "" Then Range(Range("F" & número_da_linha).Offset(, -4) _
            , Range("F" & número_da_linha).Offset(, 5)).ClearContents
        número_da_linha = número_da_linha + 1
    Next vazia

número_da_linha = 4

    For Each vazia In Range("G4:G3000")
        If vazia.FormulaR1C1 = "" Then Range(Range("G" & número_da_linha).Offset(, -5) _
            , Range("G" & número_da_linha).Offset(, 4)).ClearContents
        número_da_linha = número_da_linha + 1
    Next vazia

número_da_linha = 4

    For Each vazia In Range("H4:H3000")
        If vazia.FormulaR1C1 = "" Then Range(Range("H" & número_da_linha).Offset(, -6) _
            , Range("H" & número_da_linha).Offset(, 3)).ClearContents
        número_da_linha = número_da_linha + 1
    Next vazia

número_da_linha = 4

    For Each vazia In Range("I4:I3000")
        If vazia.FormulaR1C1 = "" Then Range(Range("I" & número_da_linha).Offset(, -7) _
            , Range("I" & número_da_linha).Offset(, 2)).ClearContents
        número_da_linha = número_da_linha + 1
    Next vazia

número_da_linha = 4

    For Each vazia In Range("J4:J3000")
        If vazia.FormulaR1C1 = "" Then Range(Range("J" & número_da_linha).Offset(, -8) _
            , Range("J" & número_da_linha).Offset(, 1)).ClearContents
        número_da_linha = número_da_linha + 1
    Next vazia

número_da_linha = 4

    For Each vazia In Range("K4:K3000")
        If vazia.FormulaR1C1 = "" Then Range(Range("K" & número_da_linha).Offset(, -9) _
            , Range("K" & número_da_linha)).ClearContents
        número_da_linha = número_da_linha + 1
    Next vazia

Range("C4").FormulaR1C1 = "=IF(RC[-1]=1, ""Cablena VW"", IF(RC[-1]=2, ""Cablena YH"", IF(RC[-1]=3, ""Capri"", IF(RC[-1]=4, ""Sakaguchi Industrial"", IF(RC[-1]=5, ""Metalurgica Sakaguchi"", IF(RC[-1]=6, ""Winflex"", IF(RC[-1]=7, ""Littelfuse"",IF(RC[-1]=8, ""Loopmol"", IF(RC[-1]=9, ""ITW"", IF(RC[-1]=10, ""Newtoy"", IF(RC[-1]=11, ""Kluber"")))))))))))"
Range("C4").Select
Selection.AutoFill Destination:=Range("C4:C" & número_da_linha), Type:=xlFillDefault

Application.ScreenUpdating = True

End Sub

Estou enviando também a planilha-modelo para que vocês possam entender do que se trata.

Na coluna C existe uma fórmula que não deveria ser apagada...

Link do arquivo para referência: http://temp-share.com/show/2gFH3QJE8

saudações.

 
Postado : 18/07/2013 12:49 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Cristina, a demora na execução de macros dependem muito da quantidade de dados na mesma, alem de que temos formulas e condiçoes, ou seja cada vez que apagar um dado em uma determinada celula o excel irá recalcular, e como são muitas linhas, pode levar um tempo.
Uma possivel solução para esta questão seria desabilitar o calculo automático antes de executar a rotina e depois habilitar novamente, mas para ter certeza que ganhamos em performance, só fazendo testes na planilha original.

Quanto a outra questão, preenchi com alguns dados e executei a rotina e não foi apagada as formulas nem a formatação condicional, esta eu não encontrei nenhum problema.

[]s

 
Postado : 18/07/2013 4:42 pm