Sorteio por fórmula sem repetir nomes de outra coluna

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

:slight_smile:

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

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.

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

abçs.

@Orlando,

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

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

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

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

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

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

:frowning:

@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

.

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)

.

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

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!

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.

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

:\

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.

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

.

Realmente, o comando de repetição Do … Loop
nã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: ([Solved] Basic Macro to Recalculate Spreadsheet (View topic) • Apache OpenOffice Community Forum)

.

abç!

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

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

.

Muito obrigado pela colaboração!!

:slight_smile:

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