Autonumerção com fo...
 
Notifications
Clear all

Autonumerção com formulário

9 Posts
1 Usuários
0 Reactions
3,261 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

É o seguinte galera:

Eu tenho uma planilha de controle de compras, vendas, funcionarios da empresa, fornecedores, slarios, estoque.

Enfim uma planilha de uma empresa comercial normal.

Estou criando um formulário para inserir dados no "banco de dados" via macro. Bem básico.

Porem quase todas as planilhas (compras, vendas, funcionarios), tem um Código (chave primaria, numeração, matricula)

Então eu precisava fazer com que o formulário de inserção de dados fassa a numeração automatica na planilha quando um novo Funcionario por exemplo for lançado.

Vou colocar imagens mostrar:

Formulario para iserir od dados
/

Banco de dados o qual recebera os dados
/

Eu preciso da autonumeração do codigo neste caso.

 
Postado : 23/06/2011 11:59 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Augusto, não entendi se quer lançar os numeros na Aba Banco de Dados ou nas outras,mas uma rotina básica seria contar primeiro a quantidade de códigos na planilha BD e depois jogar esse Numero para o TextBox do Formulário.
Dividi em duas partes, a primeira, conta, define o proximo numero e joga paraum Textbox, a segunda lança o numero do Textbox na Planilha BD :

Exemplificando :
1 ) -Carregamos o Textbox com o Numero :

Private Sub UserForm_Initialize()
Dim sNumBD As Long
Dim WsBDados As Worksheet

Set WsBDados = Sheets("BD") 'Aba Banco de Dados

    'Contamos os Lançamentos em BD Coluna A
    'desconsiderando o Cabeçalho linha 1
    sNumBD = WsBDados.Range("A65536").End(xlUp).Row - 1

    'Se não tiver nenhum Registro
    'O Primeiro numero é = a 1
    If sNumBD = 0 Then
        sNumBD = 1
    'Se não soma-se mais 1
    Else
        sNumBD = sNumBD + 1
    End If
    
    'Carregamos no TextBox o Numero
    TextBox1.Value = sNumBD

End Sub

2 )- Lançamos na Planilha novo Numero :

Private Sub CommandButton2_Click()
Dim WsBDados As Worksheet
Set WsBDados = Sheets("BD") 'Aba Banco de Dados

Dim linha
    'Conta as Linhas Preenchidas
    linha = WsBDados.Range("A65536").End(xlUp).Row
    
    If linha = 1 Then
        linha = 2
    Else
        linha = linha + 1
    End If
   
   'Lança o Numero na Aba BDaddos
    With WsBDados
        .Cells(linha, 1).Value = TextBox1.Value
    End With

End Sub

abraços

 
Postado : 23/06/2011 4:20 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá Mauro

é exatamente isso, porém "o textbox do formulário não é exatamente um textbox, e sim uma célula qualquer a qual eu fou proteger para que o usuário não possa mexer e alterar o código".

Pelo que eu entendi, esse script soma tudo que tem na coluna que estão os códigos e adiciona + 1 na váriavel caso o resultado for > 0 se não ele adiciona 1 na variável.
E no fim ele armazena o resultado de tudo no textbox.
Como no meu caso o form n é um text box, tem como vc arrumar ali para ele armazenar o resultado da soma dos codigos + 1 na área de preencher o código na outra planilha que esta o form, assim quando o usuário inserir outro produto o código estara la e não podera ser alterado.

Private Sub UserForm_Initialize()
Dim sNumBD As Long
Dim WsBDados As Worksheet

Set WsBDados = Sheets("BD") 'Aba Banco de Dados

'Contamos os Lançamentos em BD Coluna A
'desconsiderando o Cabeçalho linha 1
sNumBD = WsBDados.Range("A65536").End(xlUp).Row - 1

'Se não tiver nenhum Registro
'O Primeiro numero é = a 1
If sNumBD = 0 Then
sNumBD = 1
'Se não soma-se mais 1
Else
sNumBD = sNumBD + 1
End If

'Carregamos no TextBox o Numero
TextBox1.Value = sNumBD

End Sub

Vou passar certinho os locais das celulas

Planilha DB_Produtos (célula C7 em diante) que estão os códigos que terão de ser somados e adicinados +1.
Planilha FORM_InserirProdutos (Célula D10) que recebera o novo código e sera bloqueada.

 
Postado : 23/06/2011 6:36 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Augusto, no primeiro tópico você citou Formulário, por isso imaginei que está utilizando um, e consequentemente teriámos um textbox, então como está utilizando Celulas, e não sei como está montado seu aplicativo e nem como irá fazer para iniciar, alterei as rotinas com os nomes das abas que passou. Para executa-las, associe a de criar um novo numero a um botão e a de lançar a outro.

A rotina GeraCodigo, não realiza soma, ela simplesmente conta a qde de itens que já estão cadastrados, se não tiver nenhum registro ela cria o numero "1", se não, soma mais "1" a qde encontrada gerando o proximo numero.
OBS: Se quiser deixar automatico sem associar a um Botão, coloque a chamada para a rotina abaixo ou transfira os códigos para o Evento Activate da Aba.

    Sub GeraCodigo()
    Dim sNumBD As Long
    
    Dim WsDBPrdt As Worksheet 'DB_Produtos
    Set WsDBPrdt = Sheets("DB_Produtos") 'Aba DB_Produtos
    
    Dim WsInsPrdt As Worksheet 'FORM_InserirProdutos
    Set WsInsPrdt = Sheets("FORM_InserirProdutos") 'Aba FORM_InserirProdutos
        
        'Contamos os Lançamentos em DB_Produtos, Coluna C
        'desconsiderando as 6 primeiras linhas
        sNumBD = WsDBPrdt.Range("C65536").End(xlUp).Row - 6

        'Se não tiver nenhum Registro
        'O Primeiro numero é = 1
        If sNumBD = 0 Then
            sNumBD = 1
        'Se não soma-se mais 1
        Else
            sNumBD = sNumBD + 1
        End If
       
        'Colocamos o Numero em D10
        WsInsPrdt.Range("D10") = sNumBD
    
    End Sub
    Sub LancaCodigo()
    Dim WsDBPrdt As Worksheet 'DB_Produtos
    Set WsDBPrdt = Sheets("DB_Produtos") 'Aba DB_Produtos
    
    Dim WsInsPrdt As Worksheet 'FORM_InserirProdutos
    Set WsInsPrdt = Sheets("FORM_InserirProdutos") 'Aba FORM_InserirProdutos
    
    Dim linha
        'Conta as Linhas Preenchidas
        linha = WsDBPrdt.Range("C65536").End(xlUp).Row
       
        If linha = 6 Then 'Desconsideramos as 6 linhas acima
            linha = 7
        Else
            linha = linha + 1
        End If
       
       'Lança o Numero na Aba DB_Produtos
        With WsDBPrdt
            .Cells(linha, 3).Value = WsInsPrdt.Range("D10").Value
        End With

    End Sub

[]s

 
Postado : 23/06/2011 7:31 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Então cara, eu vou armazenar os dados que o form vai pegar na tabela DB_Produtos via macro, vou armazenar od dados digitados em células invisiveis e copiar e colar na outra planilha via macro.

Bom, o cógido deu erro na linha

Set WsInsPrdt = Sheets("FORM_InserirProdutos") 'Aba FORM_InserirProdutos

nos 2 códigos, tentei no Private Sub Worksheet_Activate() da aba DB_Produtos e tentei outra vez na FORM_... e deu no mesmo...

 
Postado : 23/06/2011 9:13 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Então cara, eu vou armazenar os dados que o form vai pegar na tabela DB_Produtos via macro, vou armazenar od dados digitados em células invisiveis e copiar e colar na outra planilha via macro.

Bom, o cógido deu erro na linha

Set WsInsPrdt = Sheets("FORM_InserirProdutos") 'Aba FORM_InserirProdutos

nos 2 códigos, tentei no Private Sub Worksheet_Activate() da aba DB_Produtos e tentei outra vez na FORM_... e deu no mesmo...

Augusto, eu postei as duas rotinas, basicamente são as mesmas, só alterando para se trabalhar com Formulário e outra direto na planilha, e você diz que não é formulário, mas diz "armazenar os dados que o form vai pegar na tabela", então o jeito é anexar seu modelo para analizar melhor.

[]s

 
Postado : 24/06/2011 8:40 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Esta ai o arquivo, eu ainda não fiz as macros dos botões, mais oque vou fazer basicamente sera

na aba FORM_InserirProsutos

jogar os dados em outras células (ir la fora do form e fazer ="celulatal")
dai vou ligar o macro e copiar o conteudo da celulatal para o banco de dados, e adicionar essa macro ao botão inserir produtos.
Mais ele tem q tar com a numerção (código) ok.

 
Postado : 24/06/2011 11:21 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Segue a adaptação, lembrando que só incrementei a parte referente a Autonumeração.

Na Aba Ornament - Planilha de Abertura - Clique no Botão Inserir Produto, será acessado a Aba FORM_InsesirProdutos e em D10 será colocado o qual será o Proximo Código Automático, como ja temos um item na Aba DB_Produtos, o próximo Código é 2.

Na Aba FORM_InsesirProdutos, clique no Botão Inserir Produto, e o Código 2 será Lançado na Aba DB_Produtos.

Assim resolvemos a questão deste Tópico sobre Autonumeração.

[]s

 
Postado : 24/06/2011 12:08 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

brigadooooo.

 
Postado : 24/06/2011 1:43 pm