JonathanR, boa tarde!
Aqui vai um "gambiarrex"...
Sub OcultaLinhas()
Dim ws As Worksheet, rgTotal As Range, rgNaoOculta As Range
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
Set rgTotal = ws.Range("B7", ws.Range("B104").End(xlUp))
With rgTotal
.EntireRow.Hidden = False
If Application.WorksheetFunction.CountIf(rgTotal, 0) > 0 Then
Set rgNaoOculta = .ColumnDifferences(.Find(What:="0", After:=rgTotal(.Cells.Count), _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext))
rgNaoOculta.EntireRow.Hidden = True
.SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
rgNaoOculta.EntireRow.Hidden = False
End If
End With
Next ws
Application.ScreenUpdating = True
End Sub
Funcionamento:
Em cada planilha da pasta, para o range de B7 até a célula mais próxima acima de B104 que possui dados, o código primeiro conta se nesse range contém pelo menos um zero, que são as linhas que você quer ocultar. Se tiver, busca onde está um deles para usar no método ColumnDifferences. Isto permite achar o intervalo oposto primeiro, ou seja, o que não deverá ser ocultado. Contrariando isso, este último é primeiramente ocultado para poder usar o método SpecialCells só com as células visíveis, as quais, estas sim, só possuem zeros. Elas são finalmente ocultadas e o range que não deveria ficar oculto é reexibido.
Como este procedimento não usa loops pelos ranges, talvez fique mais rápido.
Testa aí e dê retorno...
Postado : 27/06/2017 10:07 am