Range combobox senza celle vuote



  • Range combobox senza celle vuote
    di Claudio (utente non iscritto) data: 29/03/2017 13:21:37

    Eccomi qui con un altro problemino. Ho un form con varie combobox. Come posso far popolare le combobox da un dato foglio definendo un range e da questo range far prendere solo le celle con contenuto?
    Attualmente riempio le combobox con il codice di sotto, ma il range è fisso e contiene sicuramente dati. Se io allargassi il range (per esempio I20:I30), ora come ora nella combobox mi apparirebbero 6 righe vuote, e io non vorrei ciò, ma questo range così grande mi permetterebbe di aggiungere dei dati al Foglio 1 senza essere costretto a modificare il codice della macro. Mi sono spiegato?
    Grazie
     
    Me.ComboBox1.List = Worksheets("Foglio1").Range("I20:I24").Value



  • di Luca73 data: 29/03/2017 13:55:51

    Forse basta
    Me.ComboBox1.List = Worksheets("Foglio1").Range("I20:I24").ColumnDifferences( _
    Comparison:=Worksheets("Foglio1").Range("XYY"))

    Dove Range("XYY") è un range Vuoto

    Ciao
    Luca





  • di Claudio (utente non iscritto) data: 29/03/2017 14:51:00

    Quindi range("XYY") potrebbe essere range("I25:I30")?
    Grazie



  • di Luca73 data: 29/03/2017 14:57:02

    una sola cella che non contiene nulla il comanda prende dal range originario "I20:I24" solo quelle celle che sono diverse da Comparison che vale ("Foglio1").Range("XYY")
    Pertanto ti basta indicare una cella nella stessa colonna che sia vuota (potrebbe essere una molto in basso tippo "I10000")

    Ciao
    Luca






  • di Luca73 data: 29/03/2017 15:11:23

    Se tutte le celle che consideri (non vuote) hanno all'interno una formula o una costante puoi usare anche

     
    Me.ComboBox1.List = Worksheets("Foglio1").Range("I20:I24").SpecialCells(xlCellTypeFormulas).Value
    
    oppure
    
    Me.ComboBox1.List = Worksheets("Foglio1").Range("I20:I24").SpecialCells(xlCellTypeConstants).Value
    






  • di Albatros54 data: 29/03/2017 15:16:03

    Scusate, se vuoi aggiungere dei dati , senza inserire delle righe vuote, mi riferisco al range del foglio dove inserisci i dati, quindi c'è continuita delle celle contenente dei dati, prova il codice sotto, senza toglie niente a Luca73(che saluto) 
    ciao
    albatros54
     
    Public Sub l()
    UR = Sheets("Foglio1").Range("I" & Rows.Count).End(xlUp).Row
    ComboBox1.ListFillRange = ("Foglio1!I1:I" & UR)
    End Sub






  • di Claudio (utente non iscritto) data: 29/03/2017 15:24:13

    Grazie Luca ed Albatros, il problema fondamentale è che il range deve essere al massimo I3:I30, perché nelle celle che seguono ci sono altri dati. Grazie



  • di Albatros54 data: 29/03/2017 17:45:50

    prova la routine sotto.
    (Cells(i, 1).Value) <<< il numero 1 si riferisce alla colonna A , adattala al tuo scopo
     
    Public Sub f()
    ComboBox1.Clear
    i = 3
     Do While i < 30
     i = i + 1
     If IsEmpty(Cells(i, 1).Value) = False Then
        ComboBox1.AddItem Cells(i, 1).Value
       End If
     Loop
    End Sub
    






  • di Oscar (utente non iscritto) data: 29/03/2017 18:50:23

    Ciao a tutti

    Prova anche lìesempio che ti ho allegato
     
    Private Sub UserForm_Initialize()
    Dim i As Integer
    For i = 1 To 10
    If Cells(i, 1) <> Empty Then
    ComboBox1.AddItem (Cells(i, 1).Value)
    End If
    Next
    End Sub



  • di Claudio (utente non iscritto) data: 29/03/2017 18:56:09

    Vi ringrazio per le risposte. Ma devo dire al programma di andare a cercare i dati nel Foglio1, quindi come glielo dico?
    Grazie



  • di Claudio (utente non iscritto) data: 29/03/2017 19:06:03

    Mi sono reso conto di avervi fatto una domanda stupida.
    Ho risolto così.
    Grazie a tutti
     
    Public Sub f()
    ComboBox1.Clear
    With Foglio1
    Dim i As Integer
    For i = 2 To 10
    If Cells(i, 9) <> Empty Then
    ComboBox1.AddItem (Cells(i, 9).Value)
    End If
    Next
    End With
    End Sub