CASELLE COMBINATE EXCEL



  • CASELLE COMBINATE EXCEL
    di MotherVodka (utente non iscritto) data: 02/07/2015 13:25:47

    Ragazzi Io ho un progetto molto lungo ma sinceramente sono incapace di realizzarlo da solo quindi se qualcuno con un pò di pazienza e voglia di seguirmi spero mi aiuti !
    Per iniziare vi chiedo come faccio a creare una Combo Box che mi estrapoli determinati dati dal database (l'anno) in modo univoco e non ripetuto visto che ho circa 2mila dati da verificare. vorrei semplicemente che mi suddividesse questi per anno. diciamo che che ho su 2mila dati 4 anni diversi (2010-2011-2012-2013 ) e visto che si ripetono centinaia di volte vorrei semplicemente che mi mostrasse solo una di queste date UNA VOLTA SOLA !



  • di alfrimpa data: 02/07/2015 13:45:54

    Ciao MotherVodka





    Giusto per cominciare con la sottostante macro, supponendo che sul foglio1 ci sia una ComboBox1 e da A1 ad An ci sia un elenco di voci con duplicati, carica nella combo solo i dati univoci.





    Alfredo
     

     

     
    Sub CreaElencoUnivoco()
     Dim CL As Range, Intervallo As Range, Elenco As New Collection
     Dim Valori As Variant
     Worksheets("Foglio1").Select
     Set Intervallo = Range("A1", Range("A1").End(xlDown))
     On Error Resume Next
     For Each CL In Intervallo
        Elenco.Add CL.Value, CStr(CL.Value)
     Next
     On Error GoTo 0
     With Worksheets("Foglio1")
        .ComboBox1.Clear
        For Each Valori In Elenco
            .ComboBox1.AddItem Valori
        Next
     End With
     End Sub
    






  • di Vecchio Frac data: 02/07/2015 14:50:54

    Un'alternativa, dove la parte interessante non è tanto recuperare i valori univoci (Alfredo usa una Collection, io un Dictionary) ma infilare di botto tutti questi valori univoci nella combobox (mediante il metodo List).
     
    Option Explicit
    
    Sub fill_combo_with_uniques()
    Dim v As Variant
    Dim dict As Object, rng As Variant, i As Long, last_row As Long
        
        Set dict = CreateObject("Scripting.Dictionary")
        last_row = Cells(Rows.Count, 1).End(xlUp).Row
        rng = Range("A1:A" & last_row)
        For i = 1 To UBound(rng, 1)
            dict(rng(i, 1)) = 0
        Next i
        v = Application.Transpose(dict.keys)
        
        Load UserForm1
        With UserForm1
            .ComboBox1.List = v
            .Show
        End With
            
    End Sub
    






  • di alfrimpa data: 02/07/2015 15:00:29

    Ciao Francesco

    Mi puoi spiegare cortesemente, per sommi capi, la differenza tra la mia e la tua sub?

    La mia in caso di numero esorbitante di dati andrebbe in difficoltà o che altro?

    Grazie

    Alfredo





  • di Vecchio Frac data: 02/07/2015 15:50:54

    Non ho provato su un numero "esorbitante" di dati ma non credo sia user friendly (decine di righe in una combo? centinaia? di più? pensa al povero utente che deve aprire un menu a tendina composto di cento elementi!!)
    La differenza sta nella velocità di esecuzione: il tuo codice carica con AddItem un valore alla volta e lo aggiunge al combobox, il metodo List spara in una volta sola l'array di valori direttamente nella origine dati del controllo. Tutto qui.





  • di alfrimpa data: 02/07/2015 15:57:01

    Quindi per un basso numero di elementi univoci i due metodi sono equivalenti?

    Io penso che ci dovremmo ritrovare in questo caso anche perchè se fosse diversamente MotherVodka non avrebbe pensato ad una combobox (almeno credo)

    Alfredo





  • di Vecchio Frac data: 02/07/2015 16:39:03

    cit. "i due metodi sono equivalenti? "
    ---> Sono equivalenti in ogni caso, perchè lo scopo è popolare la combobox :)





  • di MotherVodka (utente non iscritto) data: 02/07/2015 17:16:16

    Vi ADORO !!! grazie il primo step fatto grazie a voi :))))