Notifications
Clear all

Somase VBA

13 Posts
3 Usuários
0 Reactions
3,249 Visualizações
(@lecustodio)
Posts: 14
Eminent Member
Topic starter
 

Bom dia pessoa, já fiz diversas buscas e diversas tentativas gostaria que vocês me ajudassem.

É o seguinte, tenho uma planilha onde tenho work sheets "Relatorio" e "Orçamento".
Dentro de Relatorio, há um item codigo, onde ao digitar o codigo na coluna subsequente ao codigo, eu somaria o produto de todos os itens no orçamento que contenha o codigo.

Os códigos no orçamento não estão em ordem, pois estamos desenvolvendo uma planilha que possa ser usada para todos os orçamentos, não havendo necessidade de manibulação dos orçamentos para gerar os relatorios.

Se alguem tiver alguma luz ficarei muito grato !!
:mrgreen:

 
Postado : 15/04/2013 8:50 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Lecustodio,

Boa Tarde!

Bom... seria masi fácil se você tivesse enviado a sua planilha. No caso, segue um modelo.

 
Postado : 15/04/2013 9:29 am
(@lecustodio)
Posts: 14
Eminent Member
Topic starter
 

Caro Wagner, é exatamente esse o raciocionio que estou na luta, pegando a ultima linha referente ao codigo incluindo essa linha na variavel e chegar no produto final, mas acho q fui infeliz dizendo do uso do SOMASE, pois deveria ser um SOMARPRODUTO para que o valor seja correto, pois ao jogar na minha planilha notei que o resultado não batia, mas por puro erro de expressão matemática. Como eu usaria o somarproduto ?

Porem segue a planilha para que fique mais claro o entendimento.

Seu arquivo foi deletado, leia as regras, os arquivos devem ser compactado!!

 
Postado : 15/04/2013 10:05 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Sua planilha deve ser compactada para poder ser baixada. Eu não consegui baixar. Se alguém puder ajudar...

 
Postado : 15/04/2013 10:08 am
(@lecustodio)
Posts: 14
Eminent Member
Topic starter
 

Lecustodio,

Boa Tarde!

Bom... seria masi fácil se você tivesse enviado a sua planilha. No caso, segue um modelo.

Esqueci de dizer, estou fazendo a parte de calculos como formula, mas ao fechar todo o metodo de calculo, irei passar todos os calculos via VBA.

 
Postado : 15/04/2013 10:13 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Aqui no serviço não tenho excel 2007, mas como falou sobre a função SOMARPRODUTO, de uma olhada ns links abaixo se ajudam :

Dica sobre contagens e somas condicionais (Parte I)
http://info.abril.com.br/forum/viewtopi ... 101&t=1864

SOMARPRODUTO
http://www.ambienteoffice.com.br/excel/SOMARPRODUTO/

[]s

 
Postado : 15/04/2013 10:17 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não vi planilha anexada, então se a logica "mostrada" pelo colega Morel lhe atende, e fica somente a questão o somarproduto pode-se utlizar no codigo

            If Sheets("Orçamento").Range("A" & i).Value = Sheets("Relatório").Cells(Target.Row, Target.Column).Value Then
                Soma = Soma + CDbl(Sheets("Orçamento").Range("E" & i).Value)*CDbl(Sheets("Orçamento").Range("J" & i).Value)
                Sheets("Relatório").Cells(Target.Row, Target.Column + 1).Value = Soma
            End If
 
Postado : 15/04/2013 10:17 am
(@lecustodio)
Posts: 14
Eminent Member
Topic starter
 

Não vi planilha anexada, então se a logica "mostrada" pelo colega Morel lhe atende, e fica somente a questão o somarproduto pode-se utlizar no codigo

            If Sheets("Orçamento").Range("A" & i).Value = Sheets("Relatório").Cells(Target.Row, Target.Column).Value Then
                Soma = Soma + CDbl(Sheets("Orçamento").Range("E" & i).Value)*CDbl(Sheets("Orçamento").Range("J" & i).Value)
                Sheets("Relatório").Cells(Target.Row, Target.Column + 1).Value = Soma
            End If

Quando uso essa expressão na planilha do Morel, dá tudo certinho, mas quando eu incluo na minha, alterando a colunas necessarias, não obtenho o resultado.

:|

 
Postado : 15/04/2013 10:41 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Como não tenho como ver a planilha, ajudaria se colocasse a quais colunas está se referindo...

Veja se altrerou todas as referencias corretamente ou se os nomes das abas coincidem com os que estão na rotina postada.

[]s

 
Postado : 15/04/2013 11:35 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Lecustodio,

Boa Tarde!

Não estou entendo exatamente o que você quer. Conforme a última alteração enviada pelo Reinaldo, se estiver correta a lógica usada por ele, vamos chegar a um denominador comum na sua planilha. Assim, informe:
1 - Qual é a coluna (na sua planilha Relatório) onde deve ficar o resultado do produto?
2 - Quais são as colunas (na sua planilha Orçamento) que se deve pegar? Multiplicar quem por quem?

 
Postado : 15/04/2013 11:55 am
(@lecustodio)
Posts: 14
Eminent Member
Topic starter
 

Lecustodio,

Boa Tarde!

Não estou entendo exatamente o que você quer. Conforme a última alteração enviada pelo Reinaldo, se estiver correta a lógica usada por ele, vamos chegar a um denominador comum na sua planilha. Assim, informe:
1 - Qual é a coluna (na sua planilha Relatório) onde deve ficar o resultado do produto?
2 - Quais são as colunas (na sua planilha Orçamento) que se deve pegar? Multiplicar quem por quem?

Morel, a forma que o Reinaldo colocou estava certinho, foi o erro era que na sua planilha a palavra relatório estava acentuada, e na minha planilha não estava, acertei isso, acertei as colunas e tudo deu certinho !

Só fiz uma pequena auteração colocando um GoTo, pois quando selecionava duas ou mais celulas de código e apagava, gerava um erro no Target.

O Código ficou dessa forma:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim i, UltimaLinha As Long
Dim Soma As Double

On Error GoTo Saida
If Target.Column = 1 And Target.Value <> "" Then

UltimaLinha = Sheets("Orçamento").Cells(Cells.Rows.Count, 1).End(xlUp).Row
For i = 2 To UltimaLinha

If Sheets("Orçamento").Range("A" & i).Value = Sheets("Relatório").Cells(Target.Row, Target.Column).Value Then
Soma = Soma + CDbl(Sheets("Orçamento").Range("D" & i).Value) * CDbl(Sheets("Orçamento").Range("E" & i).Value)
Sheets("Relatório").Cells(Target.Row, Target.Column + 3).Value = Soma
End If

Next
ElseIf Target.Value = "" Then
Application.EnableEvents = True
Exit Sub
End If
Application.EnableEvents = True

Saida:
Application.EnableEvents = True

End Sub

Agradeço a todos pela ajuda !!

:D

 
Postado : 15/04/2013 12:23 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Inclua em seu exemplo, qual(is) colunas envolvidas e o resultado esperado (faça manualmente)

 
Postado : 15/04/2013 12:40 pm
(@lecustodio)
Posts: 14
Eminent Member
Topic starter
 

Inclua em seu exemplo, qual(is) colunas envolvidas e o resultado esperado (faça manualmente)

Reinaldo, no final ficou assim:

Funcionamento:
Uma WorkSheet chamda "Orçamento" que continha meu os custos unitarios de um determinado serviço com diversos itens (fora de ordem). Continha também uma WorkSheet chamada "Relatório", que continua alguns cáculos ainda em fórmulas, mas que assim que for fechada o tratamento da planilha, seram todos feitos via VBA.

Necessidade:
Na pasta Relatório, eu precisava que ao digitar um código na coluna "A", fosse me dado a soma do produto dos itens contidos na pasta Orçamento, o problema se dava, pq havia a necessidade de um "Somase" ou "SomarProduto" apartir do código.

Solução:
Morel desenvolveu uma planilha que fazia essa comparação do codigo digitado na coluna A com os codigos contido no orçamento, e assim se fez possivel o PROC + SOMARPRODUTO, ficando o codigo da seguinte forma:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim i, UltimaLinha As Long
Dim Soma As Double


On Error GoTo Saida
If Target.Column = 1 And Target.Value <> "" Then



UltimaLinha = Sheets("Orçamento").Cells(Cells.Rows.Count, 1).End(xlUp).Row
For i = 2 To UltimaLinha

If Sheets("Orçamento").Range("A" & i).Value = Sheets("Relatório").Cells(Target.Row, Target.Column).Value Then
Soma = Soma + CDbl(Sheets("Orçamento").Range("D" & i).Value) * CDbl(Sheets("Orçamento").Range("E" & i).Value)
Sheets("Relatório").Cells(Target.Row, Target.Column + 3).Value = Soma
End If


Next
ElseIf Target.Value = "" Then
Application.EnableEvents = True
Exit Sub
End If
Application.EnableEvents = True

Saida:
Application.EnableEvents = True

End Sub
 
Postado : 15/04/2013 12:57 pm