Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por Leonardo7
Posts
#47116
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
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por Jimmy
Avatar
#47117
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
Por Leonardo7
Posts
#47122
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.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord