Inquiridor
VBA - Localizar e Copiar grupo de Células

Pergunta
-
Olá a todos!
Estou tentando montar uma macro da seguinte maneira:
Tenho em uma Aba de uma Planilha uma longa base de dados.
Preciso copiar para outra Aba da Planilha trechos específicos desta base de dados.
Em outra Aba estou montando o critério de seleção da seguinte maneira.
Nos campos abaixo de Descrição(Coluna C) e Serviço(Coluna B) há uma lista suspensa. Quando selecionada uma opção e Clicar no botão Detalhe (Botão da Macro), traga para uma 3° Aba da planilha um trecho da Base de Dados de acordo com o critério de seleção.
I-----------------------------------------------------------------------------------------------------l
I l Critério l
I_______________________________________________________________l
I Serviço l Descrição l Unidade l Preço
I_______________________________________________________________l
I 12.02.02.0002 l Chapisco l l
I_______________________________________________________________l
Por exemplo:
Selecionando Serviço: 12.02.002 ou Descrição: Chapisco, copie para a 3° Aba apenas a parte selecionada. No caso seria 6L x 9C. Obs: O Número de linhas varia de acordo com a Descrição.
Entre cada Atividade a uma linha em branco de separação. Penso que seria possível utilizar está linha para limitar a faixa de Células a ser copiada.
--------------------------------------------------------------------------------------------------------------------
lSERVIÇO Descrição Unidade Preço
l________________________________________________________________________
l12.02.002 CHAPISCO jul/12
l________________________________________________________________________
lCódigo l Descrição Unidade Coeficiente Preço Sub Total
l________________________________________________________________________
l10139 l PEDREIRO H 0,1 5,54 0,554
l________________________________________________________________________
l10146 l SERVENTE H 0,15 4,48 0,672
l________________________________________________________________________
l20503 l AREIA M3 0,00394 82,6 0,32544
l________________________________________________________________________
l20508 l CIMENTO KG 1,575 0,38 0,5985
l________________________________________________________________________
lMão Obra: 1,226 *LS:1,49572 SubMO: 2,72172
l________________________________________________________________________
lMateriais: 0,92394 *BDI:0,8385 TOTAL: 4,48
--------------------------------------------------------------------------------------------------------------------Linha de Separação
--------------------------------------------------------------------------------------------------------------------
lSERVIÇO Descrição Unidade Preço
l________________________________________________________________________
l12.02.005 EMBOÇO jul/12
l________________________________________________________________________
lCódigo l Descrição Unidade Coeficiente Preço Sub TotalObs: Gostaria de inserir imagens para melhor compreensão mas, não consegui.
Desde já, muito obrigado!
Todas as Respostas
-
Frank, não consegui entender seu exemplo. Para melhor compreensão, sugiro disponibilizar sua pasta de trabalho fazendo upload num site como SendSpace.com ou SkyDrive.com e colar o link aqui.
Antecipando um pouco, já experimentou utilizar a ferramenta Filtro Avançado do Excel? Se não, sugiro que dê uma olhada.
Extrapolando um pouco, você pode também utilizar instruções SQL para filtrar dados de sua base, mostrando resultados de uma planilha em outra, como mostrado em: http://www.ambienteoffice.com.br/excel/consultas_sql_no_excel/
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
Coloquei no SkyDrive. https://skydrive.live.com/redir?resid=8E580EFD20D78012!114&authkey=!ABHw1LGDMreMxc4
Estou usando Filtro Avançado mas, não consegui fazer o que precisava...
A longa base de dados que mencionei à cima (Aba Dados Detalhados) vai ficar longa quando eu terminar de copiar os dados da Net (Site FDE). Deve haver um modo mais fácil porém, estou copiando manualmente
Olhei o link do SQL e achei interessante. Mas, nunca usei SQL e me surgiram dúvidas do tipo: É possível Criar lista suspensa como critério de seleção ou precisa escrever todo aquele campo?
Obrigado pela ajuda!
-
Não entendi muito bem sua pergunta que envolve lista suspensa e instrução SQL.
Sobre sua dúvida inicial, use o código abaixo:
Sub Exemplo() Const CsSaída As String = "Saída" Const CsDados As String = "Dados Detalhados" Dim lRow As Long Dim wsDados As Worksheet Dim wsSaída As Worksheet With ThisWorkbook Set wsDados = .Sheets(CsDados) Application.DisplayAlerts = False On Error Resume Next .Sheets(CsSaída).Delete On Error GoTo 0 Application.DisplayAlerts = True wsDados.Copy Before:=ThisWorkbook.Sheets(1) Set wsSaída = .Sheets(1) wsSaída.Name = CsSaída End With With wsSaída For lRow = .Cells(.Rows.Count, "E").End(xlUp).Row To 5 Step -1 If IsNumeric(.Cells(lRow, "E")) = False Or .Cells(lRow, "J") = "" Then .Rows(lRow).Delete End If Next lRow End With End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
Acho que não consegui explicar direito ou estou fazendo alguma coisa errada no uso código acima.
O que eu preciso é que:
Indo na Aba "Saída", selecionando no Critério de Seleção por exemplo:
Descrição = Chapisco (Lista Suspensa com todos os Nomes das Atividades) ou Serviço= 12.02.002 (Lista Suspensa com os Códigos) ao clicar no Botão "Detalhe" a Macro vá até a Aba "Dados Detalhados" e copie para a Aba "Detalhes" os dados referentes apenas a esta atividade (Conforme exemplo que coloquei no Arquivo agora)
A linha amarela é a separação entre as atividades. É o que tem ser copiado para a Aba "Detalhe" segundo a seleção feita no "Critério"
OBs: A lista Suspensa e os botões da Marcro (Aba "Saída de Dados") pelo que percebi são retirados quando é feito o download do arquivo no SkyDrive....
Muito Obrigado pela ajuda!
- Editado frank.alves segunda-feira, 26 de novembro de 2012 12:43
-
Você explicou certo, eu interpretei errado.
Para o que deseja fazer, não é válido o uso de filtro avançado.
Experimente utilizar o código abaixo:
Sub Exemplo() Const csOutput As String = "Saída" Const csData As String = "Dados Detalhados" Const clRowOutput As Long = 7 Dim lData As Long Dim wsData As Worksheet Dim lOutput As Long Dim wsOutput As Worksheet Dim rArea As Range Dim rTotal As Range With ThisWorkbook Set wsData = .Sheets(csData) Set wsOutput = .Sheets(csOutput) End With lOutput = clRowOutput wsOutput.Rows(clRowOutput).Resize(wsOutput.Rows.Count - clRowOutput + 1).Delete wsOutput.Columns("D").NumberFormat = "MMM/yyyy" With wsData For lData = 4 To .Cells(.Rows.Count, "F").End(xlUp).Row If .Cells(lData, "F") = "Descrição" Then Set rArea = .Cells(lData, "F").CurrentRegion Set rTotal = rArea.Find(What:="TOTAL:").Offset(, 1) wsOutput.Cells(lOutput, "B") = .Cells(lData + 1, "E") wsOutput.Cells(lOutput, "C") = .Cells(lData + 1, "F") wsOutput.Cells(lOutput, "D") = .Cells(lData + 1, "G") wsOutput.Cells(lOutput, "E") = rTotal lOutput = lOutput + 1 lData = lData + rTotal.Rows.Count + 1 End If Next lData End With wsOutput.Columns.AutoFit End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
Ainda não é isso bem isso.
O código acima está gerando como saída apenas os títulos de todas as atividades.
Mas oque eu precisaria é a descrição de apenas uma por vez. No SkyDrive o exemplo da saída desejada está na aba "Detalhes".
Esta é a saída para Descrição = Chapisco ou Serviço= 12.02.002.
Estes dados vieram da Aba "Dados Detalhados".
Coloquei no Sendspace o arquivo completo. http://www.sendspace.com/file/5gv3wf
Muito grato pelo Auxílio!- Editado frank.alves terça-feira, 27 de novembro de 2012 05:04
-
É, realmente não entendi o que deseja fazer.
Você quer que, simplesmente, ao clicar em alguma linha da planilha Dados, seja mostrado os detalhes de um serviço na planilha Detalhes?
Para que servem as planilhas Saída e Plan1?
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
Quase isso. O Critério de seleção está na Planilha Saída.
A planilha Saída é o filtro. Portanto, ao selecionar alguma Descrição ou Serviço e clicando no botão Detalhe desta mesma aba, seja mostrado os detalhes deste serviço na planilha Detalhes.
Se voce consegui ver o arquivo do SendSpace ele está completo.
O botão Filtrar e Limpar estão +ou- ok. A macro do botão Detalhes não consegui fazer.
Plan1 é um rascunho. Uso para copiar e ajustar os dados manualmente do FDE (http://www.fde.sp.gov.br/PagesPublic/InternaFornecedores.aspx?contextmenu=listpre). Depois de ajustados, colo estes dados na Planilha "Dados Detalhados".
Obrigado!
- Editado frank.alves quinta-feira, 29 de novembro de 2012 12:48