Notifications
Clear all

Planilha calculo de tributo

8 Posts
2 Usuários
0 Reactions
1,477 Visualizações
(@jamesbyron)
Posts: 12
Eminent Member
Topic starter
 

Bom dia!
Estou tendo dificuldades para finalizar uma planilha de calculo de um determinado imposto recolhido para o Estado de Goias.
Tenho os seguintes problemas:
1° É verificado 4 condições/critérios pro calculo do mesmo, na ultima condição é feito um calculo para verificar se a divisão do Valor do ICMS pelo valor total do produto dará
0,10 (10%):
Round(CDbl(.Cells(lRow, OColuna).Value) / CDbl(.Cells(lRow, GColuna).Value), 2) = 0.1 Then
Exatamente nesta parte do modulo dá um erro de estouro '6', não consegui resolver.

 
Postado : 11/11/2013 7:45 am
(@jamesbyron)
Posts: 12
Eminent Member
Topic starter
 

Planilha em anexo.

http://www.sendspace.com/file/l0brww

 
Postado : 11/11/2013 8:01 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

O erro deve-se a uma propriedade da matématica que diz "Não dividiras por Zero", lentão quando encontra o divisor igual a ""(normalmente no excel assume como zero para contas) ou zero, gera o erro especificado
Como curiosidade veja http://pt.wikipedia.org/wiki/Divis%C3%A3o_por_zero e/ou http://matematicaenigmatica.blogspot.co ... -pode.html
Sugestão: Defina o que deseja "receber" quando o divisor for Zero, e a partir dai faça o tratamento da equação

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 11/11/2013 8:58 am
(@jamesbyron)
Posts: 12
Eminent Member
Topic starter
 

Obrigado!
Pois é, eu já sabia que em alguns registros daria 0, porem não sabia que daria erro de estouro.
Como faço para contornar o erro sem perder o critério da linha?

 
Postado : 11/11/2013 12:48 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Obrigado!
Pois é, eu já sabia que em alguns registros daria 0, porem não sabia que daria erro de estouro.
Como faço para contornar o erro sem perder o critério da linha?

James, sem entrar no contexto dos calculos, por isso removi as linhas referente aos mesmos, se entendi corretamente, você tem de criar as Condições para se os Valores nas respectivas Colunas forem "ZERO" e se não forem, ficaria mais ou menos assim:

Sub calculaprotege()
    Const AColuna = "A" '<- REGISTRO
    Const KColuna = "K" '<- CFOP
    Const JColuna = "J" '<- CST ICMS
    Const NColuna = "N" '<- ALIQUOTA
    Const GColuna = "G" '<- VALOR CONTABIL
    Const MColuna = "M" '<- BASE DE CALCULO
    Const OColuna = "O" '<- ICMS
    Const AMColuna = "AM" '<- PROTEGE
'   Inserts random numbers on the active worksheet
    
    Dim PctDone As Single
    Dim lRow As Long
    Dim lLast As Long
    Dim ws As Worksheet
    
    
    Set ws = ActiveSheet
    With ws
        lLast = .Cells(.Rows.Count, AColuna).End(xlUp).Row
        'Considerando uma linha de cabeçalho
        For lRow = lLast To 2 Step -1
        
        'AQUI VERFICAMOS SE OS VALORES NOS RESPECTIVOS ENDEREÇOS SÃO ZERO
        If .Cells(lRow, OColuna).Value = 0 Or .Cells(lRow, GColuna).Value = 0 Then
            
            MsgBox "Colunas com Valores ZERO"
            'Aqui colocar o que fazer quando encontrar ZEROS
            
            Else
            
            MsgBox "Nas Celulas - (lRow, OColuna) e Cells(lRow, GColuna) não teem Valores  ZERO"
            'Aqui colocar as instruções para continuar
            
        End If
            
   
        Next lRow
    End With

End Sub

Veja que deixei espaço apos os Msgbox para você colocar as definições do que fazer.
Veja se é isto e qq duvida retorne.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 11/11/2013 6:41 pm
(@jamesbyron)
Posts: 12
Eminent Member
Topic starter
 

Consegui contornar este problema dos zero, simplesmente eliminando os registros que contem os mesmos, pois não vou utiliza-los.
Vou anexar novamente a planilha, o que acontece agora é que o código é executado normalmente mas nunca calcula nada, como se nenhum critério fosse Valido.
Criterio1: Coluna k = 5102
Criterio2: Coluna j = 20
Criterio3: Coluna a = C170
Criterio4: Divisão da coluna O pela G, deve dar aproximadamente 0,10 ou 10%.

http://www.sendspace.com/file/fbxymw

 
Postado : 12/11/2013 5:16 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

James, aqui não temos acesso a drivers virtuais, mas pelo que me lembro do exemplo que vi ontem em casa, e já que eliminou as celulas que continham ZERO, procure ver se todos os valores são numericos, ou, como está utilizando algumas condições de verificação antes, pode ser que algum criterio não esteja lhe retornando o resultado esperado, então faça um teste somente para o retorno do valor sem ter outras condições, tipo :

Sub teste()

    Dim sRetorno
    
    sRetorno = Round(CDbl(Cells(lRow, OColuna).Value) / CDbl(Cells(lRow, GColuna).Value), 2) = 0.1
    
    MsgBox sRetorno

End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 12/11/2013 6:18 am
(@jamesbyron)
Posts: 12
Eminent Member
Topic starter
 

Eu tentei esta hipótese e deu certo, porem mesmo assim sempre cai no ELSE como se algum critério não fosse verdadeiro.
Enfim resolvi com uma =somases() buscado os mesmos critérios e funcionou.
Gostaria muito de ter resolvido via código.

 
Postado : 12/11/2013 11:42 am