VBA Verificação dup...
 
Notifications
Clear all

VBA Verificação duplicação de dados por cores

5 Posts
3 Usuários
0 Reactions
1,171 Visualizações
(@gdevens)
Posts: 11
Active Member
Topic starter
 

Boa Tarde,

Consegui construir a planilha, em anexo, com informações e dicas extraidas do planilhando cujo objetivo é verificar a ultima coluna da planilha, que é a união das informações das colunas anteriores (usando a função &) como se fosse um "código para verificação", porém vejo que quando clico no botão "Verificação de dados" que roda a macro, demora muito para trazer a verificação por cores.
Tentei diminuir a verificação das linhas e a quantidade de cores para formatação, mas mesmo assim demora muito para trazer a formatação/verificação.

Teria como rodar essa macro com mais velocidade?
Será que está com muitos loops?

Muito Obrigada mais uma vez!!!!

 
Postado : 04/10/2012 10:27 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

No arquivo disponibilizado não tem a macro/rotina a que se refere

 
Postado : 04/10/2012 10:38 am
(@wilmarleal)
Posts: 186
Estimable Member
 

nao veio a macro,
salva com xlsm e compacta com .zip e anexa novamente abç

 
Postado : 04/10/2012 11:17 am
(@gdevens)
Posts: 11
Active Member
Topic starter
 

Desculpa!
Verifiquei isso agora..
Segue a macro e em anexo o arquivo com a macro!

Sub InteriorColorDuplicados()

Dim LLoop As Integer
Dim LTestLoop As Integer
Dim LClearRange As String

Dim Lrows As Integer
Dim LRange As String

'Variaveis para a Coluna e Valor
Dim LChangedValue As String
Dim LTestValue As String

'Cor Inicial
Dim sCor As Integer
sCor = 1

'Teste em 20 linhas na planilha
Lrows = 500 'Atere aqui para mais Linhas
LLoop = 2

'Limpa a formatação anterior
LClearRange = "E6:e" & Lrows
Range(LClearRange).Interior.ColorIndex = xlNone

'Verifica primeiro as 20 linhas na planilha
While LLoop <= Lrows
'Define a Coluna C
LChangedValue = "E" & CStr(LLoop)

If Len(Range(LChangedValue).Value) > 0 Then

'Testa cada valor se são unicos
LTestLoop = 2
While LTestLoop <= Lrows
If LLoop <> LTestLoop Then
LTestValue = "E" & CStr(LTestLoop)
'Se o valor for duplicado
If (Range(LChangedValue).Value = Range(LTestValue).Value) Then
'Altera a cor de Fundo da celula
Range(LChangedValue).Interior.ColorIndex = sCor
Range(LTestValue).Interior.ColorIndex = sCor
End If

End If

LTestLoop = LTestLoop + 1
Wend

End If

LLoop = LLoop + 1

'Soma + 1 para a proxima Cor
sCor = sCor + 1
If sCor = 20 Then

sCor = 1
End If
Wend

End Sub

 
Postado : 04/10/2012 12:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja se assim melhora

Sub InteriorColorDuplicados()

Dim LLoop As Integer, LTestLoop As Integer, Lrows As Integer
Dim LClearRange As String, LRange As String

'Variaveis para a Coluna e Valor
Dim LChangedValue As String
Dim LTestValue As String
'Cor Inicial
Dim sCor As Integer
    
sCor = 3
    
    
'Teste em 20 linhas na planilha
Lrows = 500 'Atere aqui para mais Linhas
LLoop = 6
    
'Limpa a formatação anterior
LClearRange = "E6:e" & Lrows
Range(LClearRange).Interior.ColorIndex = xlNone
    
'Verifica primeiro as 20 linhas na planilha
   While LLoop <= Lrows
    'Define a Coluna C
    LChangedValue = "E" & CStr(LLoop)
        
    If Len(Range(LChangedValue).Value) > 0 And Range(LChangedValue).Interior.ColorIndex = xlNone Then
    'MsgBox LChangedValue
    'Testa cada valor se são unicos
    LTestLoop = 6
            While LTestLoop <= Lrows
                If LLoop <> LTestLoop Then
                    LTestValue = "E" & CStr(LTestLoop)
                    'Se o valor for duplicado
                   If (Range(LChangedValue).Value = Range(LTestValue).Value) Then
                        'Altera a cor de Fundo da celula
                        Range(LChangedValue).Interior.ColorIndex = sCor
                        Range(LTestValue).Interior.ColorIndex = sCor
                    End If
                        
                End If
                
               LTestLoop = LTestLoop + 1
            Wend
        'Soma + 1 para a proxima Cor
        sCor = sCor + 1
        If sCor = 56 Then sCor = 3            
        End If        
        LLoop = LLoop + 1   
    Wend
    
End Sub
 
Postado : 04/10/2012 1:22 pm