none
VBA - Localizar e Copiar grupo de Células RRS feed

  • 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 Total

       

    Obs: Gostaria de inserir imagens para melhor compreensão mas, não consegui.

    Desde já, muito obrigado!

    sexta-feira, 23 de novembro de 2012 17:58

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

    sábado, 24 de novembro de 2012 22:43
    Moderador
  • 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!

    domingo, 25 de novembro de 2012 07:53
  • 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

    domingo, 25 de novembro de 2012 13:44
    Moderador
  • 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
    domingo, 25 de novembro de 2012 17:31
  • 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

    segunda-feira, 26 de novembro de 2012 22:20
    Moderador
  • 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
    terça-feira, 27 de novembro de 2012 05:01
  • É, 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

    terça-feira, 27 de novembro de 2012 08:46
    Moderador
  • 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
    terça-feira, 27 de novembro de 2012 12:15