Notifications
Clear all

Macro muito lenta


Elias_R_C
Posts: 2
Registered
Topic starter
(@elias_r_c)
New Member
Entrou: 10 meses atrás

Olá  Pessoal, boa noite!

Tenho uma planilha com formulas e codigos Vba.

essa referida planilha está demorando quase 10 segundos para executar o codigo. alguem poderia me ajudar ?

O codigo é o seguinte:

Sub EmitindoVendas_Emissor()

'Emitindo Pedidos por Inserção

    Dim TempoInicial As Date

    Dim Estoque, Qtde, Linha, Total

    TempoInicial = Now()


     'desprotege a planilha ativa

    Sheets("Vendas").Unprotect Password:=""

    Sheets("Consultas").Unprotect Password:=""

    Sheets("Produtos").Unprotect Password:="1"


    Application.Calculation = xlCalculationManual

    Application.ScreenUpdating = False

    Application.EnableEvents = False

    Application.DisplayAlerts = False


    Estoque = Planilha32.Range("c4").Value

    Linha = Planilha32.Range("d4").Value

    Qtde = Planilha32.Range("h4").Value


   If Qtde > Estoque Then

         MsgBox ("Não Há Estoque Suficiente")

      Else

         Total = Estoque - Qtde

         Planilha3.Range("D" & Linha).Value = Total


        End If

    Contador = 13

    While Planilha4.Cells(Contador, 1) <> ""

    Wend


    Planilha4.Cells(Contador, 1) = Planilha32.Range("G9").Value

    Planilha4.Cells(Contador, 3) = Planilha32.Range("B8").Value

    Planilha4.Cells(Contador, 4) = Planilha32.Range("C8").Value

    Planilha4.Cells(Contador, 5) = Planilha32.Range("f9").Value

    Planilha4.Cells(Contador, 8) = Planilha32.Range("F8").Value

    Planilha4.Cells(Contador, 9) = Planilha32.Range("G8").Value

    Planilha4.Cells(Contador, 10) = Planilha32.Range("H8").Value

    Planilha4.Cells(Contador, 11) = Planilha32.Range("I8").Value

    Planilha4.Cells(Contador, 6) = Planilha32.Range("d8").Value

    Planilha4.Cells(Contador, 7) = Planilha32.Range("e8").Value

    Planilha4.Cells(Contador, 12) = Planilha32.Range("j8").Value

    Planilha4.Cells(Contador, 13) = Planilha32.Range("k8").Value

    Planilha4.Cells(Contador, 14) = Planilha32.Range("l8").Value

    Planilha4.Cells(Contador, 15) = Planilha32.Range("m8").Value

    Planilha32.Range("c6").Value = Planilha32.Range("g4").Value

    Planilha32.Range("f6").Value = Planilha32.Range("h8").Value

    Planilha32.Range("g6").Value = Planilha32.Range("i8").Value


    Sheets("Consultas").Select

    Range("b14").Select

    Selection.AutoFill Destination:=Range("b13:b14"), Type:=xlFillDefault

    Rows("13:13").Select

    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

    If Sheets("vendas").Range("h6") = "47" Then

       MsgBox "Pedido Lotado"

    End If


    Sheets("Vendas").Select

    Range("f4") = ""

    Range("h4") = ""

    Range("f4").Select


        Range("c5").Select

        Selection.Locked = True

        Selection.FormulaHidden = True


    Application.Calculation = xlCalculationAutomatic

    Application.ScreenUpdating = True

    Application.EnableEvents = True

    Application.DisplayAlerts = True


    'protege a planilha novamente

    Sheets("Consultas").protect Password:=""

    Sheets("Vendas").protect Password:=""

    Sheets("Produtos").protect Password:="1"

    TempoInicial = Now() - TempoInicial

    MsgBox TempoInicial


End Sub

Editado pela Moderação. Motivo: Utilize o botão Código (< >) para inserir código VBA ou Fórmulas.

Responder
Tags do Tópico
6 Respostas
Televisaos
Posts: 35
Registered
(@televisaos)
Eminent Member
Entrou: 1 ano atrás

Boa noite @elias_r_c,

Este trecho está correto?:

While Planilha4.Cells(Contador, 1) <> ""

Wend

Att, Televisaos

Responder
2 Respostas
Elias_R_C
Registered
(@elias_r_c)
Entrou: 10 meses atrás

New Member
Posts: 2

@televisaos

Bom dia!

é o que está no codigo. algum  erro no codigo ?

Como vc  fez isso ? vc teria como me ajudar ?

 

Elias Não poste em sequência, use o botão editar.

Ok, sou novo por aqui. Mas fica aí o meu pedido  de ajuda.

esse codigo inseri informações de uma planilha, em outra planilha

Responder
Televisaos
Registered
(@televisaos)
Entrou: 1 ano atrás

Eminent Member
Posts: 35

@elias_r_c Tlvz os colegas mais experientes em VBA possam responder melhor mas é que me pareceu um loop sem função já que não há código no interior.

Att, Televisaos

Responder
Mldel
Posts: 8
Registered
(@mldel)
Active Member
Entrou: 1 ano atrás



Oie , então não há muito que se possa se fazer, tinha uma macro muito parecida com essa. Foi solucionado enviando para access . Minha macro fazia isso em 10 minutos. Horrível.

 

Sugiro que mude para o banco de dados acesa e deixe seu Excel para somente consulta. 

Trabalho com 40 50 mil linhas e minhas consultas estão em 1 a 2 segundos. 

Responder
Mldel
Posts: 8
Registered
(@mldel)
Active Member
Entrou: 1 ano atrás

Assista Alessandro trovato no YouTube as aulas 104 105 106 107  vc aprende criar uma conexão. Aí depois vc aprende como criar um banco de dados . 

Responder
EdsonBR
Posts: 853
Moderator
(@edsonbr)
Prominent Member
Entrou: 6 anos atrás

O colega @televisaos tem razão, @elias_r_c, aquele trecho é um loop infinito, pois como a variável contador não é atualizada dentro do loop, a única maneira de sair dele é quando a célula da Planilha4 coluna A, linha contador tiver seu valor alterado para vazio. Isso só ocorrerá se sua Planilha4 estiver sendo alimentada externamente, tipo por dados da Web ou via DDE, por exemplo. Nesse caso, a abordagem deveria ser outra. Por exemplo, levar em conta alterações via eventos como Calculate, etc. Ou pelo menos um DoEvents ou usar alguma armadilha de tempo... enfim. Por esses motivos é que sempre é mais produtivo anexar o arquivo para análise do que fragmentos de código.

Responder