Notifications
Clear all

Nr Encomenta = ANO + nr sequencial

5 Posts
2 Usuários
0 Reactions
1,016 Visualizações
(@avalente)
Posts: 36
Trusted Member
Topic starter
 

Boa tarde,
Numa tabela onde registo vários pedidos de encomendas, uso uma numeração sequencial de Ano + nº de encomenda da seguinte forma :
13-0001
13-0002
(…)
13-2245
13-2246
13-2247
13-2248
(…)
14-0001
14-0002
14-0003

Precisava da vossa ajuda para definir o nº de dígitos sequencias = 4 porque como esta atualmente, quando recomeçar a contagem de novo ele fica assim:
14-1
14-2
14-3

O segundo problema, era fazer a macro dar reset á sequencia sozinha, ou seja, quando entrar no novo ano e for inserir uma nova linha, ela automaticamente passar de 13 para 14 e recomeçar a sequencia do 0001
É possível?

Obrigado

 
Postado : 18/12/2013 11:21 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Experimente:

 
Postado : 18/12/2013 2:31 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Talvez uma outra forma.

Option Explicit

Sub Macro3()

    Dim StrNewEnc As String
    Dim PriorYear As String

    PriorYear = Left(Range("Tabela1").Cells(Range("Tabela1").Rows.Count, "B"), 2)
    If PriorYear <> Range("D3") Then
        Range("D4") = 0
    End If
    
    StrNewEnc = Range("D3") & "-" & Format(Range("D4") + 1, "0000")
    
 
    Range("Tabela1").Cells(Range("Tabela1").Rows.Count + 1, "B") = StrNewEnc

    Range("Tabela1").Cells(Range("Tabela1").Rows.Count, "B").Select
    Range("Tabela1").Cells(Range("Tabela1").Rows.Count, "A") = 50
    
'    Range("A10").Select
'    ActiveWorkbook.Worksheets("Folha1").ListObjects("Tabela1").Sort.SortFields. _
'        Clear
'    ActiveWorkbook.Worksheets("Folha1").ListObjects("Tabela1").Sort.SortFields.Add _
'        Key:=Range("Tabela1[[#All],[!]]"), SortOn:=xlSortOnValues, Order:= _
'        xlAscending, DataOption:=xlSortNormal
'    With ActiveWorkbook.Worksheets("Folha1").ListObjects("Tabela1").Sort
'        .Header = xlYes
'        .MatchCase = False
'        .Orientation = xlTopToBottom
'        .SortMethod = xlPinYin
'        .Apply
'    End With
    
    'procurar onde esta a nova linha inserida depois de ordenar
'    Columns("B:B").Select
'    Cells.Find(What:=StrNewEnc, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
'    xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True, SearchFormat:=False).Activate

    Range("D4") = Range("D4").Value + 1
    
End Sub

Att

 
Postado : 19/12/2013 7:22 am
(@avalente)
Posts: 36
Trusted Member
Topic starter
 

Boa tarde,
Peço desculpa pela demora em dar feedback e também, em parte por simplificar demasiado a tabela exemplo :roll:

Eu realmente não estava a contar com uma maneira completamente nova de inserir e ordenar a linha nova, por isso também me esqueci de mencionar que a ultima linha não é necessariamente a ultima encomenda inserida!!
Na mesma tabela, tenho as encomenda por produzir, ordenadas por, 1º por prioridades e 2º por data solicitada do mais antigo para o mais recente. Quando a encomenda é produzia, eu apago a prioridade (deixa de a ter) e insiro a data/hora de produção e essa segunda parte da tabela é ordenada precisamente por data de produção, do mais antigo para o mais recente…

Ou seja, quando insiro uma nova encomenda, quero que ela fique no final das encomendas que estão ainda por produzir mas em cima das já produzidas e como estou constantemente a ordenar prioridades e a filtrar, por exemplo, as encomendas o mês anterior que já não quero ver na lista corrente, o nº da ultima encomenda inserida nunca esta no mesmo sitio!!

Tentei adaptar a vossa sugestão mas tive de usar na mesma as linhas de filtro e ordenar escritas no modo "gravar macro" e mesmo assim n resulta porque ele vai comparar com o nº de encomenda que esta no final da lista!!
Tem outra forma?

Obrigado uma vez mais..

 
Postado : 19/12/2013 7:34 pm
(@avalente)
Posts: 36
Trusted Member
Topic starter
 

Bom dia!!

Mais alguma sugestão? só para saber se fecho o tópico ou não!!
Obrigado

 
Postado : 26/12/2013 7:12 am