Selezione multipla da listbox



  • Selezione multipla da listbox
    di simoval (utente non iscritto) data: 25/04/2017 21:34:02

    Salve a tutti.
    Ho un piccolo problema con una listbox a selezione multipla posta su una userform.
    In pratica la listbox si popola attraverso una tabella a più colonne su un foglio di lavoro e in totale ha 7 colonne ma nella listbox ne ho visualizzate solo le prime tre.
    Quello che dovrei fare è poter selezionare in una volta sola due o piu righe della listbox e tramite una combobox e una textbox (il tutto già presente nella userform) variare il contenuto di celle poste in specifiche colonne (la F e la G) ma che prendano come riferimento le righe selezionate tramite listbox.

    Non so se sono riuscito a spiegarmi bene.
    Vi allego il codice che uso per inizializzare la userform e popolare la listbox e con il quale riesco a modificare solo la prima riga della tabella posta nel foglio di lavoro.
    Grazie mille
     
    Dim Matrice()
    
    
    Private Sub ComboBox1_Change()
    Dim Testo As String
    Dim iTesto As Variant
    Dim i As Long
    
    
    ListBox1.Clear
    
    
    For i = 1 To UBound(Matrice)
        If Matrice(i, 1) = ComboBox1 Then
            Testo = Testo & " " & i
        End If
    Next
    Testo = Trim(Testo)
    iTesto = Split(Testo)
    
    
    Matrix = Application.Index(Matrice, Application.Transpose(iTesto), Array(1, 2, 3))
    ListBox1.List = Matrix
    
                    
                    
    
    
    
    End Sub
    
    Private Sub CommandButton1_Click()
    Dim uRiga As Long
    Dim i As Long, j As Long
    
    
    uRiga = Range("A" & Rows.Count).End(xlUp).Row
    
    
    For i = 2 To uRiga
        For j = 0 To ListBox1.ListCount - 1
            If ListBox1.List(j, 0) = Foglio1.Cells(i, 2) And _
                ListBox1.List(j, 1) = Foglio1.Cells(i, 3) And _
                ListBox1.List(j, 2) = Foglio1.Cells(i, 4) Then
                    Foglio1.Cells(i, 7) = ComboBox2.Value
                    Foglio1.Cells(i, 8) = TextBox1.Value
            End If
        Next
    Next
    End Sub
    
    
    Private Sub UserForm_Initialize()
    Dim Intervallo As Range
    Dim Righe, Colonne, r, C
    
    
    With Range("A1").CurrentRegion
        Righe = .Rows.Count - 1
        Colonne = 3 '.Columns.Count
    End With
        
        Set Intervallo = Range("B2").Resize(Righe, Colonne)
        
        ReDim Matrice(1 To Righe, 1 To Colonne)
        For r = 1 To Righe
            For C = 1 To Colonne
                Matrice(r, C) = Intervallo.Cells(r, C)
            Next
        Next
        'Matrice = Intervallo 'metodo più rapido
    With ListBox1
        .ColumnCount = 4
        .BoundColumn = 2
        .List() = Matrice
    End With
    
    
    ComboBox1.List = Array("1.1", "1.3", "2.1")
    ComboBox2.List = Array("APERTO", "CHIUSO")
    ListBox1.MultiSelect = fmMultiSelectMulti
    
    End Sub



  • di alfrimpa data: 25/04/2017 21:59:46

    Ciao simoval

    Premetto che non so se sarò in grado di risolverti il problema ma postare del codice senza il file all'interno del quale questo viene eseguito è pressoché inutile; su cosa potremmo fare dei test?

    Allega il file e spiega bene quello che vorresti ottenere magari inserendo a mano (se possibile) il risultato desiderato.

    Alfredo





  • di simoval (utente non iscritto) data: 26/04/2017 19:37:55

    Ciao Alfredo.

    Grazie per la risposta e chiedo scusa, pensavo di averlo allegato il file.

    Come vedrai aprendo il file troverai l'elenco e una userform che appare non appena si entra in excel.
    Sulla list box vorrei che selezionando due o piu righe contemporaneamente mi permetta di modificare tramite la textbox e combobox sottostanti i valori che fanno riferimento a due colonne specifiche del foglio di lavoro ma che come riferimento di riga lo prenda in base alla selezione fatta dalla list box.

    Rimango a disposizione per qualsiasi suggerimento.
    Grazie ancora



  • di patel data: 26/04/2017 20:35:47

    non puoi selezionare più righe e modificarle contemporaneamente, come distingui i dati da inserire in ognuna ?
    ti allego un file di esempio da cui trarre spunto





  • di simoval (utente non iscritto) data: 26/04/2017 21:07:06

    I dati inseriti nelle textbox e nalla combobox sarebbero uguali per tutte le celle.

    Ad esempio seleziono le prime due righe della listbox e poi vado a scrivere nella textbox sottostante la parola "da ispezionare".
    Premendo un commandbutton mi dovrebbe registrare nella colonna H alle righe 2 e 3 la parola "da ispezionare".

    Non so se ho reso l'idea.



  • di patel data: 27/04/2017 10:03:04

    prova così
     
    Private Sub CommandButton1_Click()
    Dim j As Long
    For j = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(j) Then
           Foglio1.Cells(j + 2, 7) = ComboBox2.Value
           Foglio1.Cells(j + 2, 8) = TextBox1.Value
        End If
    Next
    End Sub






  • di simoval (utente non iscritto) data: 27/04/2017 18:06:00

    Funziona a meraviglia e ho anche capito dove sbagliavo.
    Grazie mille