Notifications
Clear all

Preenchimento automático vs Ocultar linhas não preenchidas

10 Posts
2 Usuários
0 Reactions
1,694 Visualizações
(@heleones)
Posts: 10
Active Member
Topic starter
 

Caros,
Utilizo a macro abaixo para transferir os dados de Plan1 para Plan3 atendendo certo requisito.

Sub GerarRelatorio1()

Plan3.Range("B13:N52").ClearContents
    lin = 13
    For i = 16 To 67
    If Plan1.Cells(i, 6) = 1 Then
    Plan3.Cells(lin, 2) = Plan1.Cells(i, 2)
    Plan3.Cells(lin, 3) = Plan1.Range("C4:C4")
    Plan3.Cells(lin, 4) = Plan1.Cells(i, 3)
    lin = lin + 1
    End If
    Next
    
Plan3.Range("B56:S60").ClearContents
    lin = 56
    For i = 103 To 107
    If Plan1.Cells(i, 6) = 1 Then
    Plan3.Cells(lin, 2) = Plan1.Cells(i, 2)
    lin = lin + 1
    End If
    Next
        
Plan3.Range("B65:Q92").ClearContents
    lin = 65
    For i = 73 To 100
    If Plan1.Cells(i, 6) = 1 Then
    Plan3.Cells(lin, 2) = Plan1.Cells(i, 2)
    Plan3.Cells(lin, 3) = Plan1.Range("C4:C4")
    Plan3.Cells(lin, 4) = Plan1.Cells(i, 3)
    Plan3.Cells(lin, 5) = Plan1.Cells(i, 7)
    Plan3.Cells(lin, 6) = Plan1.Cells(i, 8)
    Plan3.Cells(lin, 7) = Plan1.Cells(i, 9)
    Plan3.Cells(lin, 8) = Plan1.Cells(i, 10)
    Plan3.Cells(lin, 9) = Plan1.Cells(i, 11)
    Plan3.Cells(lin, 10) = Plan1.Cells(i, 12)
    Plan3.Cells(lin, 11) = Plan1.Cells(i, 13)
    Plan3.Cells(lin, 12) = Plan1.Cells(i, 14)
    Plan3.Cells(lin, 13) = Plan1.Cells(i, 15)
    Plan3.Cells(lin, 14) = Plan1.Cells(i, 16)
    Plan3.Cells(lin, 15) = Plan1.Cells(i, 17)
    Plan3.Cells(lin, 16) = Plan1.Cells(i, 18)
    Plan3.Cells(lin, 17) = Plan1.Cells(i, 19)
    lin = lin + 1
    End If
    Next

Call OcultarLinhas1
Call OcultarLinhas2
Call OcultarLinhas3


End Sub

Esta macro está funcionando a contento. Exceto a parte final em que faz o chamado de três outras macros chamadas: OcultarLinhas1, OcultarLinhas2, OcultarLinhas3 abaixo transcritas, que deveriam ocultar as linhas não preenchidas na Plan3, nos três intervalos 13:52, 56:60 e 65:92, respectivamente.

Ocorre que a do jeito que está, somente as linhas não preenchidas no intervalo 65:92 estão sendo ocultadas, se não preenchidas (OcultarLinhas3), a macro não está fazendo a chamada das outras duas macros que fazem a ocultação: OcultarLinhas1 e OcultarLinhas2.

Poderiam indicar uma solução para fazer com que a Sub GerarRelatorio1 chame ou execute as Subs OcultarLinhas1, OcultarLinhas2, OcultarLinhas3.

Att,

Heleones

Sub OcultarLinhas1()
  Dim i As Integer
  Application.ScreenUpdating = False
    With Sheets("Formulário")
      .Cells.EntireRow.Hidden = False
          For i = 13 To 52
            Select Case .Range("b" & i).Value
              Case 0
              .Rows(i & ":" & i).EntireRow.Hidden = True
            End Select
         Next i
    End With
    Application.ScreenUpdating = True
End Sub

Sub OcultarLinhas2()
  Dim i As Integer
  Application.ScreenUpdating = False
    With Sheets("Formulário")
      .Cells.EntireRow.Hidden = False
          For i = 56 To 60
            Select Case .Range("b" & i).Value
              Case 0
              .Rows(i & ":" & i).EntireRow.Hidden = True
            End Select
         Next i
    End With
    Application.ScreenUpdating = True
End Sub

Sub OcultarLinhas3()
  Dim i As Integer
  Application.ScreenUpdating = False
    With Sheets("Formulário")
      .Cells.EntireRow.Hidden = False
          For i = 65 To 92
            Select Case .Range("b" & i).Value
              Case 0
              .Rows(i & ":" & i).EntireRow.Hidden = True
            End Select
         Next i
    End With
    Application.ScreenUpdating = True
End Sub
 
Postado : 03/01/2018 8:41 am
(@klarc28)
Posts: 971
Prominent Member
 

Anexe a planilha

 
Postado : 03/01/2018 8:47 am
(@heleones)
Posts: 10
Active Member
Topic starter
 

Segue a planilha.
Na Plan1 há uma série de checkboxs que o usuário escolhe; no final há um botão para acionar a macro GerarRelatorio1 que transfere dados da Plan1 para a Plan3. Dentro desta macro há chamado para as outras três que ocultam as linhas não preenchidas na Plan3.
Ocorre que somente a macro OcultarLinhas3 está sendo ativada.
Aproveitando o ensejo, preciso que na rotina da Plan1, caso haja escolha de novas checkbox, ao clicar no botão, as linhas anteriormente ocultas na Plan3, sejam reexibidas, os dados sejam transferidos para Plan3 e na sequência, as linhas não preenchidas sejam ocultas, e assim sucessivamente, toda vez que novas checkbox forem selecionadas.

Grato

 
Postado : 03/01/2018 9:36 am
(@klarc28)
Posts: 971
Prominent Member
 

Foi feita uma correção no código

 
Postado : 03/01/2018 9:48 am
(@heleones)
Posts: 10
Active Member
Topic starter
 

Eu testei com Case "", e não funcionou. Com Case 0, ao menos a sub OcultarLinhas3 funciona.

 
Postado : 03/01/2018 10:28 am
(@heleones)
Posts: 10
Active Member
Topic starter
 

Na verdade, com 0 ou "", somente uma macro é acionada com a chamada Call.

 
Postado : 03/01/2018 10:51 am
(@heleones)
Posts: 10
Active Member
Topic starter
 

As macros para ocultar verificam se as linhas da coluna b na plan3 (Formulário) estão em branco ou valor zero dentro daqueles três intervalos e não na plan1.

 
Postado : 03/01/2018 11:08 am
(@klarc28)
Posts: 971
Prominent Member
 
Sub OcultarLinhas1()
  Dim i As Integer
  Application.ScreenUpdating = False
    With Sheets("Formulário")
      .Cells.EntireRow.Hidden = False
          For i = 13 To 52
            Select Case .Range("b" & i).Value
              Case 0
              .Rows(i & ":" & i).EntireRow.Hidden = True
            End Select
         Next i
    End With
    Application.ScreenUpdating = True
End Sub

Sub OcultarLinhas2()
  Dim i As Integer
  Application.ScreenUpdating = False
    With Sheets("Formulário")
     ' .Cells.EntireRow.Hidden = False
          For i = 56 To 60
            Select Case .Range("b" & i).Value
              Case ""
              .Rows(i & ":" & i).EntireRow.Hidden = True
            End Select
         Next i
    End With
    Application.ScreenUpdating = True
End Sub

Sub OcultarLinhas3()
  Dim i As Integer
  Application.ScreenUpdating = False
    With Sheets("Formulário")
     ' .Cells.EntireRow.Hidden = False
          For i = 65 To 92
            Select Case .Range("b" & i).Value
              Case 0
              .Rows(i & ":" & i).EntireRow.Hidden = True
            End Select
         Next i
    End With
    Application.ScreenUpdating = True
End Sub
 
Postado : 03/01/2018 11:11 am
(@klarc28)
Posts: 971
Prominent Member
 

Está executando as três macros, mas na linha

.Cells.EntireRow.Hidden = False

Desfaz o que as anteriores fizeram.

Favor marcar como resolvido.

Crie o hábito de executar o código passo a passo, apertando F8.

Ele é que vai te socorrer nas horas mais difíceis.

 
Postado : 03/01/2018 11:12 am
(@heleones)
Posts: 10
Active Member
Topic starter
 

Cara.
Show. Ficou muito bom. Muito obrigado.

Vou tentar melhorar o seguinte ponto: Se na plan1 se todas as checkbox não estiverem selecionadas, ao clicar no botão Gerar Formulário, não ocultar as linhas na Plan3.

"Vida longa e próspera."

 
Postado : 03/01/2018 11:42 am