Notifications
Clear all

Usando diferente de vazio em " Find(1, lookat:=xlWhole) "

16 Posts
2 Usuários
0 Reactions
2,997 Visualizações
(@alanisfcsm)
Posts: 0
Trusted Member
Topic starter
 

Bom dia!
código abaixo busca pelo número "1" em todas as linhas da coluna c, quando encontrada oculta a segunda linha abaixo del.
Gostaria de substituir "1" ( um ) por <>"" ( diferente de vazio ou se preenchido )
Quebrando a cabeça aqui...
Código escrito pelo amigo EDERSONARRUDA2 de outro forum.

S

ub OCULTAR()

Sheets("Plan1").Cells.EntireRow.Hidden = False
Y = 1

denovo:
Set w = Sheets("Plan1").Range("c" & Y & ":a65000").Find(1, lookat:=xlWhole)
If w Is Nothing Then
Exit Sub
Else
Y = w.Row + 2

If Sheets("Plan1").Range("c" & Y).Value <> 1 Then
Sheets("Plan1").Rows(Y & ":" & Y).EntireRow.Hidden = True
End If
GoTo denovo:
End If

End Sub
 
Postado : 12/04/2016 9:09 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde alanisfcsm,

Seja bem vindo ao fórum.

Vê se ajuda:

Sub OCULTAR2()
Dim wsPlan1 As Worksheet
Dim Busca   As String
Dim UltL    As Long
Dim i       As Long

    Set wsPlan1 = ThisWorkbook.Worksheets("Plan1")
    UltL = wsPlan1.Cells(Rows.Count, 3).End(xlUp).Row
    
    wsPlan1.Cells.EntireRow.Hidden = False
    Busca = InputBox("Digite o valor procurado." & vbNewLine & "Digite '*' para diferente de vazio.", "Busca")
    
    For i = 2 To UltL
        If Busca = "*" Then
            If Not wsPlan1.Cells(i, 3).Value = Empty Then
                wsPlan1.Rows(i + 2 & ":" & i + 2).EntireRow.Hidden = True
            End If
        Else
            If wsPlan1.Cells(i, 3).Value = Busca Then
                wsPlan1.Rows(i + 2 & ":" & i + 2).EntireRow.Hidden = True
            End If
        End If
    Next i
    
    Set wsPlan1 = Nothing

End Sub

Qualquer coisa da o grito.
Abraço

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 12/04/2016 9:47 am
(@alanisfcsm)
Posts: 0
Trusted Member
Topic starter
 

Boa Tarde Bernardo.
Testei o código aqui muito bom é quase isso.
Mas o usuário não precisará fazer a busca. A busca e só para ocultar e reexibir automaticamente a segunda linha abaixo onde a célula na coluna c estiver preenchida (marcada de verde) na planilha de exemplo.
Eu queria que funcionasse sempre que as células verdes fossem diferente de vazio.

 
Postado : 12/04/2016 9:57 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde alanisfcsm,

E o código faz isso, porém deixa a disposição do usuário caso queira um valor específico ou diferente de vazio. Caso queira que faça direto apenas os diferentes de vazio, usa assim:

Sub OCULTAR2()
Dim wsPlan1 As Worksheet
Dim UltL    As Long
Dim i       As Long

    Set wsPlan1 = ThisWorkbook.Worksheets("Plan1")
    UltL = wsPlan1.Cells(Rows.Count, 3).End(xlUp).Row
    
    wsPlan1.Cells.EntireRow.Hidden = False
    
    For i = 2 To UltL
        If Not wsPlan1.Cells(i, 3).Value = Empty Then
            wsPlan1.Rows(i + 2 & ":" & i + 2).EntireRow.Hidden = True
        End If
    Next i
    
    Set wsPlan1 = Nothing

End Sub

Qualquer coisa da o grito.
Abraço

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 12/04/2016 10:23 am
(@alanisfcsm)
Posts: 0
Trusted Member
Topic starter
 

E isso!
Muito obrigado meu amigo! :D
Vou te perturbar mais algumas vezes.

 
Postado : 12/04/2016 10:47 am
(@alanisfcsm)
Posts: 0
Trusted Member
Topic starter
 

Bom dia novamente :D

Estou "tentando" fazer uma planilha para os vendedores aqui na empresa, e essa planilha tem muitas informações, para deixar a tela menos "poluída" algumas linhas estarão sempre ocultas alterando para exibidas conforme a "condição". O seu código funciona muito bem, mas eu tive que mudar algumas coisas aqui e as linhas em vermelho na planilha em anexo estarão sempre ocultas mudando para exibidas se a segunda célula acima da linha vermelha na coluna "c" for diferente de vazio. ( só quero inverter... as linhas em vermelhos que estarão sempre ocultas para exibidas ) Tentei modificar seu código mas não obtive sucesso. :oops:

 
Postado : 13/04/2016 7:49 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia alanisfcsm,

Juro que não entendi.
Você quer que ele verifique a cor da célula?

Bem direto.... O que é para "localizar" e o que é para fazer?

Qualquer coisa da o grito.
Abraço

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 13/04/2016 8:03 am
(@alanisfcsm)
Posts: 0
Trusted Member
Topic starter
 

No seu código: se a célula verde estiver "vazia" oculta a segunda linha abaixo "linha em vermelho", se preenchido exibe a linha em vermelho.
Desculpe se não me expresso bem.

 
Postado : 13/04/2016 8:09 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Cara, muita informação me confunde. Sou mais direto.
Mas acho que entendi. Tenta assim:

Option Explicit

Sub OCULTAR_REEXIBIR_2()
Dim wsPlan1 As Worksheet
Dim i       As Long

    Application.ScreenUpdating = False
    Set wsPlan1 = ThisWorkbook.Worksheets("Plan1")
    i = 10
    
    wsPlan1.Cells.EntireRow.Hidden = False
    
    Do While Trim(wsPlan1.Cells(i, 3).Interior.Color) <> 16777215
        If Trim(wsPlan1.Cells(i, 3).Interior.Color) = 11722949 And wsPlan1.Cells(i, 3).Value = Empty Then
            wsPlan1.Rows(i + 2 & ":" & i + 2).EntireRow.Hidden = True
        Else
            If Trim(wsPlan1.Cells(i, 3).Interior.Color) = 11722949 And wsPlan1.Cells(i, 3).Value <> Empty Then
                wsPlan1.Rows(i + 2 & ":" & i + 2).EntireRow.Hidden = False
            End If
        End If
        i = i + 1
    Loop
    
    Set wsPlan1 = Nothing
    Application.ScreenUpdating = True

End Sub

Qualquer coisa da o grito.
Abraço

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 13/04/2016 8:49 am
(@alanisfcsm)
Posts: 0
Trusted Member
Topic starter
 

Cara! Obrigado pela paciência. Estou nessa de curioso tentando fazer algo que nunca fiz.
Vamos lá. Não funcionou
A cores nas células são somente para você entender as posições, não precisa usa-las no código.
É possível fazer algo do tipo:
usando "else".


Sub OCULTAR_REEXIBIR_2()
Dim wsPlan1 As Worksheet
Dim UltL    As Long
Dim i       As Long

    Set wsPlan1 = ThisWorkbook.Worksheets("Plan1")
    UltL = wsPlan1.Cells(Rows.Count, 3).End(xlUp).Row
    
    wsPlan1.Cells.EntireRow.Hidden = False
    
    For i = 2 To UltL
        If Not wsPlan1.Cells(i, 3).Value = Empty Then
            wsPlan1.Rows(i + 2 & ":" & i + 2).EntireRow.Hidden = False     ' exibe se a célula verde estiver preenchida
        End If
       
       
        Else

            If wsPlan1.Cells(i, 3).Value = Empty Then
            wsPlan1.Rows(i + 2 & ":" & i + 2).EntireRow.Hidden = True      ' oculta se a célula verde estiver vazia
        End If
        
        End If
        
    Next i
    
    Set wsPlan1 = Nothing

End Sub

Claro que não funcionou.... rsss

 
Postado : 13/04/2016 9:20 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Cara, seguinte....
Você coloriu as células de verde, amarelo, vermelho e laranja para que eu visualizasse.
Me deu exemplos dentro desse "desenho" que eu visualizei. Entretanto, você acaba de me dizer que isso é só para eu identificar, que a planilha não é colorida dessa forma
Contudo, o código também deve visualizar isso. Eu devo informar o que é que ele tem que enxergar e como.
Posso definir a linha inicial e informar para ele ir pulando de três em três células, mas se por alguma razão alterar qualquer coisa na planilha, o código deve ser modificado para que ele passe a enxergar dessa nova maneira ou dependendo, fazer gambiarras...

Nessa "coluna" não há títulos? Alguns valores fixos, nada? somente informação abaixo de informação?

Qualquer coisa da o grito.
Abraço

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 13/04/2016 9:40 am
(@alanisfcsm)
Posts: 0
Trusted Member
Topic starter
 

É só para inverter onde ele oculta, quero que exiba e vice e versa.
Tentei fazer, mas ele bagunça as posições. Não funciona perfeitamente como seu código original. :oops:


Sub OCULTAR_REEXIBIR_2()
Dim wsPlan1 As Worksheet
Dim UltL    As Long
Dim i       As Long

    Set wsPlan1 = ThisWorkbook.Worksheets("Plan1")
    UltL = wsPlan1.Cells(Rows.Count, 3).End(xlUp).Row
    
    wsPlan1.Cells.EntireRow.Hidden = False
    
    For i = 2 To UltL
        If Not wsPlan1.Cells(i, 3).Value = Empty Then
            wsPlan1.Rows(i + 2 & ":" & i + 2).EntireRow.Hidden = False     ' exibe se a célula verde estiver preenchida
        End If
       
       
        Else

            If wsPlan1.Cells(i, 3).Value = Empty Then
            wsPlan1.Rows(i + 2 & ":" & i + 2).EntireRow.Hidden = True      ' oculta se a célula verde estiver vazia
        End If
        
        End If
        
    Next i
    
    Set wsPlan1 = Nothing

End Sub

 
Postado : 13/04/2016 9:56 am
(@alanisfcsm)
Posts: 0
Trusted Member
Topic starter
 

Anexei a planilha modificada para você ter uma ideia. A linha oculta e uma linha de desconto e outras informações.
Somente será exibida se houver produtos digitados na célula verde
Me desculpe toda confusão :oops:

 
Postado : 13/04/2016 10:03 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Cara, não vai funcionar assim.
Não basta identificar se a célula está preenchida ou não nesse caso, porque a cada linha corresponde a um tipo de informação no conjunto de 3 linhas cada. Ou seja, a cada 3 linhas inicia-se um novo grupo de informações, se ele ir localizando linha a linha apenas se estiver preenchida ou não, vai bagunçar tudo.
Posso fazer ir pulando de três em três linhas e deixar bem preso o código, mas eu não recomendo.

Tenta assim:

Sub OCULTAR2()
Dim wsPlan1 As Worksheet
Dim i       As Long

    Set wsPlan1 = ThisWorkbook.Worksheets("Plan1")
    i = 10
    
    wsPlan1.Cells.EntireRow.Hidden = False
    
    Do While i < 100
        If Not wsPlan1.Cells(i, 3).Value = Empty Then
            wsPlan1.Rows(i + 2 & ":" & i + 2).EntireRow.Hidden = False
        Else
            wsPlan1.Rows(i + 2 & ":" & i + 2).EntireRow.Hidden = True
        End If
        i = i + 3
    Loop
    
    Set wsPlan1 = Nothing

End Sub

Qualquer coisa da o grito.
Abraço

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 13/04/2016 10:14 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

A última planilha que você anexou está funcionando normalmente. Somente é exibido a linha vermelha se a célula verde estiver preenchida.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 13/04/2016 10:17 am
Página 1 / 2