Notifications
Clear all

Codigo em botão pra ordenar dados. S.O.S 😛

17 Posts
2 Usuários
0 Reactions
2,833 Visualizações
(@marciojr)
Posts: 146
Estimable Member
Topic starter
 

Gente,

S.O.S :shock:

Possuo um botão adicionado encima da celula S5, e gostaria programa-lo com uma rotina para ordenar os dados na tabela, porem ordenar a partir da coluna H, onde é apresentado o titulo "Estaca". Gostaria também que ela funcionasse ordenando também os dados quando aplicado filtros para refinar os dados, por exemplo:
Filtrar a coluna "G"(Lado) para "Esquerdo" e depois acionar o botão para ordenar os dados filtrados.

Exemplo Sem filtro e sem acionar o botão para ordenar: :ugeek:
Lado Estaca

Direito 1821
Esquerdo 2020
Direito 2109
Direito 1125
Esquerdo 1125

Exemplo Com filtro e acionado o botão para ordenar: :mrgreen:

Lado Estaca

Esquerdo 1125
Esquerdo 2020

Segue em anexo a planilha. :roll:

 
Postado : 30/04/2014 2:02 pm
themrl16
(@themrl16)
Posts: 60
Trusted Member
 

Boa tarde Márcio!

Segue em anexo o arquivo modificado. Por favor, verifique se a macro que eu criei auxilia você neste caso.
Observe que ela classifica os dados duas vezes (Uma na coluna "Estaca" do maior para menor, e na sequência classifica o Lado do Maior para o Menor).

Abraços,

Murilo.

Leia as REGRAS
Utilize arquivos COMPACTADOS
PESQUISE
AGRADEÇA clicando na mãozinha ao lado da ferramenta citar.
Marque o tópico como [Resolvido], clicando no ao lado do botão citar.

Abraços,

Murilo L
------------
e-mail: [email protected]
skype: fareva_mlima

 
Postado : 30/04/2014 2:13 pm
(@marciojr)
Posts: 146
Estimable Member
Topic starter
 

É exatamente oque eu preciso. Obrigado mesmo :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

Esqueci de dizer que precisava também, que apos utilizar o filtro no "Lado" e ordenar as "Estacas", que seja inserida uma formatação condicional, onde sera preenchido em vermelho a estaca da coluna H, sempre que ela for < (Menor) a Estaca acima na coluna J.

Tipo essa sintaxe:

SE H8 < J7 = FORMATAR CÉLULA H8 EM VERMELHO.

Consegui no menu formatação condicional do Excel fazer esta gambiarra, porem ao filtrar e ordenar os valores, ele mantem o vinculo com as células antes desordenadas. a formatação condicional não entende que os valores estão posicionados em lugares diferentes.

É possivel de alguma maneira resolver meu problema ? :shock: :roll: :? :( :o

 
Postado : 30/04/2014 4:49 pm
(@marciojr)
Posts: 146
Estimable Member
Topic starter
 

Nada ?

 
Postado : 06/05/2014 7:35 am
themrl16
(@themrl16)
Posts: 60
Trusted Member
 

Bom dia Márcio!

Desculpa a demora para responder. Estive ausente do fórum nos últimos dias em viagem e seu tópico acabou ficando para trás. Agora que vc respondeu eu pude ver que o assunto ficou pendente.
Por favor, verifique o anexo que está nessa planilha. Eu criei uma formatação condicional que atende o seu caso, e será reaplicada sempre que a planilha for filtrada/ordenada (como a formatação é deletada do intervalo na coluna H, não haverá vínculos anteriores).

Pode ser que a fórmula que eu criei não seja a mesma que você precisa. Se for esse o caso, basta alterar a Sub Formatacao e informar a fórmula na propriedade Formula1:="xxx"
Se vc desejar uma cor diferente, altere a propriedade .Color e informe o valor numérico que represente a cor desejada (no caso da vermelha que foi aplicada, é a 255... se vc tiver dúvidas na cor, basta criar uma macro com o assistente automático mudando para a cor desejada, e o respectivo código será gerado).

Abraços e à disposição para quaisquer necessidades de modificar seu arquivo,

Murilo.

Leia as REGRAS
Utilize arquivos COMPACTADOS
PESQUISE
AGRADEÇA clicando na mãozinha ao lado da ferramenta citar.
Marque o tópico como [Resolvido], clicando no ao lado do botão citar.

Abraços,

Murilo L
------------
e-mail: [email protected]
skype: fareva_mlima

 
Postado : 06/05/2014 8:43 am
(@marciojr)
Posts: 146
Estimable Member
Topic starter
 

Cara,

era isso que eu precisava, marcar em vermelho quando o valor for menor for menor do que o ultimo da coluna acima. a sintaxe esta certa. Porem quando clico no botão ordenar, ele esta formatando células vazias. tente abrir a planilha e acionar o botão de ordenar pra vc entender :roll:

Ele esta achando que o valor ainda esta naquela célula vazia e formata ela ? :?:

 
Postado : 06/05/2014 11:06 am
themrl16
(@themrl16)
Posts: 60
Trusted Member
 

Eu fiz o teste alterando os valores, aplicando filtro, incluindo linhas... mas a formatação aparentemente está correta, e a macro não está formatando em vermelho células vazias (fica igual ao que está na imagem abaixo).

Vc chegou a baixar o anexo da última mensagem que eu enviei? Disponibilizei ele novamente nesta mensagem, por favor utilize o filtro dele e caso suas células em branco estejam formatadas disponibilize o arquivo salvo dessa forma para que eu possa analisar.

PS: Eu observei que o filtro não está com range dinâmico (se eu incluo mais linhas, ele não está ordenando as mesmas. Eu corrigi essa condição no anexo dessa mensagem)

Segue abaixo o código utilizado, caso não consiga baixar o novo arquivo:

Sub Ordenar()
Dim iLastRow As Long

    iLastRow = ActiveSheet.UsedRange.Rows.Count 'Conta número de linhas preenchidas na Aba em aberto

    With ActiveWorkbook.Worksheets("Memória").Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("H7:H" & iLastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SortFields.Add Key:=Range("J7:J" & iLastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("A7:Q" & iLastRow)
        .Header = xlGuess
        .Orientation = xlTopToBottom
        .Apply
    End With
    
    Call Formatacao 'Chama o método que reaplica a formatação condicional
End Sub


Sub Formatacao()

With Range("H8:H999") 'Invervalo que será formatado
    .FormatConditions.Delete 'Remove a formatação condicional anterior
    
    'Reaplicando a formatação:
    '-----------------------------------------------------------------------------
    'Fórmula da formatação: =E($H8<>"";$H8<$J7)
    .FormatConditions.Add Type:=xlExpression, Formula1:= _
           "=E($H8<>"""";$H8<$J7)"
    .FormatConditions(.FormatConditions.Count).SetFirstPriority
    With .FormatConditions(1)
        .Interior.Color = 255
        .StopIfTrue = True
    End With
    '-----------------------------------------------------------------------------
End With

End Sub

Obrigado!

Abraços,

Murilo.

Leia as REGRAS
Utilize arquivos COMPACTADOS
PESQUISE
AGRADEÇA clicando na mãozinha ao lado da ferramenta citar.
Marque o tópico como [Resolvido], clicando no ao lado do botão citar.

Abraços,

Murilo L
------------
e-mail: [email protected]
skype: fareva_mlima

 
Postado : 06/05/2014 11:46 am
(@marciojr)
Posts: 146
Estimable Member
Topic starter
 

Tenta abrir a planilha, e voce vai ver que esta em vermelho a ultima validação, por isso ele pinta a celula de vermelho.
Depois tenta clicar no botão ordenar estacas, sem utilizar nenhum filtro.
Voce vai ver que ele manda a celula formatada de vermelho lá pra baixo, em uma celula vazia.
Entendeu ? :(

Obs: Coloquei um exemplo com valores simples em "decimal" pra simplificar, porem na planilha com os valores maiores o problema acontece do mesmo jeito. :|

 
Postado : 07/05/2014 5:27 am
themrl16
(@themrl16)
Posts: 60
Trusted Member
 

Bom dia Márcio!

Eu fiz conforme vc citou. Cliquei no botão Ordenar por Estaca Inicial e ele inverteu as células como deveria (a que estava com a estava inicial 7 subiu e a 8 desceu). Como 8 era menor que a estaca final anterior (9), ele pintou a célula de vermelho.
Porém, não consegui identificar células vazias que continuam em branco (pelo menos no meu Excel ele realizou a formatação após o click normalmente). Poderia verificar se o arquivo no anexo desta mensagem procede como deveria?

Se o seu arquivo não está dessa forma (ele formata células vazias em vermelho), por favor, disponibilize um novo arquivo que esteja dessa forma.

Obrigado!

Murilo.

Leia as REGRAS
Utilize arquivos COMPACTADOS
PESQUISE
AGRADEÇA clicando na mãozinha ao lado da ferramenta citar.
Marque o tópico como [Resolvido], clicando no ao lado do botão citar.

Abraços,

Murilo L
------------
e-mail: [email protected]
skype: fareva_mlima

 
Postado : 07/05/2014 6:17 am
(@marciojr)
Posts: 146
Estimable Member
Topic starter
 

Da uma olhada no video que eu te mandei e voce vai me entender. :roll:

https://www.youtube.com/watch?v=ykpVw3x ... e=youtu.be

 
Postado : 07/05/2014 8:44 am
themrl16
(@themrl16)
Posts: 60
Trusted Member
 

Hmm é muito estranho, eu faço exatamente a mesma coisa e as células vazias não ficam formatadas dessa forma. Fiz até um teste em máquina virtual com o e não ficou dessa forma...
Por favor, é possível vc verificar em Formatação Condicional -> Gerenciar Regras se a fórmula =E($H8<>"";$H8<$J7) ou o intervalo de aplicação =$H$8:$H$999 é alterado após clicar no botão de Ordenar? O correto é ele manter todas as células que possuem a formatação dessa forma, mas gostaria de saber se após vc rodar a macro seu Excel está mudando a fórmula ou o intervalo, pois aparentemente é a única explicação.

@Vou bolar uma forma de criar toda a formatação através de macro (sem a utilização da formatação condicional) e em breve posto a solução para você em um novo post.

Abraços,

Murilo.

Leia as REGRAS
Utilize arquivos COMPACTADOS
PESQUISE
AGRADEÇA clicando na mãozinha ao lado da ferramenta citar.
Marque o tópico como [Resolvido], clicando no ao lado do botão citar.

Abraços,

Murilo L
------------
e-mail: [email protected]
skype: fareva_mlima

 
Postado : 07/05/2014 10:18 am
themrl16
(@themrl16)
Posts: 60
Trusted Member
 

Márcio!

Por favor, verifique o novo arquivo anexado nesta mensagem.

Observe que eu modifiquei toda a Sub Formatacao, que agora formata linhas da coluna H validando linha a linha e considerando se ela está vazia ou não, evitando que o problema apresentado anteriormente ocorra.
Ela é ativada sempre que uma célula for alterada na aba Memória através do evento Worksheet_Change e também quando o usuário clicar no botão de ordenar.

Caso seja necessário realizar novas modificações, por favor nos informe.

Abraços,

Murilo.

Leia as REGRAS
Utilize arquivos COMPACTADOS
PESQUISE
AGRADEÇA clicando na mãozinha ao lado da ferramenta citar.
Marque o tópico como [Resolvido], clicando no ao lado do botão citar.

Abraços,

Murilo L
------------
e-mail: [email protected]
skype: fareva_mlima

 
Postado : 07/05/2014 10:47 am
(@marciojr)
Posts: 146
Estimable Member
Topic starter
 

Não deu pra entender o erro que esta ocorrendo ?
O Excel manda a formatação pra uma celula vazia mais pra baixo, e posteriormente quando altero os valores na lista, ele não formata mais.

 
Postado : 08/05/2014 12:10 pm
themrl16
(@themrl16)
Posts: 60
Trusted Member
 

Boa tarde Márcio!

Desculpe a pergunta mas vc chegou a verificar o último anexo que eu enviei?. Por favor, verifique o arquivo que enviei no penúltimo post meu no tópico, às 13:47... como ele não cria fórmulas de formatação condicional e avalia células vazias, ele deve atender o seu caso.
Disponibilizei o anexo do arquivo novamente neste post também.

Leia as REGRAS
Utilize arquivos COMPACTADOS
PESQUISE
AGRADEÇA clicando na mãozinha ao lado da ferramenta citar.
Marque o tópico como [Resolvido], clicando no ao lado do botão citar.

Abraços,

Murilo L
------------
e-mail: [email protected]
skype: fareva_mlima

 
Postado : 08/05/2014 12:15 pm
(@marciojr)
Posts: 146
Estimable Member
Topic starter
 

Desculpe-me, pois não notei que o tópico tinha criado a pagina 2 e achei que não tivesse me respondido, :lol:
Enfim,

Agora ele esta formatando somente as células preenchidas direitinho, porem quando utilizo um filtro para mostrar apenas as linhas referentes ao Lado "Esquerdo", veja que ele não atualiza a Rotina de Formatação Condicional e mantem a célula H11 em vermelho.

Talvez nem seja possível fazer uma validação utilizando filtros de visualização. Talvez seja possível somente com outro botão com uma macro para ordenação por "Lado" e logo em seguida ordenar os números.

Oque voce sugere, se for necessario outro botão, poderia cria-lo pra mim ? :o
Agradeço desde já a sua atenção :ugeek:

 
Postado : 09/05/2014 5:09 am
Página 1 / 2