Notifications
Clear all

Autonumeração

7 Posts
2 Usuários
0 Reactions
1,840 Visualizações
(@edilsonjc)
Posts: 39
Trusted Member
Topic starter
 

Boa noite a todos.
Procurei aqui no fórum e não encontrei algo similar ao que estou precisando sobre auto numeração de coluna no excel via VBA.
A ideia solicitada está dentro da planilha em anexo.

 
Postado : 10/12/2016 7:52 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Edislon, antes de continuarmos gostaria que tirasse algumas duvidas :

Você está utilizando o Evento "SelectionChange", então :

Como será alterado o Valor de "G1", manualmente ou atraves de alguma rotina ? Se for manualmente, toda vez que Selecionar G1 a rotina será executada, e após digitar 0 ou 1 ela será executada novamente, acho inviável, pois estaremos executando sempre, a não ser que coloquemos uma condição de Target Adress para ser executada somente se for alterado valores na coluna B.

Conforme seu modelo na coluna B até a linha 7 está numerado de 1 a 7, onde em G1 devia estar o nº 1 e a partir da linha 8 recomeçamos a numeração que vai até linha 11 devido em G1 estar com o nº 0. Então pergunto, da forma que está seu modelo me baseando na Coluna D, ao mudarmos o valor em G1 para 1 sua rotina irá renumerar todos até a linha 12, é isto ou tem de manter a numeração da forma que está e recomeçar do 1 a partir da linha 12 ?

[]s

 
Postado : 10/12/2016 9:50 pm
(@edilsonjc)
Posts: 39
Trusted Member
Topic starter
 

Na verdade isso é apenas um exemplo. A célula G1 irá mudar apenas uma vez no ano.
Estou elaborando um formulário que deve ser enumerado, e quando iniciar um novo ano a numeração deverá começar do 01 e aumentando de acordo com um novo formulário for criado,as anteriores não devem ser alteradas , porém já tentei diversas formas e até agora sem sucesso. Mais a coluna B deverá ser sempre preenchida. Também não é necessário usar "SelectionChange", posso adaptar um Módulo.

 
Postado : 11/12/2016 8:21 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Explicou mas ainda não foi o suficiente,lembre-se que você sabe o que quer, tem tudo em mente e nós temos de ir por suposições, sua explicação agora foi totalmente diferente da inicial, agora já irá utilizar um formulário, ele será só para numerar ou será para lançar na coluna B tambem ?

Para resumir, pode-se fazer de várias formas, mas depende de como serão feitos os lançamentos, de como estão os dados na planilha, qual a sistemática que irá utilizar, os passo a passo, mas por ora segue uma rotina básica, onde iremos comparar o ano da data no PC com o ano informado ou diretamente na rotina ou buscando na celula G1, mas é só uma forma básica.

Sub numera_por_ano()
    Dim UL As Integer
    Dim sAnoAtual As String
    Dim sAnoNovo
    
    'Ano Atual
    sAnoAtual = "2016"
    'ou
    'sAnoAtual = Range("G1").Value

    'Verifica o Ano na data do PC
    sAnoNovo = DatePart("yyyy", Date)
    
    UL = Range("B" & Rows.Count).End(xlUp).Row

    If sAnoNovo = sAnoAtual Then
        
        'Se tiver digitado antes na coluna B
        'Numeramos a mesma linha
        Cells(UL, 1) = UL
        
        'Se a digitação for depois, utilize esta linha, numeramos
        'a linha abaixo da contagem de dados na coluna B
        'Cells(UL + 1, 1) = UL
        
    Else
    
        Cells(UL + 1, 1) = 1
    
    End If

End Sub

[]s

 
Postado : 11/12/2016 9:21 am
(@edilsonjc)
Posts: 39
Trusted Member
Topic starter
 

Fiz o teste usando seu código.
Quando o ano está em 2016 ele funciona de boa. Quando alterei a data do computador para 2017 ele pulou uma linha e ficou com o numero 1 (era para continuar na mesma linha) após a inserção de valor no campo B uma linha abaixo, ele conta a linha novamente (exemplo em anexo:valor 13) e era para continuar a numeração, ou seja 2, e assim sucessivamente.

 
Postado : 11/12/2016 10:43 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Edilson, se analisar a rotina, no bloco IF antes do Else tem duas instruções comentadas, uma se o valor for digitado antes e outra se não digitar antes, ou seja a

'Se tiver digitado antes na coluna B
'Numeramos a mesma linha

Cells(UL, 1) = UL

'Se a digitação for depois, utilize esta linha, numeramos
'a linha abaixo da contagem de dados na coluna B

'Cells(UL + 1, 1) = UL- - esta, etá desabilitada

quando adicionei a condição faltou fazer o mesmo após o Else, mas como disse que irá digitar antes, é só alterar a instrução ;
Cells(UL + 1, 1) = 1 para
Cells(UL, 1) = 1

abraços

Se a resposta foi últil para você, por gentileza, clique na mãozinha ao lado direito da sua tela. No canto superior.

 
Postado : 11/12/2016 1:32 pm
(@edilsonjc)
Posts: 39
Trusted Member
Topic starter
 

Já tinha corrigido, Apanhei na mudança do ano e com base no seu código fiz algumas alterações e funcionou.
Obrigado Mauro.

 
Postado : 13/12/2016 7:15 pm