Boa tarde,
Depois de olhar o arquivo com as fórmulas na validação cheguei a uma solução alternativa.
A rotina pesquisa o "Código" da coluna "A", "H" ou "O" da planilha que dispara o evento (Ex. "2014") no intervalo "cód" na planilha "BD". Então, retorna os valores (Grupo, Categoria, Subcategoria, Destinação) correspondentes nas colunas "dependentes": "C:F", "J:M" ou "Q:T". Com isso, não há necessidade de colocar os meses um abaixo do outro.
Para funcionar, a macro deve ser associado ao evento de planilha "Conteúdo alterado".
- Botão direito do mouse sobre a Aba da planilha >>> "Eventos de planilha..." >>> evento "Conteúdo alterado" >>> botão "Macro".
Código:
REM >>> Evento de Planilha => Conteúdo Alterado <<<
Sub Conteudo_alterado( oCel )
Dim oCodigo As Object, oBD As Object, oPlan As Object
Dim nL As Long, nC As Long, nInicio As Long, nFim As Long, I As Long
Dim sColuna As String, sCod as String
' Sair se o Evento não for sobre uma célula individual
If oCel.ImplementationName <> "ScCellObj" Then Exit Sub
' Sair se não for a coluna A, H ou O
sColuna = oCel.Columns.ElementNames(0)
If sColuna <> "A" And sColuna <> "H" And sColuna <> "O" Then Exit Sub
' Sair se a célula estiver vazia
If oCel.String = "" Then Exit Sub
' Intervalo "cód" e sua planilha
oCodigo = ThisComponent.NamedRanges.getByName( "cód" ).ReferredCells
oBD = oCodigo.getSpreadSheet
' Planila do evento
oPlan = oCel.getSpreadSheet
' A linha e a coluna inicial que receberão os valores
nL = oCel.CellAddress.Row
nC = oCel.CellAddress.Column + 2
'Loop pelo intervalo "cód"
nInicio = oCodigo.RangeAddress.StartRow
nFim = oCodigo.RangeAddress.EndRow
For I = nInicio to nFim
sCod = oBD.getCellByPosition( 0,I ).String 'código
If sCod = oCel.String Then 'Preencher as colunas se encontrar o código
oPlan.getCellByPosition( nC,nL ).String = oBD.getCellByPosition( 1,I ).String 'Grupo
oPlan.getCellByPosition( nC+1,nL ).String = oBD.getCellByPosition( 3,I ).String 'Categoria
oPlan.getCellByPosition( nC+2,nL ).String = oBD.getCellByPosition( 5,I ).String 'Subcategoria
oPlan.getCellByPosition( nC+3,nL ).String = oBD.getCellByPosition( 7,I ).String 'Destinação
End If
Next
End Sub
Arquivo com o Código acima:
Atte,
Grafeno
Estas listas de Validação são fixas ? Poderia postar um arquivo modelo ?
Utilizei a validação do tipo INTERVALO DE CÉLULAS com uma fórmula condicional para me retornar o resultado mediante a seleção das demais células, ou seja tanto a coluna A, C:F são dependentes entre si.
Dei uma pesquisa aqui e não encontrei na internet nem sinal de argumentos para selecionar o item da lista via dispatcher. Também não encontrei nada parecido via API UNO. Mas usando a extensão Xray, cheguei a uma forma de buscar os valores de uma lista fixa ou mesmo um intervalo que estiver na validação. O problema é que o mesmo "método" não funciona para fórmulas.
No entanto, há um método alternativo, mas para construir o código preciso de um arquivo de exemplo, ou pelo menos dar uma olhada nas fórmulas usadas na validação das colunas C:F.
Oi @Leandro Vieira, fica mais fácil vendo o arquivo, altere os dados sigilosos, se houver, e manda o arquivo......
Estive um pouco ausente, segue o arquivo: Controle de gastos A disposição dos meses pode ser mudada para ficarem um abaixo do outro se o código da macro ficar muito grande.
A fórmula está um pouco extensa, como fiz algumas alterações no "BD" irei atulualiza-la, só um momento.
"Controle de gastos" link quebrado...................................
Pronto, segue o arquivo, estava atualizando as fórmulas: Controle de gastos