Notifications
Clear all

Criar Filtros e Imprimir ( Mais uma vez )

17 Posts
2 Usuários
0 Reactions
19.9 K Visualizações
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Pessoal bom dia me perdoa por ter aberto outro post mais não tive outra escolhar
pesquisei achei dicas e tudo mais tentei de todas as formas confeço que não conseguir adaptar a minha planilha as dicas encontrada aqui e em outro forum
preciso criar um filtro com intervalo de data e nome tudo junto, a quero que o filtro tenha a seguinte condição exemplo: 01/02/2012 a 17/02/2012 do contratante BUNG se tiver algo com esses criterios filtra e me mostra na listview para imprimir os mesmo
se não retorna vazio
vou anexa a planilha com as adaptações para melhor entendimento.

Obs. Pessoal o nome do formulario é FrmImpressaoSoja e o nome da planilha que eu quero filtra é SAIDA os campos que eu desejo filtra são DATA e CONTRATANTE
obrigado.

At.
Araujo

 
Postado : 25/02/2012 9:02 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Confira esse link: http://www.tomasvasquez.com.br/forum/viewtopic.php?f=5&t=981&start=10

 
Postado : 25/02/2012 11:47 am
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Confira esse link: http://www.tomasvasquez.com.br/forum/viewtopic.php?f=5&t=981&start=10

Boa tarde Jose obrigado por responde,
meu caro ja tentei de varias vezes adaptar meu projeto a esse exemplo seu nesso topico ai do TOMAS não conseguir, acabei recorrendo a outros exemplos que tambem não deu certo obrigado mais uma vez.

At.
Marcelo Araujo

 
Postado : 25/02/2012 12:20 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

...me perdoa por ter aberto outro post mais não tive outra escolhar...

Deverias ter continuado no mesmo tópico. Teste a instrunção abaixo.

  Application.EnableEvents = False
        
        Dim lastRow As Long
        Dim lastResultRow As Long
        Dim X As Long
        
        ' Verifica qual a ultima célula preenchida
        lastRow = Plan17.Cells(Rows.Count, 1).End(xlUp).Row
        
        
        lastResultRow = 2 'linha resultado
            Me.LstConsultaSojaSaida.ListItems.Clear

        ' Ciclo em todas as linhas
        For X = 2 To lastRow '1 Linha dados pequisa
        
           ' verifica se o valor é igual ao da pesquisa
           If CDate(Plan17.Cells(X, 3).Value) >= CDate(txtDataInicial.Value) And CDate(Plan17.Cells(X, 3)) <= CDate(txtDataFinal) And Plan17.Cells(X, 6).Value = Me.ComboBox1 Then
        
                ' Copia os valores
                LstConsultaSojaSaida.ListItems.Add 1, , Plan17.Cells(X, 2).Value 'Ticket
                LstConsultaSojaSaida.ListItems(1).ListSubItems.Add 1, , Plan17.Cells(X, 3).Value 'Data
                LstConsultaSojaSaida.ListItems(1).ListSubItems.Add 2, , Plan17.Cells(X, 4).Value 'Placa
                LstConsultaSojaSaida.ListItems(1).ListSubItems.Add 3, , Plan17.Cells(X, 5).Value 'MOTORISTA
                LstConsultaSojaSaida.ListItems(1).ListSubItems.Add 4, , Plan17.Cells(X, 6).Value 'CONTRATANTE
                LstConsultaSojaSaida.ListItems(1).ListSubItems.Add 5, , Plan17.Cells(X, 7).Value 'TARA
                LstConsultaSojaSaida.ListItems(1).ListSubItems.Add 6, , Plan17.Cells(X, 8).Value 'PESO BRUTO
                LstConsultaSojaSaida.ListItems(1).ListSubItems.Add 7, , Plan17.Cells(X, 9).Value 'UNID.
                LstConsultaSojaSaida.ListItems(1).ListSubItems.Add 8, , Plan17.Cells(X, 10).Value 'IMPUR.
                LstConsultaSojaSaida.ListItems(1).ListSubItems.Add 8, , Plan17.Cells(X, 11).Value 'AVAR.
                LstConsultaSojaSaida.ListItems(1).ListSubItems.Add 10, , Plan17.Cells(X, 12).Value 'PESO LIQ. BRUTO
                LstConsultaSojaSaida.ListItems(1).ListSubItems.Add 11, , Plan17.Cells(X, 13).Value 'TOTAL DE DESC.
                LstConsultaSojaSaida.ListItems(1).ListSubItems.Add 12, , Plan17.Cells(X, 14).Value 'PESO LIQ. CORRIGIDO
                
                lastResultRow = lastResultRow + 1
           End If
        Next
        
    Application.EnableEvents = True
 
Postado : 25/02/2012 1:03 pm
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Opa.. certo jose obrigado funcionou, e sobre o topico que tinha fechado e pporque achei que com os exemplos eu conseguiria resolver
mais uma vez obrigado e vai desculpando ai
te mais

At.
Araujo

 
Postado : 25/02/2012 1:40 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Araujo, apesar do Jose já ter dito, a intenção não é somente manter um pouco de ordem no Forum, mas tambem procurar o numero de anexos, uma vez que se paga pelo espaço ocupado, e não são muitos foruns que deixam anexar os arquivos.
Realemnte você poderia continuar no mesmo, independente de ter resolvido ou não, é só fazer uma obs.

Voltando a esta questão, o que alguns participantes no Forum não entendem é que toda colaboração é expontanea, gratuita e alem de depender da boa vontade de cada um, tambem temos o fator tempo.
No outro Tópico eu havia começado a trabalhar em seu modelo, mas são tantas contribuições que acabamos ajudando nas mais simples deixando as que são um pouco mais complexas para depois e eu não havia conseguido retornar para concluir.

De qualquer forma, apesar de já terem dado como resolvido, vou postar a minha contribuição de filtrar pelos criterios Datas : Inicial, Final, Inicial e Texto, Inicial e Final e Inicial/Final e Texto, a diferença das instruções que o José passou é que neste exemplo utilizamos os criterios com o ListView já preenchido e não utilizamos.
Para facilitar o entendimento, pois as rotinas são varias, criei um novo modelo somente com uma aba, mas não será dificil de adaptar.
Outra questão seria você fazer varios testes com as instruções que o José passou e este para ver se temos perda de tempo nas filtragens.

Criterios de Filtragem em Listview, Datas e texto

[]s

 
Postado : 25/02/2012 2:13 pm
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Mauro perço-lhe desculpas pelo ocorrido, não me atentei que voce estaria trabalhando na minha duvida, agradeço de verdade pela sua contribuição
antes de vim aqui no forum eu sempre tento buscar outras fontes no google e por ai vai somente ai tento aqui no forum sei que todos aqui tem suas responsabilidades diarias e por isso mais faço essas pesquisa, justamente por saber das responsabilidades de todos agradeço a compreenção e atenção e mais uma vez perço-lhes desculpas a todos obrigado e logo mais estsrei postando as minhas planilhas que tanto voces me ajudaram aqui. obrigado

At
Marcelo Araujo

 
Postado : 25/02/2012 3:04 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

:o O quê é isso Mauro?? :o

Cara ficou D+. Isso não é uma ajuda é um verdadeiro tutorial. :lol:

Acredita que pensei nessa opção do remove item e de preenchimento. Optei pela maneira mais fácil. Fico impressionado pela organização e dedicação dos seus script's, os meus saem todos largados. :oops:

Já faz parte do meu acervo (biblioteca), com certeza usarei muito.

Obrigado por nos presentear.

Araújo,

Para imprimir penso que o ideal seria fazer um loop pelo controle e lançar os dados para uma plan. Se não consegui informe. ;)

 
Postado : 25/02/2012 4:05 pm
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Jose Boa tarde, quero agradecer a voce e ao mauro adaptei a funções passada por ambos para meu projeto ficou muito baum ficou otimo ou melhor ficou exelente
como voce me deu a deixa sobre a impressão então preciso tambem imprimir os dados filtrados vc me faloou de um loop e compiar os dados para outra planilha
poderia me auxiliar sobre o mesmo, pesquisei por ai mais não achei nada que me ajudace a imprimir os dados filtrato no listview achei soluções vagas mais nao foi o suficiente, sera que voce pode nos dar essa luz abraço
e agradeço pela atenção..

At.
Araujo

 
Postado : 26/02/2012 12:44 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Araujo, baseado no modelo que anexei, utilize a rotina abaixo para Imprimir os dados do ListView:

Primeiro crie uma nova aba com o nome "Relatorio", e copie o Cabeçalho da aba Saida para a aba Relatorio;

Segundo, no Formulário, em Declaração, adicione a constante:

Private Const NomePlanRelatorio As String = "Relatorio"

Terceiro : Crie um novo "CommandButton" e nomeie para cmbPrint e cole a rotina :

Private Sub cmbPrint_Click()
    Dim iLin As Integer
    Dim rgCellInicio As Range
    Dim wsRelat As Worksheet
    Dim UltimaLinha As Long
    
    Set wsRelat = ThisWorkbook.Worksheets(NomePlanRelatorio)

    UltimaLinha = wsRelat.UsedRange.Rows.Count
    
    wsRelat.Range("A2:" & "G" & UltimaLinha).ClearContents
    
    Set rgCellInicio = wsRelat.Range("A65536").End(xlUp).Offset(1, 0)

        'recuperar dados
         Dim i As Integer, j As Integer
            
            'Loop nas linhas
            For i = 1 To ListView1.ListItems.Count
                
                iLin = iLin + 1
                
                        rgCellInicio.Cells(iLin, 1).Value = ListView1.ListItems(i).Text
                
                    'Loop nas colunas
                    For j = 1 To ListView1.ColumnHeaders.Count - 1
                        rgCellInicio.Cells(iLin, j + 1).Value = ListView1.ListItems(i).ListSubItems(j).Text
                    Next j
            Next i

End Sub

Abaixo temos outros exemplos desenvolvidos pelo José com a opção de checkbox(s), e enviamos para a aba somente os selecionados, vale a pena baixar e analizar.
ListView Transferir Dados
http://www.tomasvasquez.com.br/forum/vi ... =17&t=1124

[]s

 
Postado : 26/02/2012 3:44 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

E aí Mauro,

Apenas para seguir a mesma lógica de tratamento de dados diretamente no controle ListView, é possivel preencher o ComboBox "cboContratante" pelos dados diretamente sem ser da plan.

Sub PreencherComboBox()
'Por José Arnaldo
    Dim n As Long, texto As Variant
    Dim I As Integer
    Me.cboContratante.Clear
    For n = 1 To ListView1.ListItems.Count
        If Me.ListView1.ListItems(n).ListSubItems(5) = "" Then Exit For
        If InStr(texto, Me.ListView1.ListItems(n).ListSubItems(5)) = 0 Then
            texto = texto & "|" & Me.ListView1.ListItems(n).ListSubItems(5) '& "|"
        End If
    Next
        texto = Split(texto, "|")
    For I = 1 To UBound(texto)
        cboContratante.AddItem texto(I)
    Next
Call OrdenarComboBox
End Sub

Sub OrdenarComboBox()
Dim iForsta, iSista As Integer
Dim I, j As Integer
Dim sTemp As String

iForsta = 0
iSista = cboContratante.ListCount - 1

For I = iForsta To iSista - 1
    For j = I + 1 To iSista
        If cboContratante.List(I) > cboContratante.List(j) Then
            sTemp = cboContratante.List(j)
            cboContratante.List(j) = cboContratante.List(I)
            cboContratante.List(I) = sTemp
        End If
    Next j
Next I
End Sub

Depois acrescentar como última linha no Botão Preencher

Call PreencherComboBox

Trazerá o nome dos contratantes sem repetir e ordenará, isso diretamente do controle ListView. Retirar o carregamento do evento Initialize do Form.

Abraços.

 
Postado : 26/02/2012 5:25 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Muito boa a implementação José, eu não havia pensado nisto, quando fiz o exemplo, procurei tratar mais da questão do Filtro das Datas e Texto, sem me preocupar com o preenchimento do Combo.

E o Botão "Preencher ListView" separado, foi mais para poderem acompanhar e entenderem como funciona o preenchimento.

Sendo assim com esta dica, podemos utilizar no evento Initialize do formulário a chamada abaixo, e o Botão "Preencher ListView" só para um novo preenchimento sem ter de recarregar o userform.

Private Sub UserForm_Initialize()
    Call PreencherCabeçalhoLinhas
    Call PreencherComboBox
End Sub

Grato pela colaboração.

Editando. . . :
Aproveitando as novas dicas do colega Jose, "reupei" o arquivo no Forum Bibliotecas, com as seguintes alterações :

Atualizado com as seguintes implementações:
- Verificação dos Campos para preenchimento Obrigatório
- Opção para Imprimir, passando do ListView para aba Relatorio (Solicitado pelo M Araujo)

Sugerido pelo colega JoseA
- Preenchimento do ListView no carregamento do Form;
- Preenchimento automático do Combo Contratante com valores Únicos e ordem Alfabetica

Filtrar ListView Criterios Datas e Texto
viewtopic.php?f=21&t=3586

Assim deixamos nosso exemplo um pouco mais completo, e servirá para tirar duvidas de varios colegas quanto estas questões.

[]s

 
Postado : 26/02/2012 5:54 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Apenas para complementação.

Na

Private Sub cmbPrint_Click

Acrescente como ultimas linhas:

    Dim AreaPrint As Long
    AreaPrint = wsRelat.UsedRange.Rows.Count
    wsRelat.Activate
    frmSaida.Hide
    wsRelat.PageSetup.PrintGridlines = True
    wsRelat.PageSetup.PrintArea = "$A$1:" & "G" & AreaPrint
    wsRelat.PrintPreview
    frmSaida.Show
 
Postado : 27/02/2012 7:25 am
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Mauro bom dia tudo bem?
cara ficou otimo a sua função
so tem duas coisas que eu preciso ver com voce as colunas IMPUREZA UMIDADE E AVARIADO estão carregando data
e outra a função so roda se a planilha SAIDA estiver ativa e sobre os campos que menseionei acima
IMPUREZA, UMIDADE e AVARIADOS estarem carregando data eu não conseguir indentificar onde ocorre isso achei que era no trexo do codigo

'Preenche as Linhas
With LstConsultaSojaSaida
For n = 2 To UBound(vardata)
Set itm = .ListItems.Add(n - 1, , vardata(n, 1))
For lngCol = 2 To UBound(vardata, 2)

'verifica se é Data e formata a Coluna
If IsDate(vardata(n, lngCol)) Then
itm.ListSubItems.Add , , Format(vardata(n, lngCol), "dd/mm/yyyy")
Else
itm.ListSubItems.Add , , vardata(n, lngCol)
End If
Eu desabilitei a função acima para fazer um teste so que não carregou os dados
Fico no aguardo obrigado

At.
Marcelo Araujo

 
Postado : 28/02/2012 5:00 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Olá Pessoal,

José você respondeu neste tópico como seria realizado o filtro por datas num listview.

If CDate(Plan17.Cells(X, 3).Value) >= CDate(txtDataInicial.Value) And CDate(Plan17.Cells(X, 3)) <= CDate(txtDataFinal) And Plan17.Cells(X, 6).Value = Me.ComboBox1 Then

Fiz uma adaptação para minha necessidade para buscar por nomes, porém dessa forma só é filtrado se o nome for exatamente igual e queria que filtrasse igual num outro exemplo que você disponibilizou.

lngResultado = InStr(1, Sheets("LOCA").Cells(a, 5), strObjetoBuscar, vbTextCompare)

Este funciona da forma como gostaria, porém quando o intervalo é muito grande dá estouro na rotina.

Espero ter me feito entender.

Abraço

 
Postado : 20/05/2012 9:37 am
Página 1 / 2