Notifications
Clear all

Procurar colunas preenchidas para popular ListView

15 Posts
3 Usuários
0 Reactions
2,256 Visualizações
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Olá queridos amigos do fórum,
Venho aqui novamente pedir ajuda aos nobres colegas.

Tenho a seguinte rotina para preencher um ListView com dados de linhas preenchidas na Coluna A:

LastRow = Plan1.Cells(Rows.Count, "a").End(xlUp).Row
ListView1.ListItems.Clear
        
For X = 2 To LastRow
      Set li = ListView1.ListItems.Add(Text:=Plan1.Cells(X, "a").Value)
 Next

O que eu preciso é preencher o ListView com dados de linhas preenchidas de acordo com as colunas. Ou seja,

Ao invés do código andar para baixo pegando as linhas preenchidas, assim:

Linha1
Linha2
Linha3
Linha4
(sempre para baixo)

Ele ande da esquerda para a direita pegando as colunas preenchidas, assim:

Coluna1 > Coluna2 > Coluna3 > Coluna4
(sempre da esquerda para a direita)

Tem um arquivo em anexo para ilustrar melhor a minha dúvida.

 
Postado : 28/04/2014 8:31 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

bilokas,

Boa Tarde!

Veja se assim lhe atende.

 
Postado : 28/04/2014 9:34 am
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Obrigado pela resposta wagner.

O modelo que você propôs não atende o problema.

Vou tentar explicar de uma forma mais direta:

Preciso preencher o ListView com a quantidade de colunas preenchidas.

No caso imagine que tem 10 colunas preenchidas, na linha 2.
Então o código identifica o conteúdo dessas 10 colunas na linha 2 e lista na coluna A do ListView.

 
Postado : 28/04/2014 10:10 am
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Para ficar mais claro, O código tem que listar na coluna A do ListView todas as colunas preenchidas na linha 2 por exemplo.

 
Postado : 28/04/2014 10:14 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Para ficar mais claro, poderão haver colunas em branco?

Tipo: A, B, C, D, E preenchidas

Coluna F em branco

Colunas G, H, I preenchidas

 
Postado : 28/04/2014 10:32 am
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Não, JoseA. Não vai ter colunas em branco no meio.

 
Postado : 28/04/2014 10:38 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 
Option Explicit
Private Const NomePlanilha As String = "Plan1"
Private Const LinhaCabecalho As Integer = 1

Private Sub UserForm_Initialize()
PreencherCabeçalhoLinhas
End Sub
Private Sub PreencherCabeçalhoLinhas()
    'Desenvolvida por: Tomás Vásquez
    'Adaptada por: José Arnaldo
    'Implementado por: Mauro Coutinho
    
        Dim ws As Worksheet
        Dim coluna As Integer
        Dim linha As Integer
        Set ws = ThisWorkbook.Worksheets(NomePlanilha)
        coluna = 1
        linha = LinhaCabecalho
        
    Me.ListView1.ListItems.Clear
    Me.ListView1.ColumnHeaders.Clear
    
    Dim itm As ListItem, n As Long, lngCol As Long
    Dim vardata As Variant
    
    vardata = Range("A1").CurrentRegion.Value
        
        With ws
            While .Cells(linha, coluna).Value <> Empty
                   With ListView1
                     .View = lvwReport
                     .Gridlines = True
                     .ColumnHeaders.Add Text:=ws.Cells(linha, coluna), Width:=ws.Cells(linha, coluna).Width
                   
                   End With
                coluna = coluna + 1
            Wend
            
            'Preenche as Linhas
            With ListView1
                    For n = 2 To UBound(vardata)
                        Set itm = .ListItems.Add(n - 1, , vardata(n, 1))
                        For lngCol = 2 To UBound(vardata, 2)
                            itm.ListSubItems.Add , , vardata(n, lngCol)
                        Next lngCol
                    Next n
                End With
            
        End With

    End Sub

Elaborado com ajuda do nosso brilhante amigo Mauro Coutinho
http://www.tomasvasquez.com.br/forum/viewtopic.php?f=17&t=1688

 
Postado : 28/04/2014 10:49 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Me esqueci de um ponto importate, não irá funcionar se a primeira linha estiver mesclada - como no exemplo que voce anexou. Repita o título para cada coluna. ;)

Perceba que a largura das linhas no ListView são auto ajustadas as da plan.

 
Postado : 28/04/2014 10:59 am
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Obrigado por responder joseA, mas ainda não é exatamente isso.
Vou mostrar uma imagem para tentar explicar de uma forma ilustrativa.

É EXATAMENTE isso que eu quero que o ListView exiba.

 
Postado : 28/04/2014 11:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Querias que a partir da coluna C fosse carregado para o controle na forma de linhas, isso idependente do nº de colunas preenchidas. Certo?

Demandaria tempo, depois posso até tentar (sem tempo agora). ;)

 
Postado : 28/04/2014 11:36 am
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Não joseA, não é isso. Não sei mais como explicar.

A partir da coluna D, TUDO que estiver preenchido nas COLUNAS seguintes APENAS na linha 2 por exemplo, seja exibido numa única coluna em um ListView.

Não sei como ser mais objetivo na minha dúvida do que isso.

 
Postado : 28/04/2014 11:45 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Ok.

Veja se é assim.

 
Postado : 28/04/2014 12:38 pm
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Wagner, simples o funcional. Era exatamente isso que eu precisava.

Obrigado mais uma vez pela ajuda!

 
Postado : 28/04/2014 12:46 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

No caso, faltaram informações. Sua planilha vai ter sua uma linha preenchida mesmo?

Resolvido. Assim também, já que me deu trabalho. :D

Private Sub UserForm_Initialize()
Dim linha, coluna As Integer
Dim C As Variant
Dim li As ListItem
linha = 2
coluna = 2
    With ListView1
        .Gridlines = True
        .View = lvwReport
        .ColumnHeaders.Add Text:="ANEXOS", Width:=120
    End With

For Each C In Plan1.Range(Cells(linha, coluna), _
Cells(linha, Plan1.Range("A1").End(xlToRight).Column))
            Set li = ListView1.ListItems.Add(Text:=C)
Next C
End Sub
 
Postado : 28/04/2014 1:48 pm
(@bilokas)
Posts: 168
Reputable Member
Topic starter
 

Obrigado por responder joseA, o Wagner já tinha dado uma solução, mas também testei a sua e funcionou.

Bom fica as duas sugestões ai para o fórum como forma de conhecimento e dúvida de futuros usuários.

 
Postado : 29/04/2014 6:19 am