filtro e combobox



  • filtro e combobox
    di accordix data: 17/03/2016 19:30:43

    Rieccomi con un altro problema almeno per me

    dovrei popolare una combobox con dati univoci della colonna provincia
    selezionarne una e avere le label con i nomi e citta spostandomi tra i vari record(righe) con i 2 pulsanti "<" e ">"

    allegato file con in colonna nome, citta e provincia

    non ho scritto ancora nessuna riga di codice perche non so da dove iniziare :(



  • di accordix data: 18/03/2016 19:14:15


    posso riempire la combo , andare avanti e indietro tra le righe
    ma tutte due le cose no

    un input per cominciare?



  • di patel data: 19/03/2016 07:58:51

    una volta selezionata la provincia con un cerca.verticale puoi individuare le altre voci e riportarle sulla userform





  • di accordix data: 19/03/2016 12:38:40

    cioe' ogni volta che premo "<" o ">" deve fare un cerca.vert e cercare i dati legati alla prov?
    ma se le righe sono tante e' valido lo stesso il procedimento?


     



  • di patel data: 19/03/2016 14:33:27

    il file allegato dovrebbe essere un esempio valido





  • di accordix data: 19/03/2016 17:56:07

    lo spin e' ok
    ma per visualizzare solo le righe che corrispondono alla prov selezionata nel combo?
    dovrei applicare un filtro?



  • di patel data: 20/03/2016 13:36:53

    prova il file allegato





  • di accordix data: 20/03/2016 14:09:35

    giustoooo
    hai usato una matrice



    non ci avevo minimamente pensato a questo

    Questo codice me lo puoi spiegare?
    ci sono comandi che non conosco
    che fa? 
     
    Private Sub Workbook_Open()
        Set dict = CreateObject("Scripting.Dictionary") '?????????
        With Sheets(1)
          last_row = .Cells(.Rows.Count, "D").End(xlUp).Row
          rng = .Range("D2:D" & last_row)
          For i = 1 To UBound(rng, 1)
            dict(rng(i, 1)) = 0
          Next i
          v = Application.Transpose(dict.keys) '???????????
        End With
        Load UserForm1
        With UserForm1
            .ComboBox1.List = v
            .Show
        End With
    End Sub



  • di patel data: 20/03/2016 17:03:25

    ho usato un dictionary per eliminare i doppioni, in pratica è un array che accetta soltanto valori unici tramite delle chiavi.
    v = Application.Transpose(dict.keys) 'trasferisce le chiavi in una array mono dimensionale






  • di accordix data: 20/03/2016 17:18:09

    mai visto sto dictionary
    dove posso trovare info

    ho visto che la matrice e' bidimensionale -ReDim arr(1 To lr, 1 To 3)-

    e che il secondo termine contiene i valori delle altre celle della riga
    se e' cosi, se ci sono altre colonne basta aumentare il range del secondo termine della matrice? .... ma si rallenta poi?
    se invece metto solo la prima colonna che e' il ID -ReDim arr(1 To lr, 1)-
    e poi facco un confronto con un ciclo for?

    le colonne saranno una 40ina
    le righe intorno a 1000



  • di patel data: 20/03/2016 17:31:12

    40 colonne e 40 label nella userform ? non ti conviene usare una listbox o una listview ?
    per il dictionary basta cercare con google "vba dictionary"





  • di accordix data: 20/03/2016 17:38:47

    uso la multipage
    cio che sto facendo e' un archivio delle scuole della mia regione
    ho impostato la multi page dividendo le varie info su 4 pagine

    questo e' una parte di quello che ho chiesto l'laltra volta
    ....non so se ricordi la userform che era troppo grande



  • di patel data: 20/03/2016 18:24:56

    non ho capito e quindi non so aiutarti ulteriormente, comunque lavorando con le matrici non si rallenta molto l'esecuzione, il limite diventa la ram.





  • di accordix data: 20/03/2016 20:37:40

    cosa non hai capito?



  • di patel data: 20/03/2016 21:16:46

    non ho capito la portata del tuo lavoro, comunque un esempio funzionante ce l'hai





  • di accordix data: 21/03/2016 07:54:57

    allegato il lavoro
    lasciato anche i dati magari se potete toglierlo dopo dal sito ve ne sarei grato
    Devo implementare una funzione cerca per comune
    Il codice scritto lascia il tempo che trova, poco leggibile, a volte pure io mi ci perdo ma non so fare di piu
    magari con qualche consiglio potrei imparare di piu



  • di patel data: 21/03/2016 08:09:47

    bel lavoro, ma continuo a non capire cosa intendi con
    cit.
    ho visto che la matrice e' bidimensionale -ReDim arr(1 To lr, 1 To 3)-
    e che il secondo termine contiene i valori delle altre celle della riga
    se e' cosi, se ci sono altre colonne basta aumentare il range del secondo termine della matrice? .... ma si rallenta poi?
    se invece metto solo la prima colonna che e' il ID -ReDim arr(1 To lr, 1)-
    e poi facco un confronto con un ciclo for?
    le colonne saranno una 40ina
    le righe intorno a 1000






  • di accordix data: 21/03/2016 08:25:15

    per farla funzionare nel mio caso dovrei modificare il redim e scrivere
    ReDim arr(1 to lr,1 to 35) perche 35 sono le colonne con i dati.... Giusto?
    se invece riempio la matrice con
    redim arr(1 to lr,1) dove 1 e' la colonna del "ID", e poi a ogni step di 1 to lr verifico la riga del "ID" la matrice dovrebbe essere piu leggera


    E' una schiocchezza quello che sto dicendo????
     
    With Sheets(1)
      lr = .Cells(.Rows.Count, "D").End(xlUp).Row
      ReDim arr(1 To lr, 1 To 3) <<<<<<<<<<<<<<
      i = 1
      For r = 2 To lr
        If .Cells(r, "D") = pr Then
          arr(i, 1) = Cells(r, "A")
          arr(i, 2) = Cells(r, "B")
          arr(i, 3) = Cells(r, "C")
          i = i + 1
        End If
      Next
      nmax = i - 1
    End With



  • di patel data: 21/03/2016 08:29:30

    io non so se dici sciocchezze, non so di quale foglio parli, di quale userform parli





  • di accordix data: 21/03/2016 08:34:54

    hai ragione mi spiego male
    magari provo a fare da solo
    grazie per le risposte e per l'aiuto



  • di Albatros54 data: 21/03/2016 14:10:59

    Scusate , ma una semplice Collection , per inizializzare una combobox,tipo codoce postato? 
     
    Private Sub UserForm_Initialize()
    
        Dim lng As Long
        Dim col1 As Collection
        Set col1 = New Collection
        Set sh = ThisWorkbook.Worksheets(1)
        
        With sh
            LR = .Range("A" & .Rows.Count).End(xlUp).Row
            For lng = 2 To LR
                On Error Resume Next
                col1.Add CStr(.Cells(lng, "A").Value), CStr(.Cells(lng, "A").Value)
                If Err.Number = 0 Then
                    Me.ComboBox1.AddItem (.Cells(lng, "A").Value)
                End If
                Err.Number = 0
            Next
        End With
        
    End Sub






  • di patel data: 21/03/2016 17:06:42

    la collection è una valida alternativa al dictionary, ti sembra più semplice ? questione di gusti.





  • di Albatros54 data: 21/03/2016 17:27:15

    Ho proposto la Collection, solamente perchè il nostro amico accordix
    trova difficolta con le Array.





  • di accordix (utente non iscritto) data: 21/03/2016 17:37:53

    Volevo chiarire una cosa
    il problema non era la difficolta delle proposte datemi
    ma l'applicazione con il mio programma
    Io ho allegato il file ma sono cosciente che non e' molto leggibile e senza istruzioni per l'uso un po ostico da decifrare.
    In ogni caso Patel la tua procedura l'ho usata, sono riuscito a implementarla con il mio programma e funziona na meraviglia.
    Quello che cercavo di dirt(v)i e se dando un occhio al codice del file in allegato BETAIII era possibile migliorarlo. Altrimenti me lo tengo cosi' com'e'
    Grazie