Notifications
Clear all

Filtrar Registros e Excluir os demais.

25 Posts
4 Usuários
0 Reactions
3,569 Visualizações
(@luislapa)
Posts: 49
Eminent Member
Topic starter
 

Olá pessoal,

Estou precisando de uma super ajuda de vocês e não sei como resolver meu problema.

Tenho uma planilha que é ligado ao banco de dados do ERP que é atualizado diariamente, e tenho dois filtro que tenho que fazer diariamente.

1º Buscar os registros que tem |Cód. Tabela| Cód. Fornecedor | Loja | Cód. Produto | igual e manter o registro com a maior data de |Vigencia do Item| e excluir os demais.

2º Buscar os registros que tem | Cód. Fornecedor | Cód. Produto | igual e comparar se o campo |valor| é igual, se for, no Campo Divergência mostra Não, se for diferente, mostra Sim.

Caso alguem possa me ajudar, agradeço.

Anexei um arquivo reduzido apenas para melhor visualização.

 
Postado : 30/04/2014 11:29 am
(@luislapa)
Posts: 49
Eminent Member
Topic starter
 

Bom dia Murilo

Acabei de testar em outra máquina e também trava.

Segue abaixo:
http://www.sendspace.com/file/z3lm34

abs

 
Postado : 05/05/2014 7:41 am
themrl16
(@themrl16)
Posts: 60
Trusted Member
 

Luis!

Eu analisei novamente a planilha, e com os dados que você possui o meu computador também trava... com o algoritmo que eu criei, quando vc tem 2500 registros cada uma das buscas é realizada 6.250.000 vezes (2.500 linhas x 2.500 linhas, não é atoa que a máquina trava) kkkk
Estarei pensando em uma forma mais dinâmica de verificar as linhas para lhe ajudar, talvez aplicando um algoritmo diferente e postarei aqui caso consiga pensar em algo.

Caso algum amigo do fórum tenha uma solução mais funcional que a minha, por favor nos ajude, pois também estou curioso em procurar um novo algoritmo para comparar esses valores.

Murilo.

Leia as REGRAS
Utilize arquivos COMPACTADOS
PESQUISE
AGRADEÇA clicando na mãozinha ao lado da ferramenta citar.
Marque o tópico como [Resolvido], clicando no ao lado do botão citar.

Abraços,

Murilo L
------------
e-mail: [email protected]
skype: fareva_mlima

 
Postado : 05/05/2014 12:29 pm
(@luislapa)
Posts: 49
Eminent Member
Topic starter
 

Olá Murilo!

Irei continuar buscando uma solução também, caso encontre irei postar. vlw.

Caso alguém possa ajudar neste caso, ficarei grato.

Abs

 
Postado : 06/05/2014 6:00 am
(@luislapa)
Posts: 49
Eminent Member
Topic starter
 

Olá pessoal,

Continuo em busca de uma solução.

Caso alguém possa ajudar.

Obrigado.

 
Postado : 07/05/2014 8:08 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

luislapa,

Para o primeiro caso: Por que não concatenar |Cód. Tabela| Cód. Fornecedor | Loja | Cód. Produto | ? A partir daí vc analisa as vigências já que vc passa a identificar os registros únicos...

Para o segundo a concatenação também funcionaria (| Cód. Fornecedor | Cód. Produto |) e a partir daí avaliar os valores coincidentes.

Não manjo VBA mas acho que por fórmulas é possível (não eliminaria registros mas montaria uma nova base correta).

Com matriciais (em tese) é relativamente tranquilo. Além disso não seria necessária a ordenação dos registros.

Se quiser avançar avise.

Abs,

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 07/05/2014 6:42 pm
(@luislapa)
Posts: 49
Eminent Member
Topic starter
 

Olá amigo!

Meu unico problema de manter os dados é que minha base é ligada ao banco de dados do sistema com um volume muito grande de dados deixando a planilha muito pesada.

Por isto tenho a necessidade de eliminar.

abs

 
Postado : 08/05/2014 6:24 am
(@luislapa)
Posts: 49
Eminent Member
Topic starter
 

Olá amigos!

Finalmente consegui atingir meu objetivo, incrementei algumas informações e utilizei as ajudas que recebi em outros tópicos, porém a lógica está feita, agora preciso aperfeiçoa-la pois estou utilizando fórmulas nas células do que não consegui em VB, porem em meu micro o tempo médio de processamento dos Filtro/Check é de 2 minutos.

A planilha em anexo tem o Antes e o Depois de executar os macros.

1) Não consegui identificar, mas a primeira vez que clico no botão Filtrar ele aparece um erro, porém se eu depurar e executar novamente ele dá continuidade nos checks e não apresenta mais erro.
2) Fiz 5 Checks entre fórmulas e código VB.

Preciso converter as fórmulas em processo VB, e conseguir identificar o erro que apresenta na primeira vez que executo os macros e se possível e se existir uma forma de reduzir o processamento.

A coluna P, check 2, só adicionei porque foi a única forma que encontrei para descobrir se a data de vigência do item é a data mais recente e poder eliminar as anteriores no check 3. Mas se existir alguma forma de executar o Check 2 sem precisar da coluna P para que seja executado o check 3, para mim não há problema e fica até menos dados na planilha.

Caso alguém possa ajudar, obrigado.

http://www.sendspace.com/file/tw7jl0

Abs

 
Postado : 17/05/2014 10:16 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Quanto a formula tente...

Sub AleVBA_11498_20()
'Esse cósdigo não está legal, pois está demorando 57 segundos apra finalisar
    Dim lasrow As Long
    lasrow = Cells(Rows.Count, "A").End(xlUp).Row
    
    Application.ScreenUpdating = 0
    Application.Calculation = xlCalculationManual
        Range("Q5").Formula = "=IF((COUNTIFS(B:B,[@[Cód. Fornecedor - TB]],G:G,[@Loja],I:I,[@[Cód. Produto]]))>1,""Duplicado"",""Único"")"
        Range("R5").Formula = "=IF((COUNTIFS(B:B,[@[Cód. Fornecedor - TB]],I:I,[@[Cód. Produto]]))=(COUNTIFS(B:B,[@[Cód. Fornecedor - TB]],I:I,[@[Cód. Produto]],M:M,[@Preço])),""Ok"",""Divergente"")"
        Range("Q5:R5").AutoFill Destination:=Range("Q5:R" & lasrow)
        Range("Q5:R" & lasrow).Value = Range("Q5:R" & lasrow).Value
    Application.ScreenUpdating = 1
    Application.Calculation = xlCalculationAutomatic
    
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 18/05/2014 6:13 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Outra dica

Caso tenha um código principal, que por ele pode chamar outros

Sub Check1()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

'Seu código aqui

Call Check2
Call Check3

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic


End Sub

Desabilite as linhas Application

Sub Check2()

'Application.ScreenUpdating = False '<- Não use
'Application.Calculation = xlCalculationManual '<- Não use

'Seu Código

'Application.ScreenUpdating = True  '<- Não use
'Application.Calculation = xlCalculationAutomatic  '<- Não use

End Sub
Sub Check3()

'Application.ScreenUpdating = False '<- Não use
'Application.Calculation = xlCalculationManual '<- Não use

'Seu Código

'Application.ScreenUpdating = True  '<- Não use
'Application.Calculation = xlCalculationAutomatic  '<- Não use

End Sub

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 18/05/2014 6:21 am
(@luislapa)
Posts: 49
Eminent Member
Topic starter
 

Olá Alexandre,

Obrigado pelas Dicas,

Apliquei a fórmula na planilha porém ele deixa todos os registro da coluna correspondente com o mesmo valor, mas quando tiro a linha de comando ( Range("Q5:R" & lasrow).Value = Range("Q5:R" & lasrow).Value ) ele deixa a fórmula na célula e os valores ficam correto.

Oque pode está acontecendo?

Abs

 
Postado : 19/05/2014 2:16 pm
Página 2 / 2