Notifications
Clear all

Multiplos Ranges

8 Posts
2 Usuários
0 Reactions
1,631 Visualizações
(@pioli2014)
Posts: 0
New Member
Topic starter
 

Ola Pessoal,

Gostaria da ajuda para melhorar (e muito) uma macro. Ja procurei no forum, encontrei algo parecido mas não consegui fazer funcionar como quero:

Tenho um arquivo de controle de estoque com 9 planilhas. As 7 primeiras são os controles de estoque de 7 linhas de produtos, uma é a pagina principal e a outra planilha de nome CUBO, são dados extraídos do ERP e que através de macros diversas são utilizados para preenchimento das outras 7 planilhas.

pois bem, na planilha CUBO tem uma relação de todos os códigos existentes e o que quero é comparar SE TODOS estes códigos estão nas outras 7 planilhas.

Consegui fazer funcionar com o código abaixo (encontrado na net), mas gostaria de otimiza-lo visto que esta demorando muito.

Nas 7 planilhas a Range onde contem os códigos estão todas nomeadas (uma diferente da outra)

Sub Find_Matches()
    Dim CompareRange As Variant, x As Variant, y As Variant
 
    Set CompareRange = Range("iCodigos")
     For Each x In Range("L3:L500")
        For Each y In CompareRange
            If x = y Then x.Offset(0, 2) = x
        Next y
    Next x

    Set CompareRange = Range("iCodigosOleo")
     For Each x In Range("L3:L500")
        For Each y In CompareRange
            If x = y Then x.Offset(0, 2) = x
        Next y
    Next x

    Set CompareRange = Range("iCodigosRe")
     For Each x In Range("L3:L500")
        For Each y In CompareRange
            If x = y Then x.Offset(0, 2) = x
        Next y
    Next x

    Set CompareRange = Range("iCodigosRe")
     For Each x In Range("L3:L500")
        For Each y In CompareRange
            If x = y Then x.Offset(0, 2) = x
        Next y
    Next x

    Set CompareRange = Range("iCodigosPneumaticos")
     For Each x In Range("L3:L500")
        For Each y In CompareRange
            If x = y Then x.Offset(0, 2) = x
        Next y
    Next x

    Set CompareRange = Range("iCodigosTransferencia")
     For Each x In Range("L3:L500")
        For Each y In CompareRange
            If x = y Then x.Offset(0, 2) = x
        Next y
    Next x

    Set CompareRange = Range("iCodigosSensores")
     For Each x In Range("L3:L500")
        For Each y In CompareRange
            If x = y Then x.Offset(0, 2) = x
        Next y
    Next x

    Set CompareRange = Range("iCodigosArCondicionado")
     For Each x In Range("L3:L500")
        For Each y In CompareRange
            If x = y Then x.Offset(0, 2) = x
        Next y
    Next x

    Set CompareRange = Range("iCodigosDirecao")
     For Each x In Range("L3:L500")
        For Each y In CompareRange
            If x = y Then x.Offset(0, 2) = x
        Next y
    Next x

    Set CompareRange = Range("iCodigosDiversos")
     For Each x In Range("L3:L500")
        For Each y In CompareRange
            If x = y Then x.Offset(0, 2) = x
        Next y
    Next x
    
End Sub

Tentei algo assim mas nao funcionou:

    Dim r1, r2, r3, CompareRange As Range
    Set r1 = Worksheets("Plan1").Range("iCodigos")  
    Set r2 = Worksheets("plan2").Range("iCodigosOleo")
    Set r3 = Worksheets("Plan3").Range("iCodigosRe")

    Set CompareRange = Union(r1, r2, r3)

     For Each x In Range("L3:L500")
        For Each y In CompareRange
            If x = y Then x.Offset(0, 2) = x
        Next y
    Next x 
 
Postado : 04/11/2014 7:39 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Os dados tem repetir nas 3 guias? o que acontece se na guia1 tem Cod:10 e na guia2 tem Cod:10 mas na guia3 não tem o Cod:10?

Ao encontrar a duplicidade o código deve fazer oque? saltar duas colunas e colar o Cod repetido?

Att

 
Postado : 05/11/2014 6:24 am
(@pioli2014)
Posts: 0
New Member
Topic starter
 

Bom dia!!

Os dados tem repetir nas 3 guias? o que acontece se na guia1 tem Cod:10 e na guia2 tem Cod:10 mas na guia3 não tem o Cod:10?

Ao encontrar a duplicidade o código deve fazer oque? saltar duas colunas e colar o Cod repetido?
Att

Bom dia Alexandre!

Os dados NÃO se repetem nas 3 guias (nem devem).

Na guia "CUBO" tem uma relação de todos os códigos existentes na empresa e alguns desses códigos não estão nas outras 3 guias e o que quero é justamente verificar em cada uma das 3 guias quais códigos existentes em L3:L500 da guia CUBO que NÃO existem em cada uma dessas 3 guias e ao final abrir uma mensagem dos códigos não encontrados nas 3 guias para que eu possa inclui-los cada qual em sua guia.
A mensagem pode ser do tipo: "os Códigos x, y, z, etc... não foram encontrados" independente de qual guia não foi encontrado porque de acordo com o código eu sei em qual guia devo inclui-los.

Isso se faz necessário porque todos mês são lançados produtos novos na guia CUBO.

_______________________
o código que postei, faz o que você falou: quando encontra o código repetido, pula 2 duas colunas e repete o código para que eu identifique as células vazias (aqui fiz uma formatação condicional que pinta as células vazias de vermelho) que são aquelas que não se encontram nas outras planilhas, porem fiz assim porque foi o que consegui.... :mrgreen: e gostaria de fazer algo mais funcional além de que o código esta demorando muito porque na verdade são 7 guias que devem ser verificadas.

Grato pela ajuda.
Rogerio

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

Boa tarde!!

veja se ajuda.

Att

 
Postado : 05/11/2014 10:31 am
(@pioli2014)
Posts: 0
New Member
Topic starter
 

Boa tarde!!

veja se ajuda.
Att

Boa tarde Alexandre!

tentei adaptar na minha planilha mas não consegui...rsrs
...mas é o caminho.

Alterei no código o range onde estava "L2" e "L" para "A11" e "A" porque é na coluna A linha 11 que começam os códigos em cada planilha, porem tem outros dados na coluna A que não podem ser comparados, tais como uma linha em branco antes do "TOTAL", e tem planilhas (Sensores) que começa no A11 e depois no A48 e depois no A65, por isso o Range de cada planilha esta nomeado com intervalos. Ex.: iCodFreio, iCodOleo, iCodRe, iCodPneu, iCodTransf, iCodSensores, iCodArCond e iCodDirH

Tem a guia Gráficos que também não pode ser comparada.

Segue anexo o seu arquivo porem com os dados que preciso para facilitar.

Grato

Rogerio

 
Postado : 05/11/2014 3:14 pm
(@pioli2014)
Posts: 0
New Member
Topic starter
 

Ola Alexandre,

Só completando o post anterior,

Não precisa listar os duplicados, basta listar somente os únicos. É dessa informação que preciso.

Grato
Rogerio

 
Postado : 05/11/2014 8:42 pm
(@pioli2014)
Posts: 0
New Member
Topic starter
 

Bom dia Srs,!

tentei adaptar na minha planilha mas não consegui...rsrs
...mas é o caminho.

Alterei no código o range onde estava "L2" e "L" para "A11" e "A" porque é na coluna A linha 11 que começam os códigos em cada planilha, porem tem outros dados na coluna A que não podem ser comparados, tais como uma linha em branco antes do "TOTAL", e tem planilhas (Sensores) que começa no A11 e depois no A48 e depois no A65, por isso o Range de cada planilha esta nomeado com intervalos. Ex.: iCodFreio, iCodOleo, iCodRe, iCodPneu, iCodTransf, iCodSensores, iCodArCond e iCodDirH

Tem a guia Gráficos que também não pode ser comparada.

Não precisa listar os duplicados, basta listar os únicos. É dessa informação que preciso.

Segue anexo arquivo com os dados que preciso para facilitar.

Grato

Rogerio

 
Postado : 07/11/2014 5:37 am
(@pioli2014)
Posts: 0
New Member
Topic starter
 

ninguém?? :(

 
Postado : 12/11/2014 8:37 am