Notifications
Clear all

Colorir linha conforme um critério.

10 Posts
4 Usuários
0 Reactions
1,574 Visualizações
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Boa tarde a todos,
Pesquisando no fórum consegui criar uma macro que colore a célula conforme o motivo da coluna resultado.
O problema e que com a macro que criei só consigo colorir a célula onde esta o motivo indicado na rotina, mas eu preciso que todo o intervalo seja colorido.
ex:
Coluna E célula E2 resultado CONCLUIDO MOT1 colorir de azul claro todo o intervalo B2:E2.
Coluna I célula I3 resultado CONCLUIDO MOT2 colorir de verde claro todo o intervalo F3:I3.
E assim sucessivamente com todos resultados da planilha.

Antes fazia essa tarefa utilizando formatação condicional, porém surgiu a necessidade de transferir as informações para várias planilhas assim quando é feito a transferência a formatação desaparece por isso resolvi fazer essa tarefa via macro vba.

Antecipadamente agradeço a colaboração.

Abraços.

 
Postado : 20/08/2015 10:27 am
(@mprudencio)
Posts: 0
New Member
 

Para transportar a Formatação condicional vc pode usar a ferramenta pincel, ela copia inclusive a formatação condicional.

 
Postado : 20/08/2015 10:33 am
(@pfarias)
Posts: 0
New Member
 

Exato, o MPrudencio está certo. Utiliza o Pincel.

Fazer um macro para essa função dá para fazer, mas não acredito que seja 100% necessário. Tenta o Pincel. Se não ajudar posta aqui.

 
Postado : 20/08/2015 10:37 am
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Marcelo Boa tarde,

Conheço essa ferramenta, problema é que são vários registros e as vezes a outra planilha possui um tipo de formatação diferente.

 
Postado : 20/08/2015 10:38 am
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Pietro boa tarde,

Conforme resposta para Marcelo conheço a ferramenta pincel, inclusive fazia a transferência dos dados utilizando essa ferramenta.
O problema é que há várias planilhas que necessito transferir os dados e as vezes o formato da planilha é diferente.
Sem falar que várias pessoas inseri dados nas planilhas e cópia informações de outra planilhas e cola sem usar a opção colar especial e assim a formatação vai pro espaço..rs.
Pra facilitar essa tarefa diária creio que com vba seria mais fácil.

Obrigado pelas dicas.

Abraços.

 
Postado : 20/08/2015 10:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Fabio, se entendi, é só substituir as instruções :

cell.Interior.Color = 10092543
por :
cell.Offset(0, -3).Resize(, 4).Interior.Color = 10092543

 
Postado : 20/08/2015 12:14 pm
(@pfarias)
Posts: 0
New Member
 
Sub VeseFunciona()
Application.ScreenUpdating = False
'Se quiser colocar inserir mais itens é só colocar aqui em baixo
Dim Mtz(2)
Mtz(1) = "CONCLUIDO MOT1"
Mtz(2) = "CONCLUIDO MOT2"

For y = 1 To UBound(Mtz)
    For x = 1 To Application.CountIf(Cells, Mtz(y))
        Cells.Find(what:=Mtz(y), After:=ActiveCell, LookIn:=xlFormulas _
            , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
        
                ActiveCell.Offset(0, -3).Range("A1:D1").Interior.Color = _
                ActiveCell.Interior.Color
    Next
Next
Application.ScreenUpdating = True

MsgBox "Concluido!", vbInformation
End Sub
 
Postado : 20/08/2015 12:20 pm
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

pfarias boa noite,
Obrigado por sua ajuda.
Pelo que eu entendi preciso rodar a macro que você criou depois depois da minha ne?
Se eu colocar o número da cor depois de .Interior.Color = consigo fazer tudo funcionar em apenas uma rotina?
Tentei incluir os outros motivos conforme você disse mas não deu certo.

'Se quiser colocar inserir mais itens é só colocar aqui em baixo
Dim Mtz(2)
Mtz(1) = "CONCLUIDO MOT1"
Mtz(2) = "CONCLUIDO MOT2"
Mtz(2) = "AGUARDANDO RETORNO OP"
Mtz(2) = "CONTATADO, MAS NÃO OP"
Mtz(2) = "FORA DE ÁREA DE SERVIÇO"
Mtz(2) = "NÃO ATENDE OU AVISO"
Mtz(2) = "SEM CONTATO"
Mtz(2) = "TEL DE TERC"
Mtz(2) = "TEL FORA DE USO OP"

Abraço.

 
Postado : 20/08/2015 5:47 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Fabio, a rotina que o pfarias indicou ao localizar a ocorrência preenche a cor das celulas adjacentes de acordo com a cor que já está na celula localizada:
ActiveCell.Offset(0, -3).Range("A1:D1").Interior.Color = ActiveCell.Interior.Color.

Se entendi conforme seu post anterior, todas as celulas de seu modelo não estão com as cores
Quanto a suas perguntas :
Pelo que eu entendi preciso rodar a macro que você criou depois depois da minha ne?
Se suas celulas estão todas em branco, SIM tem de rodar a sua primeiro e depois a dele.

Tentei incluir os outros motivos conforme você disse mas não deu certo.
Neste caso, ele havia criado uma Matriz com dois itens somente Dim Mtz(2), se adicionar mais tem de alterar este numero de acordo com a qde adicionada e numerar cada uma, não podendo ter repetidas, se adicionou 9, acrescente Mtz(1), Mtz(2), Mtz(3)........Mtz(9)

Se eu colocar o número da cor depois de .Interior.Color = consigo fazer tudo funcionar em apenas uma rotina?
Se todas as celulas da planilha não estão coloridas e você quiser utilizar das cores que você definiu na sua rotina e utilizar somente uma rotina, o ideal é definir variaveis e acrescentar uma matriz de cores, desta forma aproveitando a rotina do pfarias fiz uma adaptação, teste e veja se é isto:

Sub VeseFunciona2()
Application.ScreenUpdating = False
'Se quiser colocar inserir mais itens é só colocar aqui em baixo
'Se acrescentar mais itens tem de alterar tambem o numero da matrz (9) e cor (5)
Dim Mtz(9) 'matriz com 9 itens
Dim sCor(5) 'matriz das 5 cores

'Matriz dos resultados
 Mtz(1) = "AGUARDANDO RETORNO OP"       '= sCor(1)
 Mtz(2) = "CONCLUIDO MOT1"              '= sCor(2)
 Mtz(3) = "CONCLUIDO MOT2"              '= sCor(3)
    
    'Mtz 4 a 6 são as mesmas cores
     Mtz(4) = "CONTATADO, MAS NÃO OP"   '= sCor(4)
     Mtz(5) = "NÃO ATENDE OU AVISO"     '4= sCor(4)
     Mtz(6) = "SEM CONTATO"             '= sCor(4)
        
        'Mtz 7 a 9 são as mesmas cores
         Mtz(7) = "FORA DE ÁREA DE SERVIÇO" '= sCor(5)
         Mtz(8) = "TEL DE TERC"             '= sCor(5)
         Mtz(9) = "TEL FORA DE USO OP"      '= sCor(5)

'Tabela de cores de preenchimento
sCor(1) = 10092543
sCor(2) = 16763904
sCor(3) = 6736896
sCor(4) = 49407
sCor(5) = 5263615

    For y = 1 To UBound(Mtz)
        For x = 1 To Application.CountIf(Cells, Mtz(y))
            Cells.Find(what:=Mtz(y), After:=ActiveCell, LookIn:=xlFormulas _
                , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False).Activate
            
            'Colorir conforme a tabela de cores e resultado
            Select Case y
                Case 1
                    ActiveCell.Offset(0, -3).Range("A1:D1").Interior.Color = sCor(1)
                Case 2
                    ActiveCell.Offset(0, -3).Range("A1:D1").Interior.Color = sCor(2)
                Case 3
                    ActiveCell.Offset(0, -3).Range("A1:D1").Interior.Color = sCor(3)
                Case 4 To 6
                    ActiveCell.Offset(0, -3).Range("A1:D1").Interior.Color = sCor(4)
                Case 7 To 9
                    ActiveCell.Offset(0, -3).Range("A1:D1").Interior.Color = sCor(5)
            End Select
        Next
    Next

    Application.ScreenUpdating = True

    MsgBox "Concluido!", vbInformation
End Sub
 
Postado : 20/08/2015 8:32 pm
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Mauro Coutinho boa noite,

Obrigado por sua costumeira ajuda e pela explicação detalhada.
Testei a sua macro e está conforme a minha necessidade.
Aproveito para agradecer o pfarias também.

Saudações.

 
Postado : 20/08/2015 9:10 pm