Notifications
Clear all

Botão de inserir dados MACRO/VBA

9 Posts
2 Usuários
0 Reactions
1,678 Visualizações
(@pedro)
Posts: 362
Reputable Member
Topic starter
 

Boa tarde!

Pessoal, por favor, novamente recorre a ajuda de vocês em um probleminha que eu não to conseguindo resolver.

Tenho uma planilha de excel com duas abas, uma para digitar o mês e o faturamento e um botão "inserir", e na outra aba (que vai ficar oculta) eu quero que os dados fiquem salvos, mês a mês.

O botão de inserir só pode aceitar dados do mês atual (não pode aceitar dados de meses que já passaram, e nem pode pular algum mês), ou seja todo mês eu preciso preencher o faturamento.

A entrada de dados é nas células Insere!B4 e Insere!C4, e o "banco de dados" os registros devem ser nas células Faturamento!B15:C253

Alguém pode me ajudar?

Desde já, muito obrigado!

 
Postado : 14/12/2017 12:45 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Pedro,

Boa tarde!

Veja se é assim.

 
Postado : 14/12/2017 1:54 pm
(@pedro)
Posts: 362
Reputable Member
Topic starter
 

Oi wagner, primeiramente muito obrigado, ficou quase perfeito.

Eu não consegui inserir o mês de novembro = OK

Eu consegui inserir o mês de dezembro = OK

Mas eu não consegui inserir janeiro/2018, você limitou algo neste sentido?

Na verdade, se eu já inseri o dezembro, segue o baile, ele deve deixar eu seguir a sequencia, só não pode me deixar voltar atrás...
Poderia me explicar em que parte do código eu ajusto isso?

E, quando eu clicar no inserir ele poderia limpar as duas células de mês e faturamento?

Desde já, obrigado!

 
Postado : 14/12/2017 2:32 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Pedro,

Boa noite!

Você não conseguiu inserir janeiro/2018 porque eu entendi errado quando você disse, no primeiro post, "O botão de inserir só pode aceitar dados do mês atual". Dessa forma, atrelei a inserção ao mês em curso registrado pelo relógio do micro. Assim, como estamos em dezembro/2017, janeiro de 2018 não poderia ser inserido.

Segue nova versão com as correções solicitadas.

 
Postado : 14/12/2017 5:48 pm
(@pedro)
Posts: 362
Reputable Member
Topic starter
 

Capaz mesmo, eu que tinha escrito errado, não percebendo que pedia uma limitação, e agora pedi uma correção... ¬¬

Cara, baixei ela, mas só consigo dar umas testadas amanhã, daí eu respondo, de qualquer forma muito obrigado!

 
Postado : 14/12/2017 8:39 pm
(@pedro)
Posts: 362
Reputable Member
Topic starter
 

Wagner, desculpe a demora, eu estava testando ela entre idas e vindas aqui do escritório.

Cara, eu fiz uma adaptações no layout, algumas coisas trocaram de lugar, daí eu tive que mudar as referências ali dentro do código.

Tive que tirar a parte de "limpar as células", porque eu precisava que ficasse visual o último mês que foi inserido (porque não sou eu que vou usar ela), entre outras coisas.

Com seu código estava quase tudo perfeito, show de bola!

Mas deixa eu te perguntar, algo que eu descobri nos testes. Ela vem com o meses de 2017 pré carregados, então funciona perfeitamente de 12/2017 em diante. Mas, se eu tento incluir um mês aleatório de 2016 ou 2015 ou outro ano, ela permite. Tem como estabelecermos um "início" ?

Os três tipos de mensagem de retorno estão OK, mas só poderia funcionar de 12/2017 em diante, tem como?

Mais uma vez obrigado ^^

 
Postado : 19/12/2017 7:03 am
(@pedro)
Posts: 362
Reputable Member
Topic starter
 

O código depois da edições está assim ó:

Option Explicit


Sub Inserir()
    'Declara uma variável para número da linha - utilizada na contagem
    Dim UltimaLinha As Long
    'Declara uma variável "i" que receberá o resultado da contagem - que ativa o "For"
    Dim i As Long
    'Declara uma variável do tipo verdadeiro ou falso - utilizada para executar ou não a validação
    Dim Achou As Boolean
    'Declara uma variável para receber o último mês - para dar as mensagens de mês repetido, ou mês faltando
    Dim Mês As Long
    
    
    'Atribui os valores inicial para as variáveis "Achou" e "UltimaLinha"
    Achou = False
    UltimaLinha = 5
        
    
    'Procura a ultima linha, para inserir os dados na "ultima linha + 1", senão ele repete a procura
    Do While Sheets("Faturamento").Range("B" & UltimaLinha).Value <> ""
        UltimaLinha = UltimaLinha + 1
    Loop
        UltimaLinha = UltimaLinha - 1
    
    
    'Atribui o ultimo mês como valor para a variável "Mês"
    Mês = CLng(Month(CDate(Sheets("Faturamento").Range("B" & UltimaLinha).Value)) + 1)
    'Se o mês + 1 for "13", ele atribui mês "1"
    If Mês = 13 Then Mês = 1
    
    
    'Com base na variável "i", ele dispara o procedimento "For" - registra e/ou retorna as mensagens de erro
    For i = 5 To UltimaLinha
        If Month(CDate(Sheets("Faturamento").Range("B" & i).Value)) = Month(CDate(Sheets("Simulador").Range("H10").Value)) And _
        Year(CDate(Sheets("Faturamento").Range("B" & i).Value)) = Year(CDate(Sheets("Simulador").Range("H10").Value)) Then
            Achou = True
        End If
    Next
        If Achou = False Then
            If Month(CDate(Sheets("Simulador").Range("H10").Value)) = Mês Then
                Sheets("Faturamento").Range("B" & UltimaLinha + 1).Value = Sheets("Simulador").Range("H10").Value
                Sheets("Faturamento").Range("C" & UltimaLinha + 1).Value = Sheets("Simulador").Range("I10").Value
                'Sheets("Faturamento").Range("F" & UltimaLinha + 1).Value = Sheets("Simulador").Range("J10").Value
                MsgBox "Mês inserido com sucesso!", vbDefaultButton1, "Mensagem:"
                'Sheets("Simulador").Range("H10").Value = ""
                'Sheets("Simulador").Range("I10").Value = ""
                Sheets("Simulador").Range("H10").Select
            Else
                MsgBox "Está faltando um mês!", vbInformation, "Mensagem:"
            End If
        Else
            MsgBox "Este mês já foi inserido!", vbInformation, "Mensagem:"
        End If
        
    
End Sub
 
Postado : 19/12/2017 7:05 am
(@pedro)
Posts: 362
Reputable Member
Topic starter
 

Wagner, consegui resolver assim ó:

Option Explicit


Sub Inserir()
    'Declara uma variável para número da linha - utilizada na contagem
    Dim UltimaLinha As Long
    'Declara uma variável "i" que receberá o resultado da contagem - que ativa o "For"
    Dim i As Long
    'Declara uma variável do tipo verdadeiro ou falso - utilizada para executar ou não a validação
    Dim Achou As Boolean
    'Declara uma variável para receber o último mês - para dar as mensagens de mês repetido, ou mês faltando
    Dim Mês As Long
    
    
    'Atribui os valores inicial para as variáveis "Achou" e "UltimaLinha"
    Achou = False
    UltimaLinha = 5
        
    
    'Procura a ultima linha, para inserir os dados na "ultima linha + 1", senão ele repete a procura
    Do While Sheets("Faturamento").Range("B" & UltimaLinha).Value <> ""
        UltimaLinha = UltimaLinha + 1
    Loop
        UltimaLinha = UltimaLinha - 1
    
    
    'Atribui o ultimo mês como valor para a variável "Mês"
    Mês = CLng(Month(CDate(Sheets("Faturamento").Range("B" & UltimaLinha).Value)) + 1)
    'Se o mês + 1 for "13", ele atribui mês "1"
    If Mês = 13 Then Mês = 1
    
    
    'Com base na variável "i", ele dispara o procedimento "For" - registra e/ou retorna as mensagens de erro
    For i = 5 To UltimaLinha
        If Month(CDate(Sheets("Faturamento").Range("B" & i).Value)) = Month(CDate(Sheets("Simulador").Range("H10").Value)) And _
        Year(CDate(Sheets("Faturamento").Range("B" & i).Value)) = Year(CDate(Sheets("Simulador").Range("H10").Value)) Then
            Achou = True
        End If
    Next
        If Achou = False Then
            If CDate(Sheets("Simulador").Range("H10").Value) < CDate(Sheets("Faturamento").Range("B5").Value) Then
                MsgBox "A Lei Complementar 155/2016 entra em vigor a partir de Janeiro/2018!", vbInformation, "Mensagem:"
            Else
                If Month(CDate(Sheets("Simulador").Range("H10").Value)) = Mês Then
                    Sheets("Faturamento").Range("B" & UltimaLinha + 1).Value = Sheets("Simulador").Range("H10").Value
                    Sheets("Faturamento").Range("C" & UltimaLinha + 1).Value = Sheets("Simulador").Range("I10").Value
                    'Sheets("Faturamento").Range("F" & UltimaLinha + 1).Value = Sheets("Simulador").Range("J10").Value
                    MsgBox "Mês inserido com sucesso!", vbDefaultButton1, "Mensagem:"
                    'Sheets("Simulador").Range("H10").Value = ""
                    'Sheets("Simulador").Range("I10").Value = ""
                    Sheets("Simulador").Range("H10").Select
                Else
                    MsgBox "Está faltando um mês!", vbInformation, "Mensagem:"
                End If
            End If
        Else
            MsgBox "Este mês já foi inserido!", vbInformation, "Mensagem:"
        End If
        
    
End Sub

95% ajuda tua e 5% minha ^^

Mas está show de bola, muito obrigado a todos!

 
Postado : 20/12/2017 5:27 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

De nada! Por favor, vote positivamente clicando na mãozinha que fica localizada ao lado da ferramenta CITAR no canto superior direito da caixa de mensagens.

 
Postado : 20/12/2017 6:12 pm