Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por fabiolegiao
#25353
Olá amigos,

Tenho um problema no código a seguir:

Public Sub MontarBlocos()

LinhaFinal = Application.WorksheetFunction.CountA([TabOrdSuce[OrdOperPred]]) + 1

Matriz = Sheets("TabOrdSuc").Range("A:B")

On Error Resume Next

For i = 2 To LinhaFinal



Do
PrimeiraBloco = Sheets("TabOrdSuc").Cells(i, 11).Value
If PrimeiraBloco = "x" Then
i = i + 1
End If
Loop While PrimeiraBloco = "x"

PrimeiraBloco = Sheets("TabOrdSuc").Cells(i, 11).Value

Sheets("Blocos").Columns(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = PrimeiraBloco

Do
SegundoBloco = Sheets("Blocos").Columns(1).Cells(Rows.Count, 1).End(xlUp)
SegundaBloco = ""
Pesquisa = ""
Pesquisa = Application.WorksheetFunction.VLookup(SegundoBloco, Matriz, 2, False)

If Pesquisa <> "" Then
Sheets("Blocos").Columns(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Pesquisa
End If

Loop While Pesquisa <> ""

Sheets("Blocos").Columns(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = "x"


Next i



End Sub




Este código monta a sequência que os eventos têm que acontecer. Na coluna A contém os serviços predecessores e na coluna B os serviços sucessores. Na coluna K “Primeira” identifico através de fórmula as primeiras de cada bloco, como pode ser visto na tabela. (A lógica para identificar as primeiras de cada bloco é que, se ela não é sucessora de outra, logo ela é a primeira do bloco).
Uma vez identificado as primeiras ordens de cada bloco, a macro identifica a sucessora e copia para a planilhas blocos, em seguida ele pega esta mesma ordem e realiza a pesquisa até que a mesma esteja vazia, depois ele vai descendo a coluna K até encontrar o próximo valor diferente de X e repete tudo até o final da tabela.
Problema: o código está muito lento quando o universo está muito grande, gostaria de otimizá-lo para melhor performance.

Muito obrigados.
Você não está autorizado a ver ou baixar esse anexo.
Por fabiolegiao
#25362
Alexandre,

Mesmo seguindo as dicas dos sites sugeridos a minha macro continua com um tempo de execução muito alto. Acredito que uma otimização nas estruturas de repetição melhorariam a performance, entretanto, não consigo enxergar essa tal otimização.
Avatar do usuário
Por alexandrevba
Avatar
#25372
Boa tarde!!

Usando o arquivo que você postou e com os dadas inalterados, foram 0,15 segundos gasto para finalizar essa macro.

Att
Por fabiolegiao
#25380
Alexandre,

Ante de tudo, muito obrigado pela sua atenção.

O que acontece é que na tabela (TabOrdSuc) eu mantive apenas 13 linhas para conseguir testar o código.

A tabela completa esta na tabela ao lado (TabOrdSucCompleta). Precisa copiar e colar, são 1056 linhas e leva mais de 7 minutos, entretanto, meu universo geralmente é de + ou - 20.000 linhas que dura uma eternidade.

Muito obrigado.
Avatar do usuário
Por alexandrevba
Avatar
#25395
Bom dia!!

Com 1069 linhas durou 0,23 segundos, com 12.807 linhas, durou 1,15 segundos.

Eu não sei se vou poder te ajudar com uma melhora no código, pois eu não sei o que está havendo do outro lado.

Eu uso um i5 3.20GHz, 4GB memoria RAM, office 2010 standard 32Bits Pt-Br


Att
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord