Notifications
Clear all

OTIMIZAR ROTINA

21 Posts
2 Usuários
0 Reactions
2,333 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ola Pessoal,

O código abaixo eu criei para validar alguns Options Buttons, mas a título de estudo gostaria de saber se existe uma forma de OTIMIZAR a rotina, pois acho que me faltou habilidade ao escrevê-la.

Desde ja agradeço quem puder colaborar

Sub FILTdNS()

Dim Linha As Double
Dim VORCA As Double

Sheets("DNS").Activate

Linha = 1
VORCA = TextBox40

With Sheets("DNS")
    
    Do While .Cells(Linha, "A").Value <> ""
    
    'parte 1
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 18 Then
    CH18 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 17 Then
    CH17 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 16 Then
    CH16 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 15 Then
    CH15 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 14 Then
    CH14 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 13 Then
    CH13 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 12 Then
    CH12 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 11 Then
    CH11 = True
    End If
    
    'parte 2
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 21 Then
    CH21 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 22 Then
    CH22 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 23 Then
    CH23 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 24 Then
    CH24 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 25 Then
    CH25 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 26 Then
    CH26 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 27 Then
    CH27 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 28 Then
    CH28 = True
    End If
    
    
    'parte 3
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 48 Then
    CH48 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 47 Then
    CH47 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 46 Then
    CH46 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 45 Then
    CH45 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 44 Then
    CH44 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 43 Then
    CH43 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 42 Then
    CH42 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 41 Then
    CH41 = True
    End If
    
    
    'parte 4
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 31 Then
    CH31 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 32 Then
    CH32 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 33 Then
    CH33 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 34 Then
    CH34 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 35 Then
    CH35 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 36 Then
    CH36 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 37 Then
    CH37 = True
    End If
    
    If Sheets("DNS").Range("B" & Linha) = VORCA And Sheets("DNS").Range("A" & Linha) = 38 Then
    CH38 = True
    End If
       
    Linha = Linha + 1
    Loop
    End With

End Sub
 
Postado : 19/04/2015 8:54 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pois é Ed, mesmo com a modificação ainda esta lento, demora em média 9 segundos pra atualizar.

E eu to rodando apenas essa rotina. O Excel é 2007, o PC um CORE i3 com 4GB de memória...

Mas tá beleza meu caro. Meu intuito inicial era apenas aprender um método de reduzir o código, ja fomos muito mais além e abusei de sua boa vontade.

Valeu mesmo !!

[]s

 
Postado : 23/04/2015 4:35 pm
(@edcronos)
Posts: 1006
Noble Member
 

desative o Hyper-Threading da bios

o excel e o vba trbalham apenas com um nucleo
e como o Hyper-Threading divide cada nucleo em 2
o excel e o vba acabam usando apenas 25% da capacidade do i3

com isso vc dobraria o desempenho de processamento para o excel
o meu tbm é um i3

caso possa me mandar as rotinas que tem na planilha e as colunas de controle para analise de desempenho no caso seria a coluna A e a B onde a macro faz varredura
e tbm o teste mais demorado

 
Postado : 23/04/2015 5:11 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pois é Ed. Fiquei um pouco receoso em desativar o Hyper-Threading, pois é maquina do serviço.

Mas pra ver como ficaria fiz o teste. E sinceramente a diferença foi irrisória. De qualquer forma vou criar um modelo bem próximo do usado aqui e coloco aqui.

Abraço e valeu mesmo !

 
Postado : 24/04/2015 2:10 pm
(@edcronos)
Posts: 1006
Noble Member
 

desculpa, mas então tem outra coisa agarrando a maquina

pq faz diferença sim e isso eu provei na minha maquina
no inicio eu ficava perdido em macros aqui e tentava de todo jeito diminuir o tempo,
e depois que desativei o tempo das macros caíram pela metade
e usando arrays as macros mesmo trabalhando com loop de mais 1000000 de celulas é instantâneo
e isso gjogando valores de uma celula para outra e comparando textbox, combobox entre outros

cara, sinto, mas já fiz oq pude e te orientei no que eu podia
se usando array, sem muito loop e verificação não resolveu
só posso te desejar sorte.
espero que outros com mais tempo de experiencia que eu possa te ajudar,

 
Postado : 24/04/2015 3:05 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Imagina, Ed. Voce ajudou demais camarada e muito mais que eu esperava.

Só uma duvida que fiquei um pouco receoso ao desativar Hyper-Threading, ele interfere em outras operações do PC, como download e outros programas ? (pergunto porque li sobre isso).

Abraço

 
Postado : 24/04/2015 3:57 pm
(@edcronos)
Posts: 1006
Noble Member
 

a não ser que se tenha muitos processos rodando ao mesmo tempo
muito dificil se sua area de atuação depende de 4 nuncleos vc iria ficar insatisfeito com um i3
e a maioria dos programas usam apenas 1 ou 2 nucleos no maximo

mas a diferença somente vc pode dizer,
para mim foi notavel e até o excel ficou mais leve
o uso de processador pelo excel é comprovado usando o gerenciador de tarefa enquanto se usa uma macro ou um formula matricial pesada
ativado = 25 % de uso de procesador
desativado 50%
e isso na logica leva a crer que se leva a metade do tempo para rodar completamente

mas bem,
apenas vc sabe seu limite,
o de seu excel ou do pc
ou até mesmo da sua capacidade de lidar com problemas variados e aprendizado em cima do mesmo

se é impossível intervenção então só resta lidar com o resultado das coisas

até mais

 
Postado : 24/04/2015 5:31 pm
Página 2 / 2