CADASTRO ITENS DEMORADO  [Resolvido]

Visual Basic for Aplication e macros no Excel.
Regras do fórum
Sua dúvida foi respondida? Marque como RESOLVIDO em seus tópicos, usando o botão com marca verde. Imagem

CADASTRO ITENS DEMORADO

Mensagempor GabrielLuz » Qui Out 10, 2019 1:16 pm

Pessoal muito boa tarde! Me chamo Gabriel.. preciso otimizar um código, que está demorando + de 50 segundos para dar insert em 12 linhas preenchidas em um formulário que criei (sequencialmente) pelo VBA...
Vou falar a forma que eu fiz isso.. tentando explicar detalhadamente e o mais simples possivel... (eu sei que está muitoo mal otimizado)

Aqui eu identifico a ultima linha vazia da aba, para dar os inserts lá:
'ultimaLinha = Sheets("VENDAS").Range("A1048576").End(xlUp).Row + 1

E aqui os inserts dos campos do meu formulario:

'
Código: Selecionar todos
Cells(ultimaLinha, 1) = CDate(dataf.Value)
'Cells(ultimaLinha, 3) = CBESCOLHA.Text
'Cells(ultimaLinha, 2) = npedido.Value
'Cells(ultimaLinha, 4) = txt_codigo.Value
'Cells(ultimaLinha, 5) = txt_cliente.Text
'Cells(ultimaLinha, 6) = txtTransporte.Text
'Cells(ultimaLinha, 7) = outras.Text
'-----------
'Cells(ultimaLinha, 8) = T1.Text
'Cells(ultimaLinha, 9) = M1.Text
'Cells(ultimaLinha, 10) = q1.Value
'Cells(ultimaLinha, 11) = p1.Value
'Cells(ultimaLinha, 12) = r1.Text
'Cells(ultimaLinha, 13) = d1.Text
'Cells(ultimaLinha, 14) = obs.Text


Estes T1, M1, Q1.. etc... são os campos que vao de 1 a 12, e estão sendo inseridos na primeira linha vazia da aba, igual mencionei (entao tem o campo T2, M2, Q2..., T3, M3, Q3... até o 12)
O problema é que além de eu não saber fazer o looP para cadastrar isso 12x, em 12 linhas (podem ser até 12 linhas, se ele preencher até o 6, é para cadastrar 6 linhas..) (então no caso eu fiz todo esse código denovo 12 vezes, para cadastrar 12 vezes haha)

Está demorando + de 50 segundos para realizar o cadastro todo....
O problema é que, mesmo com o loop, creio que vai demorar + de 50 segundos de TODO o jeito, pois o loop ajuda a economizar código, mas a linha é a mesma, certo ?
existe algum método, para caso ele tenha preenchido todas as 12 linhas do meu formulario, cadastre todas rapidamente e sequencialmente uma embaixo da outra? (SALVARIA MINHA VIDA!)

Obs: a aba tem mais de 4000 linhas já preenchidas, notei que se eu apago todas elas, e deixo ela sem linhas, na hora de cadastrar a demora cai pela metade, porém ainda demora! (e tambem nao é viavel, pois voltara a ter 4000 linhas)
Se alguma boa alma estiver inspirada, se puder também me dar a luz de um código, que alem que deixe isso de maneira sequencial e rapida, também copie a formatação da linha anterior (para não ter necessidade de deixar linhas pré-criadas, seria magnificamente magnifico!)

Pessoal, desde ja meu muito obrigado!
GabrielLuz
Membro
Membro
 
Mensagens: 10
Registrado em: Qui Out 10, 2019 1:03 pm
Has thanked: 6 times
Have thanks: 2 times

{ SO_SELECT }

Re: Help! I need somebody ♫

Mensagempor leandroxtr » Qui Out 10, 2019 1:59 pm

Olá, companheiro!

Fica realmente bem difícil te ajudar sem ter acesso a planilha, pois é um procedimento específico.
Pelo o que percebi, é algo tranquilo de ser feito via loop, mas eu nao me arriscaria criar uma macro sem entender o processo, e ter que fazer de novo pra consertar.
Se puder compartilhar o arquivo, ou algum modelo idêntico (com dados ilustrativos), terei o prazer em ajuda-lo.
Se te ajudou, não se esqueça de dar um like na resposta e marcar o tópico como finalizado.

Abraços!
Leandro Cordeiro

For this post the author leandroxtr thanked:
GabrielLuz (Qui Out 10, 2019 3:09 pm)
Avatar do usuário
leandroxtr
Membro
Membro
 
Mensagens: 459
Registrado em: Ter Nov 29, 2016 9:51 am
Localização: Belo Horizonte/MG
Has thanked: 44 times
Have thanks: 129 times

Re: Help! I need somebody ♫

Mensagempor Coutinho » Qui Out 10, 2019 2:06 pm

GabrielLuz, li e reli varias vezes, até acho que entendi, mas não compreendi, está confusa a sua explicão:

Você diz :
Estes T1, M1, Q1.. etc... são os campos que vao de 1 a 12 - mas nas instruções da parte da rotina temos 14 dados lançados na planilha.
mas sesses 'Cells(ultimaLinha, 1) = CDate(dataf.Value) vão de i a 7 e não faz menção deles
entao tem o campo T2, M2, Q2..., T3, M3, Q3... até o 12 - esses não vi nessa parte da rotina
podem ser até 12 linhas, se ele preencher até o 6, é para cadastrar 6 linhas.. - meio confuso, não sei se está se referindo talvez aos campos do formulário em branco

Quanto as 4000 linhas, uma vez que está só capturando a Última Linha vazia: ultimaLinha = Sheets("VENDAS").Range("A1048576").End(xlUp).Row + 1, não é ela que deixa lento, e sim, se, provavelmente você tiver formulas em todas essas linhas e em alguma parte da rotina estiver forçando o excel a recalcular.
Assim, seria bom que colocasse seu modelo reduzido com dados ficticios se for o caso, ou detalhar melhor, lembre-se, você conhece e sabe o que quer, nós vamos por suposições.

[]s
Mauro Coutinho
Mauro Coutinho
com novo usuário devido a manutenção do grupo

For this post the author Coutinho thanked:
GabrielLuz (Qui Out 10, 2019 3:09 pm)
Coutinho
Ninja do Excel
Ninja do Excel
 
Mensagens: 116
Registrado em: Qua Jun 12, 2019 6:18 pm
Has thanked: 5 times
Have thanks: 61 times

Re: Help! I need somebody ♫

Mensagempor GabrielLuz » Qui Out 10, 2019 2:54 pm

Amigo mil desculpas..
Então, na verdade são 14 Colunas para preencher em 1 linha, e até 12 linhas que podem ser inseridas na planilha.
Os dados que vão de 1 a 7, é da primeira coluna até a 7, são dados que serão repetidos na proxima linha, os dados que serão novos são dai pra frente.
o usuario pode preencher apenas 2 das 12 linhas, ou 3 das 12 linhas, então, deve ser cadastrado referente as linhas que ele preencher no formulario.

e aproveitando, como eu anexo minha planilha aqui no forum? sou novo e não estou conseguindo achar a opção de anexo
GabrielLuz
Membro
Membro
 
Mensagens: 10
Registrado em: Qui Out 10, 2019 1:03 pm
Has thanked: 6 times
Have thanks: 2 times

Re: Help! I need somebody ♫

Mensagempor GabrielLuz » Qui Out 10, 2019 3:00 pm

Pessoal, nao consegui achar onde anexa, então subi a planilha aqui, para baixar:
https://transfernow.net/c83l8ft00p1l

Pessoal, não posso divulgar dados da empresa a qual esta planilha funciona, então eu só copiei o formulário frmLancarVenda (que é que está com esse problema de programação) e um exemplo de como a planilha está montada nessa parte... lembrando que eles fazem até 2 mil + lançamentos nessa guia todos os dias, então ela precisa funcionar independente da quantidade de dados na tabela.
Lembrando também que meu problema está sendo o tempo para cadastrar, no seu computador pode até ser rapido, mas o computador da empresa é muito ruim e lento, e chega a demorar +50 segundos.
GabrielLuz
Membro
Membro
 
Mensagens: 10
Registrado em: Qui Out 10, 2019 1:03 pm
Has thanked: 6 times
Have thanks: 2 times

Re: Help! I need somebody ♫

Mensagempor GabrielLuz » Qui Out 10, 2019 3:05 pm

Vocês vao perceber que eu fiz um rolo danado para cadastrar as linhas, primeiro para identificar quantas linhas foram preenchidas eu criei 12 checkbox haha, e falei pra ele desativar/ativar quando tal linha for preenchida, e fora da sub, la embaixo, criei 12 eventos de checkbox_change, fazendo então checkbox1_change, checkbox2_change, e em cada evento change ele realizava o cadastro da linha....
GabrielLuz
Membro
Membro
 
Mensagens: 10
Registrado em: Qui Out 10, 2019 1:03 pm
Has thanked: 6 times
Have thanks: 2 times

Re: Help! I need somebody ♫

Mensagempor srobles » Sex Out 11, 2019 12:52 am

Gabriel,

Veja se as alterações feitas em seu modelo, atendem sua necessidade.

Link:https://www.sendspace.com/file/l0e1ix
Espero ter ajudado.

Abs.

Saulo Robles

Remember when you were young?
You shone like the sun.
Shine On You Crazy Diamond

For this post the author srobles thanked:
GabrielLuz (Sex Out 11, 2019 10:31 am)
srobles
Membro
Membro
 
Mensagens: 378
Registrado em: Sáb Mai 09, 2015 10:35 pm
Has thanked: 122 times
Have thanks: 162 times

Re: Help! I need somebody ♫

Mensagempor GabrielLuz » Sex Out 11, 2019 10:18 am

srobles PELO AMOR DE DEUS!! ERA EXATAMENTE ISSO E MUIITOOO MELHOR AINDA DO QUE EU ESPERAVA!
MAGOO!! DO EXCEL!!
Seria muitaa ousadia pedir como faz para retirar caso um item tenha sido cadastrar errado na listbox?

Mais uma vez, meu muitoo obrigado!
GabrielLuz
Membro
Membro
 
Mensagens: 10
Registrado em: Qui Out 10, 2019 1:03 pm
Has thanked: 6 times
Have thanks: 2 times

Re: Help! I need somebody ♫

Mensagempor srobles » Sex Out 11, 2019 12:24 pm

Gabriel,

Exiba o código do frmLancarVendas e adicione a linha abaixo logo no começo (acima de todos os outros códigos):
Código: Selecionar todos
Dim itemSelecionado As Long

No evento Click do ListBox, adicione o que se segue :
Código: Selecionar todos
    If Me.ListBox1.ListIndex > 0 And Me.ListBox1.Selected(Me.ListBox1.ListIndex) = True Then itemSelecionado = Me.ListBox1.ListIndex

E finalmente, no evento KeyDown do ListBox, adicione:
Código: Selecionar todos
    If itemSelecionado >= 0 Then
        If KeyCode = vbKeyDelete Then
            If MsgBox("Deseja remover o item selecionado da lista?", vbQuestion + vbYesNo, "Remover item") = vbYes Then
                Me.ListBox1.RemoveItem itemSelecionado
                With Me.lblContagem
                    .Caption = "Total de " & Me.ListBox1.ListCount & " item(ns)"
                End With
                itemSelecionado = -1
            End If
        End If
    Else
        MsgBox "Selecione um dos itens da lista!", vbExclamation, "Erro"
    End If

Para remover um item da lista, basta selecionar um item e teclar Delete.
Espero ter ajudado.

Abs.

Saulo Robles

Remember when you were young?
You shone like the sun.
Shine On You Crazy Diamond

For this post the author srobles thanked:
GabrielLuz (Sex Out 11, 2019 12:56 pm)
srobles
Membro
Membro
 
Mensagens: 378
Registrado em: Sáb Mai 09, 2015 10:35 pm
Has thanked: 122 times
Have thanks: 162 times

Re: Help! I need somebody ♫

Mensagempor GabrielLuz » Sex Out 11, 2019 12:55 pm

Meu amigo, perfeito! mas teve um problema!
Ele está sempre deletando o primeiro item da lista, independente de qual item eu seleciono, como faço a correção ?

Desde já, muitooo obrigado novamente!!!
GabrielLuz
Membro
Membro
 
Mensagens: 10
Registrado em: Qui Out 10, 2019 1:03 pm
Has thanked: 6 times
Have thanks: 2 times

Próximo

Voltar para VBA & Macros

Quem está online

Usuários navegando neste fórum: Google [Bot], MSN [Bot] e 3 visitantes