Excel Forum Per condividere esperienze su Microsoft Excel

Filtrare dati da ListBox e caricarli su TextBox

  • Messaggi
  • OFFLINE
    roberto pironi
    Post: 101
    Registrato il: 18/06/2010
    Città: LUGO
    Età: 70
    Utente Junior
    Excell 2016
    00 08/11/2023 23:45
    Salve, ho un problema che non so risolvere:
    Ho una tabella con 8 colonne e "n" righe popolate e tramite una ListBox riesco a filtrarne i dati.
    Ora vorrei che selezionando una riga della ListBox mi estrapoli 4 (degli 8) valori e me li carichi su relativi TextBox.
    ...e qui viene il mio problema: Se visualizzo tutta la lista (*) e seleziono una qualsiasi riga, le TextBox mi si popolano regolarmente , mentre se faccio una ricerca filtrata i dati che mi vengono caricati sulle TextBox risultano sbagliati.
    Grazie per eventuali consigli
  • OFFLINE
    by sal
    Post: 7.415
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 09/11/2023 09:21
    Ciao Roberto, sbagli riferimento, devi modificare la macro del DoppioClick, in quanto quando cerchi il ListIndex quello fa riferimento all'indice della listbox e non la riga del foglio, specialmente nella ricerca con filtro, in quanto i dati filtrati non necessariamente corrispondono alla riga del foglio.

    a questo punto 2 possono essere le soluzioni,
    la prima fare un ciclo che ricerca nel foglio l'applicazione e poi sapendo la riga del foglio ti estrae i dati,
    la seconda più semplice, visto che hai già tutti i dati che ti interessano nella listbox, a questo punto riporti nelle celle i valori della listbox, ma attenzione i valori della listbox anche numerici o altro date, etc.. sono testo quindi quando vengono trasferiti sul foglio devono essere convertiti, ma tu li trasferisci in textbox quindi non sorge il problema.

    questa la modifica dell'evento DoppioClick

    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Riga = ListBox1.ListIndex
    'MsgBox ("riga = " & Riga)
    Sheets("Foglio1").Activate
    Dim iRow As Integer
    iRow = Riga
    With ListBox1
      TextBox51.Text = .List(iRow, 1)
      TextBox52.Text = .List(iRow, 2)
      TextBox53.Text = .List(iRow, 3)
      TextBox54.Text = .List(iRow, 5)
    End With
    modifica = 1
    End Sub


    non ho toccato altro del tuo codice, allego il file

    Ciao By Sal (8-D
    [Modificato da by sal 09/11/2023 09:22]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    roberto pironi
    Post: 101
    Registrato il: 18/06/2010
    Città: LUGO
    Età: 70
    Utente Junior
    Excell 2016
    00 09/11/2023 13:51
    Ti ringrazio infinitamente By Sal ,così è perfetto ... e se per caso volessi anche selezionare la riga sul foglio ???
  • OFFLINE
    by sal
    Post: 7.416
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 09/11/2023 15:54
    Ciao ecco la nuova macro con le modifiche, come puoi vedere ho aggiunto delle variabili.

    la prima cosa devo prendere il valore del ListIndex, dell'applicazione e metterlo in "d" ricorda che la listbox come indice parte da 0zero quindi 1 fa riferimento all'applicazione 2° campo
    poi devo fare il ciclo di ricerca del nome dell'applicazione sul foglio1 scorrendo la colonna "C" una volta trovata la riga di corrispondenza la inserisco in "iRow" esco da for...next, e posso trasferire i dati dal foglio alle textbox

    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim iRow As Integer
    Dim x, d
    Riga = ListBox1.ListIndex
    d = ListBox1.List(Riga, 1)
    'MsgBox ("riga = " & Riga)
    Sheets("Foglio1").Activate
    For x = 2 To Cells(Rows.Count, 3).End(xlUp).Row
      If Cells(x, 3) = d Then iRow = x: Exit For
    Next x
    TextBox51.Text = Cells(iRow, 3)
    TextBox52.Text = Cells(iRow, 4)
    TextBox53.Text = Cells(iRow, 5)
    TextBox54.Text = Cells(iRow, 7)
    modifica = 1
    End Sub


    spero che sia stato chiero nella spiegazione, Ciao By Sal (8-D
    [Modificato da by sal 09/11/2023 15:54]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    roberto pironi
    Post: 102
    Registrato il: 18/06/2010
    Città: LUGO
    Età: 70
    Utente Junior
    Excell 2016
    00 09/11/2023 17:55
    Ciao By Sal, quello che intendevo io era che prima di traserire i dati dal foglio alle TextBox , mi lasciasse sul foglio la selezione della Riga interessata
    (Row.Select).
    Buona serata
  • OFFLINE
    by sal
    Post: 7.417
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 09/11/2023 18:10
    Ciao basta modificare la prima macro in questo modo, vedi le righe che ho aggiunte, fanno in modo che la riga che hai selezionato nella listbox sia selezionata anche nel Foglio1, ma attenzione ho preso come riferimento il campo "N°" non ho usato il ciclo For...Next per trovare la riga

    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim r                               'aggiunte Variabile
    Riga = ListBox1.ListIndex
    'MsgBox ("riga = " & Riga)
    Sheets("Foglio1").Activate
    r = Val(ListBox1.List(Riga, 0)) + 1 'aggiunte prende il valore N°
    Rows(r).Select                      'aggiunte seleziona la riga
    Dim iRow As Integer
    iRow = Riga
    With ListBox1
      TextBox51.Text = .List(iRow, 1)
      TextBox52.Text = .List(iRow, 2)
      TextBox53.Text = .List(iRow, 3)
      TextBox54.Text = .List(iRow, 5)
    End With
    modifica = 1
    End Sub 



    Ciao By Sal (8-D
    [Modificato da by sal 09/11/2023 18:11]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    roberto pironi
    Post: 103
    Registrato il: 18/06/2010
    Città: LUGO
    Età: 70
    Utente Junior
    Excell 2016
    00 09/11/2023 20:34
    Esattamente .... grazie mille By Sal
    Hai RISOLTO il problema 👏👏
    [Modificato da roberto pironi 09/11/2023 20:35]