Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por FJunior 03 Nov 2019 às 01:08
Membro 1 Estrela
Mensagens: 25
Reputação: 2
#49894
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!
Apenas usuários registrados podem ver ou baixar anexos.
Por osvaldomp 03 Nov 2019 às 12:17
Membro 5 Estrelas
Mensagens: 1408
Reputação: 696
#49896
Experimente:

Código: Selecionar todosSub OrdenaColunaB()
 Range("B9:B" & Cells(Rows.Count, 2).End(4).Row).Sort Key1:=[B9], Order1:=xlAscending
End Sub
Por FJunior 03 Nov 2019 às 15:58
Membro 1 Estrela
Mensagens: 25
Reputação: 2
#49898
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.
Por osvaldomp 03 Nov 2019 às 17:08
Membro 5 Estrelas
Mensagens: 1408
Reputação: 696
#49900
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 todosSub 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 todosRange("B9").Select      'Seleciona a célula "B9"

coloque esta
Código: Selecionar todosRenumeraColunaB
Por FJunior 10 Nov 2019 às 00:19
Membro 1 Estrela
Mensagens: 25
Reputação: 2
#50104
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!
Apenas usuários registrados podem ver ou baixar anexos.
Por osvaldomp 10 Nov 2019 às 12:12
Membro 5 Estrelas
Mensagens: 1408
Reputação: 696
#50108
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.
Por FJunior 10 Nov 2019 às 23:13
Membro 1 Estrela
Mensagens: 25
Reputação: 2
#50117
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!!!
Apenas usuários registrados podem ver ou baixar anexos.
Por FJunior 10 Nov 2019 às 23:42
Membro 1 Estrela
Mensagens: 25
Reputação: 2
#50118
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
Por osvaldomp 11 Nov 2019 às 21:09
Membro 5 Estrelas
Mensagens: 1408
Reputação: 696
#50157
Experimente uma cópia do código abaixo no lugar do existente.

Código: Selecionar todosSub 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
Por FJunior 12 Nov 2019 às 19:59
Membro 1 Estrela
Mensagens: 25
Reputação: 2
#50188
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
Apenas usuários registrados podem ver ou baixar anexos.
Por osvaldomp 13 Nov 2019 às 01:07
Membro 5 Estrelas
Mensagens: 1408
Reputação: 696
#50198
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