Autocompletar com lista suspensa no Calc

— O que vc quer fazer é isso aqui no excel:

Mas não é possível fazer no Calc, porque no Excel pode-se usar

=CÉL(“conteúdo”)

sem especificar uma célula

no Calc é obrigatório definir uma celula

=CÉL(“contents”; D7)


Eu também tentei migrar minhas planilhas pro Calc, mas infelizmente acabei desistindo.
Os recursos do Excel ainda são melhores. Nao gosto de usar macros, e o excel permite maior usabilidade sem macros. E o funcionamento das “Tabelas” do Excel também facilitam mais a automação

O jeito foi instalar o Microsoft Office via Playonlinux, para manter a produtividade.

https://www.youtube.com/watch?v=-38DbdbOJFk

Ola @mrkalvin, sobre a função CÉL, o LibreOffice Calc utilizará a posição da célula na qual esta fórmula está localizada. O Microsoft Excel utiliza a referência da célula na qual o cursor está posicionado.

@mrkalvin obrigado por contribuir. Era justamente isso que eu queria.n E, @Gilberto Schiavinatto confirma o que @mrkalvin disse sobre a impossibilidade de se conseguir isso co calc?

@Francys , Inspirado na resposta do @Gilberto Schiavinatto fiz uma proposta de Lista suspensa dinâmica com código direto no validação. Partindo da premissa que basta digitar na célula auxiliar três letras para que a escolha dos dados que as tenham na inicial sejam selecionados em célula de validação. Mas claro, é possível utilizar somente uma letra inicial também.

Sem usar o desloc. Assim, na lista suspensa é possível ao digitar numa célula auxiliar qualquer letra ou letras mudar a ordem da validação automaticamente sem deixar espaços em branco.
Basta usar um código na validação e definir um intervalo de células (onde ficam os seus dados). Aqui o arquivo para você testar se quiser.

Postei no meu blog uma solução com um vídeo. Ao artigoo título exatamente de “Lista suspensa dinâmica”. Quem quiser dar uma olhada e baixar o arquivo.

Ola @Francys, segue uma sugestão, não é exatamente o que necessita, mas fica perto.

Consegui com a ajuda do @Grafeno Como executar uma macro no Calc ao selecionar uma célula de uma área?

Usei Eventos de planilha… / Conteúdo alterado.

Arquivo teste


Complemento

Arquivo com alteração, observações no arquivo .


Caso a resposta atendeu sua necessidade, por gentileza, click na bolinha Descrição da imagem a esquerda da resposta, para finalizar a pergunta.

Parabéns, esse recurso ficou muito interessante.

Como vc inseriu esse recurso de ao terminar sair da celula ele já abre a lista?

Obrigado

Fiz um relatório da forma como uso:
https://drive.google.com/open?id=1_03izB75NmTNtnDAE60JhGTJLQhcVI22

  1. Teria como o conteúdo da coluna E em laranja ficar na coluna A ? Pra eu não ter que ocultar a coluna E.

  2. Como eu adiciono esse efeito que ao sair da digitação da celula, no meu caso da coluna F, ela já exibe a lista de opções?

  3. O primeiro item da lista sempre está em branco, teria como remover esse item em branco?

Vide Complemento na Resposta acima.

obrigado pela ajuda!

Estou adaptando o seu exempo ao meu uso, mas ainda não consegui fazer a lista aparecer automaticamente assim que digito o texto e aperto enter.
Do mesmo modo do seu exemplo.
O que devo fazer pra ter esse efeito?

No seu exemplo, quando eu recorto o conteudo as duas colunas A e B, colo em outra coluna qualquer. Eu perco esse efeito em que a lista aparece automatico ao digitar e apertar enter.
Obrigado

Recortei a coluna E colei em A

Deletei a coluna E

Acertei a Macro. (Column = 4)

Em Programação.G1 acertei a formula.

Ligar a macro a Eventos de planilha: 1- Na aba Base, clique direito, selecione Eventos de planilha: 2- Na lista Evento selecione Conteúdo alterado; 3- Clique botão Macro, 4- Selecione seu arquivo e a macro ConteudoAlterado, OK OK.

Arquivo em devolução com acerto.

Fantástico ficou muito bom mesmo.
Agora estou em outro pc, alterei as configurações de segurança da Macro. E funcionou do jeito que eu precisava.

Vc é muito bom, uma injeva boa dos seus conhecimentos em Calc.
Parabéns e obrigado pela paciência em ajudar.
Um ótimo ano pra vc!

Fico feliz que te serviu.

Por gentileza, click na bolinha Descrição da imagem a esquerda da resposta, para finalizar a pergunta.

Ola @mrkalvin,

Sobre o item 3) O primeiro item da lista sempre está em branco, teria como remover esse item em branco?

Em Dados validação esta Lista, troque por esta formula DESLOC(Lista;0;0;MAIOR(A7:A27;1);1)

O primeiro item branco deixa de aparecer.

eu tentei mudar e não funcionou, será que alterei o local certo?

exemplo : imagem da tela

[arquivo exemplo:]
https://drive.google.com/open?id=1WejMeGHX8zlxBCse_Sh0JTrfezBBSJ-7

Falha minha, altere para

DESLOC(Lista;0;0;MAIOR(Programacao.A4:Programacao.A28;1);1)

Lembrando se alterar a área do arquivo, altere a validação.

Está ficando sensacional.
eu travei as celulas pra poder carregar pras linhas de baixo:

DESLOC(Lista;0;0;MAIOR(Programacao.$A$4:Programacao.$A$28;1);1)


Mais uma coisa.

Quando aperto a tecla “DEL” ou na “Linha de entrada” eu apago o conteúdo da coluna E na celula Base.
o Calc exibe a lista de sugestões mesmo não tendo o que sugerir (na primeira linha aparece ‘Erro:502’ e nas outras linhas aparece a última sugestão feita).

  1. Teria como alterar a macro pra quando esta celula estiver vazia não exibir a lista de sugestões e também quando eu digito algo na celula e aperto a tecla pra cima ou pra baixo, também teria como não exibir a lista de sugestão?

Muito obrigado mais uma vez!

Sobre o acerto da formula ok, havia esquecido do detalhe.

Quanto a célula estiver vazia, acho que da para acertar, vou dar uma pensada, mas o teclar para cima/baixo não imagino como…

Não sei se é possivel capturar o evento do teclado no visual basic pra usar antes de chamar ‘AbrirListaSelecao’

       Sub ConteudoAlterado( oCelula )
rem por Grafeno ask.177787
    ' Testar se o objeto selecionado é uma célula individual '
    If oCelula.ImplementationName <> "ScCellObj" Then Exit Sub
    ' Endereço da Célula '
    oEnd = oCelula.CellAddress    
    ' Celula no intervalo f7:f27 '
    ' Coluna 5 e linha entre 1 e 21 '
    If oEnd.Column = 4 Then
      If oEnd.Row >= 1 And oEnd.Row <= 21 Then

        'Não sei seria possível alterar algo aqui e capturar a tecla e verificar se a tecla é diferente de "tecla para cima" e "tecla para baixo" então chamar a lista de sugestão

        Call AbrirListaSelecao 
      End If
    End If
End Sub

@mrkalvin, altere a macro conforme abaixo: a parte incluída esta entre os traços.

Sub ConteudoAlterado( oCelula )
rem por Grafeno ask.177787
    ' Testar se o objeto selecionado é uma célula individual '
    If oCelula.ImplementationName <> "ScCellObj" Then Exit Sub
'====================================
Dim oSel as Object
Dim Var1 as String
	oSel = ThisComponent.getCurrentSelection()
'	MsgBox oSel.getString()
	Var1 = oSel.getString()
	If Var1 = "" Then Exit Sub
'====================================    
    ' Endereço da Célula '
    oEnd = oCelula.CellAddress    
    ' Celula no intervalo B7:B27 '
    ' Coluna 1 e linha entre 6 e 26 '
    If oEnd.Column = 1 Then
      If oEnd.Row >= 6 And oEnd.Row <= 26 Then
        ' Chamar a macro desejada '
        Call AbrirListaSelecao 
      End If
    End If
End Sub

Se der Enter com a célula em branco, nada acontece.

Obrigado a dica da alteração da macro funcionou, quando teclo “DEL” ele não exibe mais a lista de sugestões.
Mas a dica de ativar a mensagem de erro não pode ser usada senão não exibe a lista de sugestões.

Eu resolvi isso de outra forma:

Quando não existe nada preenchido na planilha base ele dá erro “#VALOR!” na célula G4 da planilha “Programacao”, então eu usei o SEERRO e deixei a celula G4 em branco nesse caso.

Já a coluna A da planilha “Programacao” eu mudei a formula

  1. se g4 estiver em branco (caso da
    planilha base não preenchida) ele
    vai incrementado a numeração e isso
    ativa todas as opções na lista de
    sugestão. SE($G$4="";LINHA()-3;…

  2. Se foi digitado algo na planilha
    base, vai verificar se o que foi
    digitado está disponivel na lista,
    se não tiver disponivel ele vai
    incrementado a numeração e isso
    ativa todas as opções na lista de
    sugestão.
    SE(É.NÃO.DISP(PROCV(""&$G$4&"";$B$4:$B$28;1;0));LINHA()-3;…