Notifications
Clear all

macro Lenta formatacao condicional

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

Boa Tarde!

Tenho uma planilha com 1600 linhas e 81 colunas. na Primeira coluna tenho os cadastros de produtos e nas outras colunas os preços de fornecederos em cada coluna, sendo que a ultima coluna me retorna o menor preço. Preciso de uma formataçao condicional que pinte de amarelo a celula que for igual a celula que tem o menor preço. tenho o seguinte codigo:

Sub atual()
Dim N As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
N = 3
Do While N < 1600
Range(Cells(N, "C"), Cells(N, "BN")).Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="=$BU$" & N
N = N + 1
Loop
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Porem quando faço esse loop com 400 registros leva 20 segundo, com 800 registros leva 1:25, e com 1600 registros simplesmente trava, e o consumo de de memoria aumento consideravelmente.Alquem poderia me ajudar?

 
Postado : 19/11/2013 10:46 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Minha primeira pergunta é:

Se vc está usando formatação condicional, porque fazer isso via macro? Ou seja, porque ja não deixa a planilha com a formatação condicional?

Em todo caso, o motivo de estar lento é que vc está criando, a meu ver - desnecessariamente, uma regra de formatação condicional para cada linha.

Veja esse código abaixo:

Sub atual_GT()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
    Range("C3:BN1600").Select
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
        Formula1:="=$BU3"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Bold = True
        .Italic = False
    End With
   Selection.FormatConditions(1).Interior.Color = vbYellow
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Creio que ele faça a mesma coisa, mas com uma formatação condicional única para todo o range que vc precisa.

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 19/11/2013 8:07 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

O gtsalikis tem toda razão. Veja como com 1 fórmula em 1 área demarcada vc mata o problema.

Abs,

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

 
Postado : 19/11/2013 8:48 pm
 Joas
(@joas)
Posts: 11
Active Member
Topic starter
 

Minha primeira pergunta é:

Se vc está usando formatação condicional, porque fazer isso via macro? Ou seja, porque ja não deixa a planilha com a formatação condicional?

Em todo caso, o motivo de estar lento é que vc está criando, a meu ver - desnecessariamente, uma regra de formatação condicional para cada linha.

Veja esse código abaixo:

Sub atual_GT()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
    Range("C3:BN1600").Select
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
        Formula1:="=$BU3"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Bold = True
        .Italic = False
    End With
   Selection.FormatConditions(1).Interior.Color = vbYellow
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Creio que ele faça a mesma coisa, mas com uma formatação condicional única para todo o range que vc precisa.

Bom Dia gtsaliki!

Como diria um amigo meu: vcs sao monstros no Excel!. Tanto o seu codigo como simplesmente uma formula como a dica do "mandrix.xls" resolve o meu problema. Estava usando macro porque o usuario incluia novas linhas e como eu usava uma regra de formataçao pra cada linha, essa nova linha ficava sem a formataçao. Ha tempo precisava dessa soluçao, se soubesse teria me cadastrado nesse Forun antes. Valeu mesmo!,

 
Postado : 20/11/2013 6:31 am
 Joas
(@joas)
Posts: 11
Active Member
Topic starter
 

O gtsalikis tem toda razão. Veja como com 1 fórmula em 1 área demarcada vc mata o problema.

Abs,

Bom dia "MANDRIX.xls"!

Simplesmente fantastico. resolveu meu problema. Valeu mesmo!

 
Postado : 20/11/2013 6:34 am