Notifications
Clear all

Somar cada linha

13 Posts
1 Usuários
0 Reactions
1,738 Visualizações
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pessoal veja se podem me ajudar a montar uma soma em todos os itens.

Estou com um bando de dados Access ( que não estou com problemas ) quero fazer uma consulta com alguns filtros e que ele some o resultado em determinada linha.

No anexo na aba ranking, eu gostaria que o codigo começasse com a busca de criterios, e depois que ele colasse o resultado na frente de cada codigo. Basicamente seria um somase

o codigo é esse:

Sub testando()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim linha As Integer

Set cn = New ADODB.Connection 'Connec é um novo objeto de conexão ADODB
Set rs = New ADODB.Recordset 'rec é um novo objeto de recordset ADODB
linha = 5
'Preenchendo as variaveis:
CaminhoDb = ThisWorkbook.Sheets("Apoio").Range("C2").Value
ArquivoDb = ThisWorkbook.Worksheets("Apoio").Range("C3").Value
strSQL = ThisWorkbook.Worksheets("Apoio").Range("C11").Value
Guia = ThisWorkbook.Worksheets("Apoio").Range("C13").Value
Celula = ThisWorkbook.Worksheets("Ranking").Range("B" & linha).Value
linha = linha + 1

'Limpando registro anterior
ThisWorkbook.Sheets(Guia).Range("B" & linha).ClearContents

'Se o endereço do banco nao conter "" as linhas abaixo irão acrescentar
If Right(CaminhoDb, 1) <> "" And Left(ArquivoDb, 1) <> "" Then
    CaminhoDb = CaminhoDb & ""
End If


'Provedores de conexao:
ProvedorJET04 = "Microsoft.Jet.OLEDB.4.0"
ProvedorACE04 = "Microsoft.ACE.OLEDB.4.0"
ProvedorACE08 = "Microsoft.ACE.OLEDB.8.0"
ProvedorACE12 = "Microsoft.ACE.OLEDB.12.0"
ProvedorACE14 = "Microsoft.ACE.OLEDB.14.0"

'Propriedades de conexao:
Propriedades08 = ";User ID=Admin;"
Propriedades12 = ";User ID=Admin; Password="


'Definindo o Provedor e a Propriedade correta conforme versao do Office:
If Application.Version < 12 Then
   Provedor = ProvedorJET04
   Propriedades = Propriedades08
Else
   Provedor = ProvedorACE12
   Propriedades = Propriedades12
End If

'Definindo string de conexão:
ConSTR = "Data Source=" & CaminhoDb & ArquivoDb & Propriedades

'Abrindo conexão:
With cn
    .Provider = Provedor
    .ConnectionString = ConSTR
    .Open
End With

'Executando a string de consulta SQL
Set rs = cn.Execute(strSQL)

If rs.EOF And rs.BOF Then
    MsgBox "Nada encontrado para a chave de selecao"
    Exit Sub
End If

'Nao precisava desse loop... ja que o resultado e somente uma linha
'mas estou fazendo o loop para mostrar
'como seria se retornassem varias linhas
rs.MoveFirst
Do Until rs.EOF
'    MsgBox "Qtd:" & rs.Fields(0) & " Soma: " & rs.Fields(1)
    ThisWorkbook.Sheets(Guia).Cells(linha, 2) = rs.Fields(0)
    linha = linha + 1
        rs.MoveNext
Loop

'Registrando a consulta no excel
'ThisWorkbook.Sheets(Guia).Range(Celula).CopyFromRecordset rs


'Fechando a conexao
cn.Close

End Sub

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

 
Postado : 22/08/2014 7:52 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!!

Porque não usar uma formula?

De qualquer forma, via formula ou VBA, onde (qual guia), haverá de procurar o intervalo de critério (base onde está os dados)? :?

Att

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

 
Postado : 23/08/2014 7:52 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

A base de dados é um arquivo em Access ...

Não coloquei uma formula porque preciso reunir esses dados todos a partir deste arquivo...

estou mandando um modelo do banco e também desse Excel de novo.

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

 
Postado : 23/08/2014 8:14 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!!

Você não pode fazer dessa forma?
Importar os dados para uma guia (com ou sem VBA - use o Gravador de Macros).
Ponha uma formula na guia Ranking, e faça sua analise (ou use uma tabela dinâmica).

Att

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

 
Postado : 23/08/2014 10:04 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!!

Considerando que você usa a versão 2010 em diante, veja meu modelo.
https://www.sendspace.com/file/rzzgrv

Os slice (ou segmentação de dados), você pode acrescentar ou omitir de acordo com sua necessidade.

Quanto ao código que importa os dados eu adaptei até onde entendi, você pode fazer o mesmo, caso ache necessário.

Veja arquivo em:
https://www.sendspace.com/file/rzzgrv

Att

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

 
Postado : 23/08/2014 10:52 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ale ... você acha que seu fizer uma tabela dinâmica com esses dados o arquivo pode ficar pesado ?

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

 
Postado : 23/08/2014 11:19 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!!

Eu creio que não, vai depender da sua real base de dados, mas você pode usar uma formula via VBA (no lugar da TD), onde essa formula, vai ser colada especial valores, e sua base de dados (DB_Access), você poderá deletar, evitado um certo peso no arquivo.

Seja lá qual meio ou recurso, caso seja muitos dados, o seu relatório (resumo-análise), deverá ter os resultados estáticos!

Att

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

 
Postado : 23/08/2014 11:26 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ale ainda estou quebrando a cabeça, pois queria deixar esse codigo o mais didático possível...

Desta forma peço que me ajude com o seguinte proposito.

1º Gostaria de criar separado um modolo de Conexão com o Banco (Access).
2º Montar a Pivot Table em um modulo separado... hoje o codigo estar assim :

Sub AleVBA_12873()

'DIM STATEMENTS

Dim strMyPath As String, strDBName As String, strDB As String, strSQL As String
Dim i As Long, n As Long, fieldCount As Long
Dim rng As Range

'instantiate an ADO object using Dim with the New keyword:
Dim adoRecSet As New ADODB.Recordset
Dim connDB As New ADODB.Connection

'--------------
'THE CONNECTION OBJECT
strDBName = "DATA_BASE_SALES_TESTE.accdb"
strMyPath = ThisWorkbook.Path
strDB = strMyPath & "" & strDBName
 
'Connect to a data source:
'For pre - MS Access 2007, .mdb files (viz. MS Access 97 up to MS Access 2003), use the Jet provider: "Microsoft.Jet.OLEDB.4.0". For Access 2007 (.accdb database) use the ACE Provider: "Microsoft.ACE.OLEDB.12.0". The ACE Provider can be used for both the Access .mdb & .accdb files.
connDB.Open ConnectionString:="Provider = Microsoft.ACE.OLEDB.12.0; data source=" & strDB

'--------------
'OPEN RECORDSET, ACCESS RECORDS AND FIELDS

Dim ws As Worksheet
'set the worksheet:
Set ws = ActiveWorkbook.Sheets("DB_Access")

Application.ScreenUpdating = 1
ws.Cells.Clear 'limpa as células

Set adoRecSet = New ADODB.Recordset 'Set the ADO Recordset object:
strTable = "bd_dados" 'Opening the table named SalesManager:
adoRecSet.Open Source:=strTable, ActiveConnection:=connDB, CursorType:=adOpenStatic, LockType:=adLockOptimistic

'Daqui pra baixo eu inclui com o intuito de após a conexão já criar a tabela direto

Dim pt As PivotTable
Dim cacheOfpt As PivotCache
Dim pf As PivotField
Dim pi As PivotItem

On Error Resume Next
Sheets("DB_Access").Select
ActiveSheet.PivotTable("MyPt").TableRange2.Clear

Set cacheOfpt = ActiveWorkbook.PivotCaches.Create(xlExternal, strDBName)

Sheets("DB_Access").Select
Set pt = ActiveSheet.PivotTables.Add(cacheOfpt, Range("a2"), "MyPT")

adoRecSet.Close
'close the objects
connDB.Close

'destroy the variables
Set adoRecSet = Nothing
Set connDB = Nothing
ws.Columns(4).EntireColumn.Delete
ActiveWorkbook.RefreshAll
Application.ScreenUpdating = 1
End Sub

se puder colocar em cada linha o que deve ser incluso por favor.

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

 
Postado : 01/09/2014 12:35 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!!

Porque separar a conexão, não haverá perda de performance no VBA

Se poder postar seu arquivo modelo, da forma como você tentou adaptar, tente explicar sua dúvida, pois eu ainda não compreendi :?

Att

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

 
Postado : 01/09/2014 12:52 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Certo ...

Estou postando o arquivo que havia me mandado anteriormente, o que você fez foi trazer o banco de dados para uma aba dentro da planilha para gerar uma pivot table.

O que eu gostaria de fazer é criar já a pivot table com a fonte (source) direto do Access ...

Comentei de fazer a conexão separada para que se eu fosse criar mais outra pivot table para mais alguma coisa eu já soubesse onde encaixar a conexão e depois só fazer os campos da pivot table sem precisar fazer todo o codigo da conexão novamente.

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

 
Postado : 02/09/2014 6:39 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!!

Antes que eu possa de responder de forma mais precisa (vou precisar de um tempo para ver seu caso), porque não usar os recurso obter dados externo do Access?
Para mais veja meus links em:
viewtopic.php?f=10&t=12926

Att

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

 
Postado : 02/09/2014 8:26 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Alexandre,

dei uma olhada no topico, mas não ajudou muito... tem mais a parte de consolidação de tabelas

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

 
Postado : 03/09/2014 5:38 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!!

Comentei de fazer a conexão separada para que se eu fosse criar mais outra pivot table para mais alguma coisa eu já soubesse onde encaixar a conexão e depois só fazer os campos da pivot table sem precisar fazer todo o codigo da conexão novamente.

Quando exportamos dados externos do Access para o Excel podemos optar por criar uma Tabela Dinâmica (onde a base não precisará ficar no excel e sim dentro do Access).

http://www.howtogeek.com/80118/import-m ... o-excel-2/

Att

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

 
Postado : 03/09/2014 6:13 am