Página 1 de 1

Macro para classificar coluna em crescente

Enviado: 02 Nov 2019 às 23:08
por FJunior
Boa noite. Estou fazendo uma planilha de cadastro de clientes, na qual as células da coluna "B" são numeradas automaticamente conforme as células correspondentes da coluna "C" são preenchidas com os nomes dos clientes. No entanto, estou precisando de uma macro que coloque a numeração das células da coluna "B" em ordem crescente novamente quando eu excluir o nome do cliente da célula correspondente (coluna "C"). Segue em anexo a planilha. Obrigado!

Re: Macro para classificar coluna em crescente

Enviado: 03 Nov 2019 às 10:17
por osvaldomp
Experimente:
Código: Selecionar todos
Sub OrdenaColunaB()
 Range("B9:B" & Cells(Rows.Count, 2).End(4).Row).Sort Key1:=[B9], Order1:=xlAscending
End Sub

Re: Macro para classificar coluna em crescente

Enviado: 03 Nov 2019 às 13:58
por FJunior
Oi Osvaldo. Obrigado pela ajuda. Eu não consegui fazer funcionar, ainda estou engatinhando no excel VBA, mas seria muito eu pedir pra vc colocar no projeto do arquivo que eu anexei para eu ver o que eu estou fazendo de errado? Obrigado mais uma vez.

Re: Macro para classificar coluna em crescente

Enviado: 03 Nov 2019 às 15:08
por osvaldomp
Olá, Junior.
Se entendi corretamente, a sua ideia é reorganizar a numeração da coluna B após executar o código que exclui um nome na coluna C. Se for isso então eu sugiro renumerar aquela coluna em lugar de ordenar. No seu exemplo atual há nove nomes em C e em B números de 1 a 9. Supondo que sejam excluídos três nomes, então segundo a sua ideia inicial de ordenar a coluna B (que já está ordenada ... ;) ), a situação passaria para seis nomes em C e 1 a 9 em B, ou seja, sobrariam três números sem nomes. Por essa razão eu sugiro limpar B e renumerar de acordo com a quantidade de nomes em C.
Se você quiser testar essa então ideia instale uma cópia do código abaixo em qualquer módulo.
Código: Selecionar todos
Sub RenumeraColunaB()
 Range("B9:B" & Cells(Rows.Count, 2).End(3).Row).Value = ""
 [B9] = 1: Range("B9").AutoFill Destination:=Range("B9:B" & Cells(Rows.Count, 3).End(3).Row), Type:=xlFillSeries
End Sub
Aí você poderá chamar o código acima no final do código do botão Excluir, conforme abaixo.
no lugar desta linha
Código: Selecionar todos
Range("B9").Select      'Seleciona a célula "B9"
coloque esta
Código: Selecionar todos
RenumeraColunaB

Re: Macro para classificar coluna em crescente

Enviado: 09 Nov 2019 às 22:19
por FJunior
Boa noite Osvaldo. Funcionou perfeitamente!
E se puder me ajudar em mais um detalhe ... Eu gostaria de retirar a planilha ("O:AA") da aba "Plan1" e colocá-la na aba "Plan3", mas não estou conseguindo alterar o comando do "Módulo 5" para que funcione corretamente. Segue planilha em anexo. Obrigado!

Re: Macro para classificar coluna em crescente

Enviado: 10 Nov 2019 às 10:12
por osvaldomp
FJunior escreveu: Eu gostaria de retirar a planilha ("O:AA") da aba "Plan1"
"retirar a planilha da aba" ? ~~~> :o :?: :?: :?: que língua é essa ?

e colocá-la na aba "Plan3",
No seu arquivo não existe Plan3 ;)

mas não estou conseguindo alterar o comando do "Módulo 5"
Qual comando ? De qual código ?
Com base na documentação da Microsoft uma ou mais planilhas formam um Arquivo Excel ou uma Pasta de Trabalho Excel. O nome de cada planilha está na guia da planilha, e as guias das planilhas ficam posicionadas junto ao rodapé da tela. Procure seguir essa nomenclatura, assim permitirá identificar a sua necessidade.

Re: Macro para classificar coluna em crescente

Enviado: 10 Nov 2019 às 21:13
por FJunior
Boa noite Osvaldo.
Desculpe pela minha falta de conhecimento, rsrsrs :oops: . Tudo que consegui fazer no excel até hoje foi devido a minha curiosidade, não tenho nenhum conhecimento na área e por isso sou muito grato por sua ajuda :) . Vou tentar explicar melhor. Eu recortei as colunas "O:AA" da Plan1 e colei em uma nova aba "Plan3", atualizei os comandos dos botões "Copiar" e "Limpar", mas não sei como fazer para atualizar o comando do botão "Clique aqui para iniciar a consulta" que está no Módulo 5. Segue em anexo a planilha com as alterações iniciais. Mais uma vez muito obrigado pela ajuda!!!

Macro para classificar coluna em crescente

Enviado: 10 Nov 2019 às 21:42
por FJunior
Este comando (Módulo 5) que eu preciso atualizar para as modificações que fiz na planilha:

Range("C8:M1924").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _
("P4:Z5"), CopyToRange:=Range("Plan1!Extract"), Unique:=False
Range("B9").Select

Re: Macro para classificar coluna em crescente

Enviado: 11 Nov 2019 às 19:09
por osvaldomp
Experimente uma cópia do código abaixo no lugar do existente.
Código: Selecionar todos
Sub ConsultaAvançada()
 Sheets("Plan1").Range("C8:M" & Sheets("Plan1").Cells(Rows.Count, 3).End(3).Row).AdvancedFilter Action:=xlFilterCopy, _
  CriteriaRange:=Sheets("Plan3").Range("B4:L5"), CopyToRange:=Range("Plan3!B8:L8"), Unique:=False
End Sub

Re: Macro para classificar coluna em crescente

Enviado: 12 Nov 2019 às 17:59
por FJunior
Boa tarde Osvaldo. Obrigado, funcionou perfeitamente. Porém, não é sempre que acontece, mas algumas vezes quando vou abrir o arquivo aparece uma mensagem de erro: "Erro em tempo de execução '1004': O método Select da classe Range falhou". E quando eu clico em depurar, me mostra:
Private Sub Workbook_Open()
frmCadastro.Show ' Tarjado em amarelo

End Sub

Re: Macro para classificar coluna em crescente

Enviado: 12 Nov 2019 às 23:07
por osvaldomp
FJunior escreveu: ... mas algumas vezes quando vou abrir o arquivo aparece uma mensagem de erro:...
O erro não tem relação com o código que passei. Ele ocorre se a planilha ativa não for a Plan1 ao salvar o arquivo, pois no evento Initialize do Form, que é disparado ao reabrir o arquivo, há um comando para selecionar a célula B9 daquela planilha e esse comando não se presta para selecionar uma célula que não seja da planilha ativa.

Para evitar o erro acrescente a linha em vermelho conforme abaixo.
Private Sub UserForm_Initialize()
Plan1.Activate
Plan1.Range("B9").Select

Re: Macro para classificar coluna em crescente

Enviado: 12 Nov 2019 às 23:51
por FJunior
Perfeito Osvaldo, agora está tudo funcionando muito bem. Muito obrigado pela ajuda.