Elenchi a discsa



  • Elenchi a discsa
    di Tony2015 (utente non iscritto) data: 22/11/2014 09:45:48

    Ho una cartella excel con tre fogli. Nel foglio 1 ho un elenco di città italiane, con vari dati che le riguardano disposti in colonne (abitanti, superficie, etc.). Nel foglio 2 ho posto in colonna i vari parametri, così che nel foglio 3 ho potuto creare un elenco a discesa dei medesimi. A questo punto nel foglio 3 voglio fare una ricerca: individuato nell'elenco a discesa il parametro cercato, voglio l'elenco delle città che soddisfano quel parametro, disposte in ordine decrescente. Ad esempio, se seleziono "abitanti" voglio l'elenco delle città, disposte per numero di abitanti, in ordine decrescente. Dovrebbe comparire solo l'elenco delle città con il relativo numero di abitanti, non gli altri parametri (superficie, PIL, temperatura, etc...). Allego un file di prova, specificando che nel file definitivo le righe sono circa 400 e le colonne circa 30 (ogni colonna corrisponde ad un parametro).



  • di Lucas87 data: 22/11/2014 10:38:14

    Ciao
    Prova questo codice, da mettere nel foglio con l'elenco a discesa
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "B3" Then
        Application.ScreenUpdating = False
        Range("a5:b" & Rows.Count).ClearContents
        k = Sheets(1).Range("a" & Rows.Count).End(xlUp).Row
        Set fin = Sheets(1).Rows(3).Find(what:=Range("b3"), lookat:=xlWhole)
        If Not fin Is Nothing Then
            col = fin.Column
            Range("a5:a" & k + 1) = Sheets(1).Range("a4:a" & k).Value
            Range("b5:b" & k + 1) = Sheets(1).Range(Sheets(1).Cells(4, col), Sheets(1).Cells(k + 1, col)).Value
            With ActiveWorkbook.Worksheets("Foglio3").Sort
                .SortFields.Add Key:=Range("B5:B" & k + 1), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
                .SetRange Range("A5:b" & k + 1)
                .Apply
            End With
        Range("b5:b" & k + 1).ClearContents
        End If
        Application.ScreenUpdating = True
    End If
    End Sub



  • di Tony2015 (utente non iscritto) data: 22/11/2014 14:46:43

    Ho incollato l'istruzione, ma non funziona. Allego nuovamente il file di prova, con l'istruzione incollata. Grazie.



  • di Zer0Kelvin data: 22/11/2014 15:59:16

    Ciao.
    La subroutine va inserita nel modulo di codice del foglio interessato (Foglio3), non in un modulo standard.



  • di Lucas87 data: 22/11/2014 17:01:52

    Evidentemente leggere quello che viene scritto è parecchio faticoso



  • di Tony2015 (utente non iscritto) data: 22/11/2014 19:34:51

    Non si tratta di sapere leggere; è evidente che se non funziona è perchè non sono stato capace di incollare al posto giusto l'istruzione: per questo avevo inviato per la seconda volta il file; speravo che qualcuno di buon cuore correggesse l'errore.