Maybe:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B29:B47")) Is Nothing Then
    If Target.Offset(1).Value = 0 Then Target.EntireRow.Hidden = True
End If
End Sub