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).