Pergunte aqui
1

Sorteio por fórmula sem repetir nomes de outra coluna

perguntadas 2019-10-01 03:19:40 +0100

imagem do gravatar de Orlando

updated 2019-10-14 23:04:55 +0100

Olá, pessoal!

Pretendo adaptar as fórmulas existentes numa coluna E para o sorteio de nomes, desde que não repita nomes fixos em outra coluna G referente ao mesmo bairro. conforme planilha anexa:

Sorteio com fórmulas (atualizada)

Grato pela atenção!

Orlando Souza

8)

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

2 Respostas

0

respondidas 2019-10-13 04:44:01 +0100

imagem do gravatar de Orlando
Dim oSheet As Object
oSheet = ThisComponent.CurrentController.ActiveSheet
Dim oCell As Object
oCell = oSheet.getCellByPosition(10, 129)
Do Until oCell.Value = 0
    ThisComponent.calculateAll()
    WAIT 0
Loop

FONTE: Ask LibreOffice

editar assinalar como ofensivo Excluir Link mais
1

respondidas 2019-10-01 15:33:42 +0100

updated 2019-10-09 17:43:06 +0100

Ola @Orlando, não é uma solução bonita, mas resolve até uma solução melhor.

Na coluna K, coloquei um contador de diferentes, e na macro, acrescentei no final se o campo "Conferente" for diferente de 128, é acionada a macro novamente.

Arquivo do teste.

Arquivo do teste2

Arquivo do teste3

Arquivo editado, sem planilha extra.

-----------------------------------------------------------------------------

ATENÇÂO:: Para dar mais detalhes a sua pergunta, use Descrição da imagem na pergunta ou Descrição da imagem abaixo. Grato.

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

editar assinalar como ofensivo Excluir Link mais

Comentários

Olá, @Gilberto Schiavinatto

A ideia é boa, mas a macro acrescentada está gerando um loop infinito com travamento na planilha.

abç.

imagem do gravatar de OrlandoOrlando ( 2019-10-01 19:18:23 +0100 )editar

Ok @Orlando, Tudo depende de sorte, os testes que fiz variou de 2min e 25 seg. a 5min e 40seg. rodei 6 vezes.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-10-01 20:23:55 +0100 )editar

vlw a intenção, @Gilberto Schiavinatto! Mas é muito tempo para aguardar o sorteio.

Não seria mais rápido se conseguíssemos uma

fórmula nas linhas de coluna K com resultado "1", quando

tivessem nomes iguais em mesmo bairro nas cols I e J; e

resultado "" (cél vazia), quando isso não acontecesse?

Incluindo uma macro enxuta para realizar um loop do sorteio

até que a soma nas linhas da col K ficassem "" (cél vazia).

imagem do gravatar de OrlandoOrlando ( 2019-10-02 01:20:22 +0100 )editar
1

@Orlando, Vide Arquivo teste2 na resposta acima a coluna M tem 1 para Bairro com duplicata.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-10-02 03:08:32 +0100 )editar

No 2o. teste também o loop da macro é lento.

Acho que não é possível deixa-lo instantâneo como na combinação das teclas de atalho Ctrl+Shift+F9

Obrigado pela atenção, @Gilberto Schiavinatto

:)

imagem do gravatar de OrlandoOrlando ( 2019-10-02 03:56:09 +0100 )editar

Ops... Só gerei o 1 na coluna M, não alterei a macro. Não tenho conhecimento suficiente para altera-la conforme mencionou acima...

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-10-02 13:47:41 +0100 )editar

Sorteio em +/- 5 segundos, tá bom, vide acima: Arquivo teste3

Criei uma planilha para sorteio, depois só linkei com a tabela.

E uma macro simples de recalculo.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-10-02 15:38:30 +0100 )editar

dos três testes, o 2º foi o que mais se aproximou da minha pergunta. Precisando apenas o sorteio ficar instantâneo.

abçs.

imagem do gravatar de OrlandoOrlando ( 2019-10-02 21:06:24 +0100 )editar

@Orlando,

Não entendi, você testou o terceiro ?? Menos que 5 segundos .................

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-10-02 22:29:26 +0100 )editar

Oi!

testei, mas precisa acrescentar uma planilha, tirar as fórmulas na col E e causa um erro de execução na linha do comando: Call RecalF9

imagem do gravatar de OrlandoOrlando ( 2019-10-03 05:09:21 +0100 )editar

Ola @Orlando, entre em contato direto, veja aqui: https://wiki.documentfoundation.org/U...

Indique na planilha o que quer alterar e envie direto para mim. Aguardo.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-10-03 14:43:25 +0100 )editar

Sobre o comando Call RecalF9, é uma chamada de outra macro para executar.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-10-03 14:45:14 +0100 )editar

Encontrei o código abaixo para o VBA Excel, que executa a tecla F9. Mas não encontrei ainda o que executa as teclas Ctrl+Shift+F9 no VB Calc

    Do
ActiveSheet.Calculate
Loop Until ActiveSheet.Range("K130").Value = 0

:(

imagem do gravatar de OrlandoOrlando ( 2019-10-05 17:47:00 +0100 )editar

@Orlando, macro feita pelo gravador:

Sub CtrlShiftF9
'----------------------------------------------------------------------
dim document, dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:CalculateHard", "", 0, Array())
end Sub

.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-10-07 01:56:55 +0100 )editar

Olá, @Gilberto Schiavinatto

Não consegui aplicar a ação das teclas Ctrl+Shift+F9 na execução do loop, até que "K2:K129" ou K130 seja igual a 0. Conforme instruções na imagem de link abaixo:

Loop pelo Basic Calc

Onde, K2:K129

=SE(É.NÃO.DISP(PROCV(I2;J:J;1;0));0;1)

.

imagem do gravatar de OrlandoOrlando ( 2019-10-07 05:02:03 +0100 )editar

@Orlando, na execução de F9 ou Ctrl+Shift+F9 não reparei diferença no resultado, todas as formulas são recalculadas, se faz um loop individual para cada célula, creio que não vai adiantar, pois todas as células serão recalculadas, até as já corretas. No terceiro arquivo da minha resposta eu uso um contador de diferentes (nomeado conferente) na célula K131, coluna oculta e espelhado na célula H131. A Macro só aciona o recalculo e confere se o valor do contador é 128, se SIM para, caso contrario é recalculado.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-10-07 15:21:22 +0100 )editar

Isso mesmo! Pretendo encontrar um código enxuto que realize um loop de reativação das fórmulas na col E, até que a fórmula =SOMA(K2:K129) na célula K130 resulte em 0 (zero). Com fórmula =SE(É.NÃO.DISP(PROCV(I2;J:J;1;0));0;1) no intervalo K2:K129.

O "Arquivo do teste3" faz aquilo que comentei no dia ( Out 3 '19 ), além de alterar o funcionamento do botão na tabela do arquivo que anexei à essa minha pergunta.

Um abraço!

imagem do gravatar de OrlandoOrlando ( 2019-10-08 04:47:25 +0100 )editar

Sobre o botão, realmente alterei, pois estou utilizando a versão 6.3.x e esta com problemas com botões, alterei para figura geométrica.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-10-08 12:36:53 +0100 )editar

Não entendi por que a planilha ignora a condição na macro abaixo:

Do Until K130 = 0
    rem ----------------------------------------------------------------------
    rem get access to the document
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    rem ----------------------------------------------------------------------
    dispatcher.executeDispatch(document, ".uno:CalculateHard", "", 0, args1())
Loop

:\

imagem do gravatar de OrlandoOrlando ( 2019-10-09 14:23:46 +0100 )editar

Tem que definir o que é K130, se for um conteúdo de célula, terá que ir a célula, pegar o conteúdo e jogar em uma variável. Assim usa a variável.

No arquivo teste4, acima na resposta, retirei planilha.

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-10-09 15:51:12 +0100 )editar

A sua sugestão ficou melhor, sem a planilha.

.

Realmente, o comando de repetição Do ... Loopnão funciona no LibreOffice como na imagem de link adicionado no meu primeiro comentário de ( Out 7 '19 ), apesar de ali tratar da linguagem do OpenOffice.org Basic.

.

Estou pesquisando na net um código com comando de repetição para o LO Basic, que funcione com o código abaixo para recalcular planilha:

Sub Calculate()
   ThisComponent.calculateAll()
End Sub

FONTE: (https://forum.openoffice.org/en/forum...)

.

abç!

imagem do gravatar de OrlandoOrlando ( 2019-10-10 19:52:31 +0100 )editar

Analise esta macro, a altere como desejado

**sub RecalF9**

altere esta linha para sua célula K130

args111(0).Name = "ToPoint" : args111(0).Value = "Conferente"

imagem do gravatar de SchiavinattoSchiavinatto ( 2019-10-10 20:23:31 +0100 )editar

eu usei a linha de comando WAIT 0 na sua sugestão.

.

Muito obrigado pela colaboração!!

:)

imagem do gravatar de OrlandoOrlando ( 2019-10-13 04:34:48 +0100 )editar
Login/Registrar para responder

Ferramentas de perguntas

Estatísticas

Perguntadas: 2019-10-01 03:19:40 +0100

Lidas: 152 vezes

Última atualização: Oct 13 '19