Condividi tramite

Filtra dati in listbox in base valori di due combobox

Anonimo
2023-12-12T10:02:06+00:00

Buongiorno,

sono qui a chiedere, di nuovo, il vostro aiuto!

Ho una userform con una listbox due combobox ed un commandobutton.

All'apertura della della userform1 la listbox deve caricare dal foglio1 tutte le righe presenti e 10 colonne non consecutive nel seguente ordine: Colonna H - E - F - C - J -L - Q - R - S -T .

Le due combobox1 (mese) e combobox2 (anno) devono filtrare in base al loro contenuto le date contenute nella colonna H (gg/mm/aaaa).

Il commandbutton deve trasferire il filtraggio dei dati ottenuti al foglio2 (fine mese) ed inserirli dalla riga 10 in giù nelle seguenti colonne B - C - D - E - F -G -H -I - L - M.

Allego un file con una base dati minina come esempio. https://www.dropbox.com/scl/fi/hwdpqe4mugd3nuwx4gzza/FineMese.xlsm?rlkey=76frcdpe8xjndhefck6pfli52&dl=0

saluti Massimo

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2023-12-14T21:23:01+00:00

Ciao Eleuterio,

sono una curiosità. E normale che le ultime sei colonne (contengono numeri) alcune colonne vengono viste come testo evidenziando il triangolino verde nella cella?

I contenuti sono allineati a sinistra! mentre gli altri a destra.

Le colonne inquisite sarebbero G - I - M

Sarebbe possibile rimediare?

saluti

Massimo

Li sta interpretando come stringhe e non li processa correttamente, una fix al volo:

Private Sub CommandButton1_Click() 

Dim lngRow As Long, intC As Integer 

    With Worksheets("Foglio2") 

        .Range("B10:M65000").ClearContents 

        For lngRow = 10 To 9 + Me.ListBox1.ListCount 

            .Cells(lngRow, 2).Value = CDate(Me.ListBox1.List(lngRow - 10, 0)) 

            For intC = 3 To 5 

                .Cells(lngRow, intC - (intC > 9) * 2).Value = Me.ListBox1.List(lngRow - 10, intC - 2) 

            Next intC 

            For intC = 6 To 11 

                .Cells(lngRow, intC - (intC > 9) * 2).Value = --Me.ListBox1.List(lngRow - 10, intC - 2) 

            Next intC 

        Next lngRow 

    End With 

End Sub

ho forzato la trasformazione in valori dalla colonna F in poi, cambiando la formattazione mi risultano ora corretti,

ciao.

La risposta è stata utile?

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2023-12-13T18:23:19+00:00

Non servono calcoli basterebbero saltare le due colonne di destinazione (J - K)

Se è solo questo:

Private Sub CommandButton1_Click() 

Dim lngRow As Long, intC As Integer 

    With Worksheets("Foglio2") 

        .Range("B10:M65000").ClearContents 

        For lngRow = 10 To 9 + Me.ListBox1.ListCount 

            .Cells(lngRow, 2).Value = CDate(Me.ListBox1.List(lngRow - 10, 0)) 

            For intC = 3 To 11 

                .Cells(lngRow, intC - (intC > 9) * 2).Value = Me.ListBox1.List(lngRow - 10, intC - 2) 

            Next intC 

        Next lngRow 

    End With 

End Sub

Ciao.

La risposta è stata utile?

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2023-12-13T14:24:32+00:00

Buongiorno Eleuterio,

,prima di tutto grazie,

  1. Il codice che avevo postato non è frutto mio, ma da ricerca su google ed in parte adattato.

(sembrava che si adattasse alla mia richiesta, ma mancava qualcosa! Si limitava solo a visualizzare i dati nella listbox secondo un ordine prescelto delle colonne ed oltre le 10 )

  1. Quello che hai pubblicato, ho capito che hai inserito le due condizioni delle combobox 1 e 2.

(bella , anche, la funzione due anni indietro e due anni avanti a quello attuale)

  1. il file che allego ora ha gli stessi riferimenti di quello Master.
  2. la combobox1 riporta l'errore se seleziono i mesi (11 e 12). Se seleziono il mese 10 non da nessun errore e mi permette di effettuare le richerche in base agli anni.

Utimo quesito, come posso abilitare il commandbutton1 per trasferire il risultato della Listbox al foglio2?

saluti

Max

C'era effettivamente un refuso:

Private Sub CaricaListaRifornimenti()

Dim i As Integer

Dim ur As Integer

Dim riga As Integer

Dim arrC, intA As Integer, blnOK As Boolean

Me.ListBox1.Clear 

With Worksheets("Foglio1") 

    ur = .Cells(Rows.Count, 3).End(xlUp).Row 

    arrC = Array(8, 5, 6, 3, 10, 12, 17, 18, 19, 20) 

    For riga = 3 To ur 

        blnOK = False 

        If (Me.ComboBox1.Value = "Mese" Or CStr(Month(.Cells(riga, arrC(1)).Value)) = Me.ComboBox1.Value) And (Me.ComboBox2.Value = "Anno" Or CStr(Year(.Cells(riga, arrC(1)).Value)) = Me.ComboBox2.Value) Then blnOK = True 

        If blnOK Then 

            Me.ListBox1.AddItem .Cells(riga, arrC(1)).Value 

            For intA = 2 To 10 

                **Me.ListBox1.List(Me.ListBox1.ListCount - 1, intA - 1) = .Cells(riga, arrC(intA)).Value** 

            Next intA 

        End If 

    Next riga 

End With 

End Sub

Per l'ultimo quesito ti propongo:

Private Sub CommandButton1_Click()

Dim lngRow As Long, intC As Integer

With Worksheets("Foglio2") 

    .Range("B10:M65000").ClearContents 

    For lngRow = 10 To 9 + Me.ListBox1.ListCount 

        .Cells(lngRow, 2).Value = CDate(Me.ListBox1.List(lngRow - 10, 0)) 

        For intC = 3 To 11 

            .Cells(lngRow, intC).Value = Me.ListBox1.List(lngRow - 10, intC - 2) 

        Next intC 

    Next lngRow 

End With 

End Sub

Penso che le ultime due colonne debbano contenere una formula, ma te le lascio.

Ciao.

La risposta è stata utile?

0 commenti Nessun commento

10 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2023-12-12T12:44:21+00:00

    Option Base 1 Private Sub CaricaListaRifornimenti() Dim i As Integer Dim ur As Integer Dim riga As Integer riga = 3

    ur = Sheets("Rifornimenti").Cells(Rows.Count, 3).End(xlUp).Row
    ListBox1.List = Range("A3:W3").Value 'imposta più di 10 colonne
        For i = 0 To ur
            ListBox1.AddItem
            ListBox1.List(i, 1) = Cells(riga, "H")
            ListBox1.List(i, 2) = Cells(riga, "E")
            ListBox1.List(i, 3) = Cells(riga, "F")
            ListBox1.List(i, 4) = Cells(riga, "C")
            ListBox1.List(i, 5) = Cells(riga, "J")
            ListBox1.List(i, 6) = Cells(riga, "L")
            ListBox1.List(i, 7) = Cells(riga, "Q")
            ListBox1.List(i, 8) = Cells(riga, "R")
            ListBox1.List(i, 9) = Cells(riga, "S")
            ListBox1.List(i, 10) = Cells(riga, "T")
            riga = riga + 1
        Next i
    End Sub
    
    Private Sub UserForm_Initialize()
        Call CaricaListaRifornimenti
    End Sub
    
    Il primo obiettivo è stato raggiunto. Mi manca solo dover ridimensionare le 10 colonne in base al contenuto!
    L'intestazione delle colonne non sarebbe male.
    Poi passeremo alle due combobox che dovranno selezionare mese ed anno della prima colonna!
    spero in un vostro aiutino ...
    

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2023-12-12T11:54:21+00:00

    Saluti! Io sono Ajibola e sono ansioso di assistervi con fiducia e assertività. Ti garantisco di fornirti un supporto eccezionale.

    Questo thread del forum mostra come utilizzare una funzione personalizzata per sincronizzare la selezione di due caselle combinate in base a un intervallo di date.

    "Nota: questo è un sito Web non Microsoft. La pagina sembra fornire informazioni accurate e sicure. Fai attenzione agli annunci sul sito che potrebbero pubblicizzare prodotti frequentemente classificati come PUP (prodotti potenzialmente indesiderati). Fai ricerche approfondite su qualsiasi prodotto pubblicizzato sul sito prima di decidere di scaricarlo e installarlo.

    https://www.mrexcel.com/board/threads/how-do-i-link-two-comboboxes-in-a-vba-userform.873050/

    https://www.excelmojo.com/vba-combobox/

    https://analysistabs.com/vba-code/excel-userform/combobox/

    Se hai ulteriori domande o hai bisogno di ulteriore assistenza, non esitare a chiedere. Sono qui per aiutarti!

    Restituisci alla Comunità. Aiuta la persona successiva con questo problema indicando se questa risposta ha risolto il tuo problema. Fai clic su Sì o No di seguito.

    Cordiali saluti.

    Ajibola.

    Questa risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o espressioni strane.

    La risposta è stata utile?

    0 commenti Nessun commento