Ir ao conteúdo
  • Cadastre-se

Excel Macro - Ordenar linhas conforme Classificação


Ir à solução Resolvido por Visitante,

Posts recomendados

Bom dia Pessoal,

 

Andei pesquisando alguns tópicos anteriores para me ajudar na minha planilha, mas não consegui colocá-la para rodar de jeito nenhum. Espero que alguém possa me ajudar. 

A situação é a seguinte: gostaria de ordenar as linhas das planilhas de acordo com a coluna PRIORIDADE, na ordem crescente (1,2,3 - cima para baixo). Vou anexar a planilha e abaixo segue o código que iniciei (sem resultado):

 

Private Sub Worksheet_Change(ByVal Sh As Object, ByVal Target As Range)
If Not (Application.Intersect(Worksheets(1).Range("B6:K500"), Target) Is Nothing) Then
Classificar
End If
End Sub
Private Sub Classificar()
  Worksheets(1).Range("B6:K500").Sort Key1:=Worksheets(1).Range("B6"), Order1:=x1Ascending, _
  Header:=xlYes

End Sub

 

Desde já agradeço a ajuda. Agenda - Clientes 2.rar

Link para o comentário
Compartilhar em outros sites

Instale uma cópia do código abaixo no módulo da planilha AGENDA.

Private Sub Worksheet_Change(ByVal Target As Range)
 If Application.CountA(Cells(Target.Row, 2).Resize(, 10)) < 10 Then Exit Sub
 [B6].Sort Key1:=[B5], Order1:=xlAscending
End Sub

obs. o código irá ordenar após o preenchimento de todas as células de uma mesma linha em B:K. Se você quiser ordenar após preencher somente as células de preenchimento obrigatório então informe quais, para ajustes no código.

Link para o comentário
Compartilhar em outros sites

Obrigada. Vou ler e seguir as orientações. 🙂

adicionado 9 minutos depois

Antes de finalizar o tópico, gostaria de mais uma ajuda com o mesmo código.

Fiz algumas alterações a pedido da pessoa que está utilizando a planilha: coloquei para organizar por data e não mais por prioridade. Só que agora ela quer que além de organizar por data, ao apagar o conteúdo da célula prioridade, a linha seja arrastada para o final da planilha. Hoje o código está assim:

 

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column <> 11 Then Exit Sub
 [B5].Sort Key1:=[B5], Order1:=xlAscending, Header:=xlYes
End Sub
 

 

Agenda - Clientes.rar

Link para o comentário
Compartilhar em outros sites

  • Solução
11 horas atrás, Tatyne Borges disse:

 ... ao apagar o conteúdo da célula prioridade, a linha seja arrastada para o final da planilha.

 

Considerei que você quis dizer para o final da tabela.

Veja se essa alteração não irá interferir com as formatações da tabela.

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim r As Long
  If Target.Column <> 11 Then Exit Sub
  If Target.Value <> "" Then
   [B5].Sort Key1:=[B5], Order1:=xlAscending, Header:=xlYes
  Else:
   r = Target.Row: Cells(Target.Row, 2).Resize(, 10).Copy Cells(Rows.Count, 2).End(3)(2)
   Rows(r).Delete
  End If
End Sub

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!