VBA -Un TCD multi folhas, sem TDC, através de macro

Dezembro 2016



Introdução


Nós veremos aqui a utilização das chaves do objeto « Dictionary » em uma variável de duas dimensões.
Isto tem um ar « bárbaro », mas na verdade, permite criar facilmente e rapidamente uma folha de recapitulação de uma planilha completa.

A planilha de base


Uma planilha de vendas, por mês, vendedores e produtos vendidos.
Na planilha, 12 folhas, uma por mês.
Em cada uma dessas folhas, três colunas são completadas :
- Coluna A : os nomes dos vendedores,
- Coluna B : os nomes dos produtos vendidos,
- Coluna C :a quantidade.

O código VBA


Para integrar na sua planilha copie o código todo abaixo, ALT+F11, Inserção/Módulos, e colar o código. Para utilizar, fechar a janela Visual Basic Editor para voltar à sua planilha, depois: ALT+F8, escolher "RecapComSomaDasColunasC" depois clique em "Executar".
À adaptar :
- o nome da folha de recapitulação ("Recap" no exemplo)
- as Colunas "fontes " dos dados, A, B et C no exemplo

Opção Explicit 

Sub RecapComSomaDesColunaC() 
Dim Folha As Worksheet, i As Long 
Dim TablVendedores(), DicoVendedores As Object 
Dim TablVendas(), DicoVendas As Object 
Dim Somas() 

Set DicoVendedores = CreateObject("Scripting.Dictionary") 
Set DicoVendas = CreateObject("Scripting.Dictionary") 

'*******PREENCHIMENTO DOS OBJETOS DITIONARY E VARIÁVEIS******* 

'preenchimento das etiquetas de linhas e de colunas sem duplicatas 
For Each Folha In ThisWorkbook.Worksheets 
    If Folha.Name <> "Récap" Then 
        With Folha 
            TablVendedores = .Range("A2", .Range("A" & Rows.Count).End(xlUp)) 
            For i = LBound(TablVendedores, 1) To UBound(TablVendedores, 1) 
                If Not DicoVendedores.exists(TablVendedores(i, 1)) Then DicoVendedores.Add TablVendedores(i, 1), TablVendedores(i, 1) 
            Next i 
            TablVendas = .Range("B2", .Range("B" & Rows.Count).End(xlUp)) 
            For i = LBound(TablVendas, 1) To UBound(TablVendas, 1) 
                If Not DicoVendas.exists(TablVendas(i, 1)) Then DicoVendas.Add TablVendas(i, 1), TablVendas(i, 1) 
            Next i 
        End With 
    End If 
Next Folha 
'preenchimento da variável 2D graças as chaves do Dictionary 
ReDim Somas(1 To DicoVendedores.Count, 1 To DicoVendas.Count) 
For Each Folha In ThisWorkbook.Worksheets 
    If Folha.Name <> "Recap" Then 
        With Folha 
            For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row 
                Somas(Application.Match(.Cells(i, 1), DicoVendedores.keys, 0), Application.Match(.Cells(i, 2), DicoVendas.keys, 0)) = Somas(Application.Match(.Cells(i, 1), DicoVendedores.keys, 0), Application.Match(.Cells(i, 2), DicoVendas.keys, 0)) + .Range("C" & i).Value 
            Next i 
        End With 
    End If 
Next Folha 

'*******RESTITUTIÇÃO DOS DADOS ******* 

With Sheets("Recap") 
    .Range("A2").Resize(DicoVendedores.Count, 1) = Application.Transpose(DicoVendedores.keys) 
    .Range("B1").Resize(1, DicoVendas.Count) = DicoVendas.keys 
    .Range("B2").Resize(UBound(Somas, 1), UBound(Somas, 2)) = Somas() 
End With 
End Sub

Download


Você pode baixar a planilha fonte exemplo



Tradução feita por Ana Spadari

Veja também

Artigo original publicado por . Tradução feita por ninha25. Última modificação: 1 de agosto de 2013 às 16:54 por ninha25.
Este documento, intitulado ' VBA -Un TCD multi folhas, sem TDC, através de macro ', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.