Página 1 de 1

Excel VBA - Formatação de célula

Enviado: 21 Ago 2019 às 00:11
por Leonardo7
Prezados amigos,

Estou precisando melhorar uma parte do meu código. Conforme o código abaixo a minha macro formata as celulas no Range("H3:H100") e Range("A3:A100"), mas gostaria de criar um código para ela formatar somete as celulas com valor, pois neste formato quando a tabela tem menos de 100 itens o restante da tabela fica pintado deixando um visual amador. Segue a planilha para teste. O nome do módulo com a macro é FormataRelatorioMódulo.
Código: Selecionar todos
'Pintar coluna Valor Pendente de cinza
  Range("H3:H100").Select
   With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -4.99893185216834E-02
        .PatternTintAndShade = 0
    End With

'Pintar coluna ID
 Range("A3:A100").Select
     With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.149998474074526
        .PatternTintAndShade = 0
    End With
    Selection.Font.Bold = True

Re: Excel VBA - Formatação de célula

Enviado: 21 Ago 2019 às 06:40
por Jimmy
Bom dia Leonardo,

Para saber qual é a última célula preenchida de uma coluna, por exemplo a "A", você usa a instrução abaixo:
LinFim = Range("A" & Rows.Count).End(xlUp).Row
Onde LinFim é o nome da variável, à sua escolha, que vai receber esse número de linha.
Esse comando, em português seria: "Partindo da última célula da coluna "A", em direção para cima, retorne o número da linha da primeira célula com preenchimento que encontrar".
Pelo teclado, esse comando corresponde a precionar a tecla END, e depois SETA PARA CIMA.

Se todas as colunas da planilha terminam na mesma linha, não precisa verificar cada coluna que for formatar. Defina LinFim por uma delas, e use esse mesmo valor para todas as colunas. Se as colunas terminarem em linhas diferentes, ai sim tem que executar para cada coluna.

Após isso, quando for formatar, usa da seguinte forma:
Em vez de usar Range("H3:H100").Select antes da formatação, use Range("H3:H" & LinFim).Select

Observo que se a planilha tem 80 linhas, por exemplo, é já está formatada, e posteriormente passa a ter 60, da linha 61 à 80 haverá formatação de linhas sem conteúdo. Por isso é importante retirar a formatação de onde não tem mais conteúdo.

Isso também vale para células vazias que não exibem a formatação, como por exemplo formatação de números como abaixo
Range("G3:G10000").Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
apesar de ser formatação não aparente, e não incomodar na estética, ela consome memória, logo, não é salutar formatar dez mil linhas apenas para o caso de que um dia possam ser usadas.

Em outras palavras, uma forma de manter tudo em ordem seria:
a) Localize a última linha com preenchimento
b) Formate apenas até aquela linha
c) selecione desde a coluna A da linha de baixo da última, até a coluna K da última linha da planilha (A e K no caso de sua planilha RELATÓRIO), e aplique o método .CLEAR, que remove conteúdo e formatação. Use Range("A" & LinFim+1 & ":K" & Rows.count).Clear

Jimmy San Juan

Excel VBA - Formatação de célula

Enviado: 21 Ago 2019 às 09:10
por Leonardo7
Muito obrigado meu amigo deu tudo certo. De um problema agora eu tenho várias soluções e melhorias com as suas dicas. Sou bem iniciante em VBA e conseguir aprender alguns conceitos com seus comentários.