Ocultação automática de áreas no Excel

0

Com base nas respostas anteriores a esta pergunta, escrevi este código que não funciona:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("'Paramètres clés du projet'!$H$25").Value = "1" Then
        Columns("'Feuille de calcul'!L:AD").EntireColumn.Hidden = True
    ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "2" Then
        Columns("'Feuille de calcul'!M:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "3" Then
        Columns("'Feuille de calcul'!N:AD").EntireColumn.Hidden = True
    ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "4" Then
        Columns("'Feuille de calcul'!O:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "5" Then
        Columns("'Feuille de calcul'!P:AD").EntireColumn.Hidden = True
        ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "6" Then
        Columns("'Feuille de calcul'!Q:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "7" Then
        Columns("'Feuille de calcul'!R:AD").EntireColumn.Hidden = True
    ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "8" Then
        Columns("'Feuille de calcul'!S:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "9" Then
        Columns("'Feuille de calcul'!T:AD").EntireColumn.Hidden = True
    ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "10" Then
        Columns("'Feuille de calcul'!U:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "11" Then
        Columns("'Feuille de calcul'!V:AD").EntireColumn.Hidden = True
    ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "12" Then
        Columns("'Feuille de calcul'!W:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "13" Then
        Columns("'Feuille de calcul'!X:AD").EntireColumn.Hidden = True
        ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "14" Then
        Columns("'Feuille de calcul'!Y:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "15" Then
        Columns("'Feuille de calcul'!Z:AD").EntireColumn.Hidden = True
    ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "16" Then
        Columns("'Feuille de calcul'!AA:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "17" Then
        Columns("'Feuille de calcul'!AB:AD").EntireColumn.Hidden = True
    ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "18" Then
        Columns("'Feuille de calcul'!AC:AD").EntireColumn.Hidden = True
 ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "19" Then
        Columns("'Feuille de calcul'!AD:AD").EntireColumn.Hidden = True
  ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "20" Then
        Columns("'Feuille de calcul'!AD:AD").EntireColumn.Hidden = False

    End If
End Sub

- > O que eu quero deste código é para ocultar automaticamente uma área de uma folha com base no valor de uma célula (menu drop-down de 0 a 20) em outra folha.

Alguém poderia me explicar por que meu código não funciona?

Obrigado

    
por Hippolyte 16.11.2016 / 14:23

1 resposta

1

Colocar a planilha de destino dentro de Columns() como se não fosse válida.
Tente usar      Worksheets("Feuille de calcul").Columns("L:AD").EntireColumn.Hidden = True em vez disso.

Você também pode tentar algo mais curto e dinâmico. Em vez de definir todos os valores da lista, você pode fazer algo como:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim cMin As Integer, cMax As Integer, cSave As Integer, i As Integer, ws As String
ws = "Feuille de calcul"                'Sheet to hide on.
cMin = 12                               'First column to hide on "1".   12 = "L"
cMax = 30                               'Last column to hide.           30 = "AD"

If Target.Address = "$H$25" Then        'Only updates the Hidden columns in 'ws´ when the list is changed
    If Target.Value >= 1 And Target.Value <= 20 Then  'Only updates if list is between 1 and 20
        cSave = cMin
        Do                              'Loops through and unhides all columns between cMin and cMax
            Worksheets(ws).Columns(cMin).EntireColumn.Hidden = False
            cMin = cMin + 1
        Loop While cMin <= cMax
        cMin = cSave
        i = Target.Value
        cMin = cMin + i - 1
        If cMin > cMax Then             'If "20" is chosen from the default list, we have gone past cMax
            cMin = cMax                 'So we set it to the last column
        End If
        Do                              'Loops through and hides all columns between cMin and cMax
            Worksheets(ws).Columns(cMin).EntireColumn.Hidden = True
            cMin = cMin + 1
        Loop While cMin <= cMax
    End If
End If
End Sub

Como você pode ver, não incluí uma referência à folha na qual a lista está.
Isso porque esse código deve entrar no código dessa planilha específica .
Agora você pode alterar a coluna inicial e final sem ter que reescrever a coisa toda.
Editado para primeiro mostrar todas as colunas especificadas no intervalo de colunas (cMin para cMax).

    
por 16.11.2016 / 21:56