Notifications
Clear all

Gerar códigos a cada novo cadastro

27 Posts
2 Usuários
0 Reactions
3,428 Visualizações
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

Olá, Tenho uma planilha onde lanço novos cadastros diariamente, e gostaria de saber como gerar um código pra esse cadastro com as seguintes condições.
A coluna A é responsável pelos códigos e as outras pelo restante.
Então como eu faço pra se a célula da coluna B for diferente de vazio, aparecer na coluna A um número subsequente do maior já preenchido ?

Detalhe, os nomes da coluna B são organizados em ordem alfabética, portanto, os números que ficam na coluna A referentes ao nomes, ficam bagunçados.

 
Postado : 12/04/2013 6:17 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!!

Disponibilize seu arquivo compactado!!

Att

 
Postado : 12/04/2013 6:48 pm
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

Os cadastros são feitos na guia Banco.

 
Postado : 12/04/2013 6:54 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

No seu exemplo, para incluir a numeração do codigo pode-se utlizar:
ws.Cells(iRow, 1).Value = iRow-1.
Porem não entendi: "os nomes da coluna B são organizados em ordem alfabética";
A inclusão de novos nomes é feita na sequencia (cada inclusão é adicionada no final do cadastro), não há ordem alfabvetica.
Se "a organização" e feita a posterior e manualmente, basta não incluir a coluna "A" nessa operação, ou não é isso?

 
Postado : 13/04/2013 4:57 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia Paulo

Vc postou no local errado, por este motivo estou movendo teu tópico para o subfórum VBA & Macro.

Um abraço.

 
Postado : 13/04/2013 5:52 am
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

Bom dia Patropi
Na verdade minha intenção era solucionar com formulas mesmo =D
Tinha pensado em algo do tipo : Usaria a função Máximo na N2 =Máximo(A:A), ai saberia qual foi o último código lançado independente da posição.
Depois faria na coluna a o seguinte: =SE(B158<>"";(N2)+1;"").
Mas dá uma referência circular...

 
Postado : 13/04/2013 8:03 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia Paulo

Pra falar a verdade eu nem tinha examinado a tua planilha, pois a resposta do Reinaldo com uma linha de código em VBA e mais os botões de macro na primeira planilha, julguei que era necessário macro.

Experimente copiar e colar esta fórmula na célula A2 da planilha Banco e arrastar para as demais linhas.

=SE(B2<>"";MÁXIMO($A$1:A1)+1;"")

Dê retorno.

Se a resposta for essa eu retorno o tópico para Fórmulas & Funções.

Um abraço.

 
Postado : 13/04/2013 8:14 am
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

No seu exemplo, para incluir a numeração do codigo pode-se utlizar:
ws.Cells(iRow, 1).Value = iRow-1.

Muito obrigado pela Funciona perfeitamente, já adicionei ao meu projeto :D

Porem não entendi: "os nomes da coluna B são organizados em ordem alfabética";
A inclusão de novos nomes é feita na sequencia (cada inclusão é adicionada no final do cadastro), não há ordem alfabvetica.
Se "a organização" e feita a posterior e manualmente, basta não incluir a coluna "A" nessa operação, ou não é isso?

Isso mesmo, a organização é feita manualmente. Há uma macro que faça esse procedimento?

Desde já muito obrigado.

 
Postado : 13/04/2013 8:19 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Pode-se utilizar conforme a sub ordena abaixo, e aciona-la a cd inclusão de registro. (na ultima linha do codigo de inclusão)
...
MsgBox "Cadastro realizado com sucesso.", vbDefaultButton1, "C A D A S T R O"
Call Ordena
end sub

Private Sub Ordena()
Dim lRow As Long
lRow = Cells(Cells.Rows.Count, "B").End(xlUp).Row
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    ActiveWorkbook.Worksheets("Banco").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Banco").Sort.SortFields.Add Key:=Range("B2"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Banco").Sort
        .SetRange Range("B2:N" & lRow)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
 
Postado : 13/04/2013 9:06 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Eu não sei se eu entendi, mas veja o anexo, foi criado uma UDF

Att

 
Postado : 13/04/2013 9:41 am
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

Patropi, AlexandreVBA, Reinalado
Vcs são simplesmente geniais! Sempre precisos nas resposta
Muito obrigado mesmo :D

 
Postado : 13/04/2013 1:05 pm
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

Comecei minha planilha mais ou menos no meio de março, tinha só uma ideia de como poderia ser feita, mas nenhuma noção de VBA, graças ao espirito solidário de vcs ela já esta quase terminada.
Mais uma vez muito obrigado

 
Postado : 13/04/2013 1:17 pm
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

Amigos ,
só pra terminar, como faço pra manter todos os comandos todos a plan 1 sem que troque de planilha.
O único comando que compre todo o processo sem sair da plan1 é o cadastrar os outros pulam pra plan Banco.

 
Postado : 13/04/2013 1:36 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Paulo, pra o que pretende, a maneira de se referir/definir as planilhas devem ser modificados. O metodo Select, pressupoe a seleção inicial da planilha referida, por isso é que a mesma fica em evidencia.
No seu modelo alterei os FormCadastro e Busca, veja se lhe atende

 
Postado : 14/04/2013 7:49 am
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

Reinaldo;

Ual!!! ficou simplesmente perfeito!
Até a combobox se auto completa com apenas algumas palavras, exatamente como eu pretendia deixar nos finalmente!

Agora, o pessoal vai ficar meio assustados quando o cadastro 162, e 163 vierem visitar o clube, afinal são os X-men! :D
Hahahahahahaha!

 
Postado : 16/04/2013 12:14 pm
Página 1 / 2