Sviluppare funzionalita su Microsoft Office con VBA Menu a tendina con filtro con Combo box

Login Registrati
Stai vedendo 18 articoli - dal 1 a 18 (di 18 totali)
  • Autore
    Articoli
  • #26114 Score: 0 | Risposta

    Tindaro73
    Partecipante

      Buona sera,

      sul Foglio2 di un file excel c'è una Combo Box che carica i dati contenuti nella colonna A del Foglio1.

      Quando inizio a digitare una stringa nella combobox non riesco a filtrare i dati dell'elenco.

      Trovo il primo dato della colonna A che contiene la stringa ma a seguire vengono riportati tutti gli altri dati dell'elenco anche quelli non contengono la stringa digitata.

      Potete darmi delle indicazioni sul codice che permetta di filtrare i dati in maniera tale da velocizzare la scelta del valore.

      Tindaro73 

      Allegati:
      You must be logged in to view attached files.
      #26148 Score: 0 | Risposta

      tanimon
      Partecipante
        16 pts

        ciao,

        Non so se ho capito bene.

        Prova a sostituire il tuo codice sulla combobox con questo.

        ciao

        Frank

        Private Sub ComboBox1_Change()
        Dim sh As Worksheet
        Dim trovato As Range
        Set sh = Sheets("Foglio1")
        
        On Error Resume Next
        With sh.Columns(1)
            Set trovato = .Range.Find(Foglio2.ComboBox1.Text, LookIn:=xlValues, lookat:=xlWhole)
            Me.ComboBox1.Text = trovato
        End With
            
            
        End Sub
        #26182 Score: 0 | Risposta

        Tindaro73
        Partecipante

          Il codice non filtra i dati contenuti nel foglio 1, ma ti porta al primo valore che contiene le lettere che sono state digitate.

          L'obbiettivo che volevo raggiungere è un altro. Appena digitato delle lettere nella combobox nel menu a tendina dovrebbero essere elencati solo i valori che contengono le lettere digitate.

          Grazie

          Buonaserata

          Tindaro73

          #26183 Score: 0 | Risposta

          Lucastar
          Partecipante
            4 pts

            Prova a vedere se questa recentissima discussione può fare al caso tuo

            Scrivere dentro una ComboBox le prime lettere di una lista

            #26187 Score: 0 | Risposta

            tanimon
            Partecipante
              16 pts

              ciao,

              evidentemente non ho capito.

               

              Tindaro73 ha scritto:

              L'obbiettivo che volevo raggiungere è un altro

              per spiegare meglio la tua richiesta,

              puoi allegare un file con i tentativi che fatto per realizzarla?

              ciao

              Frank

              #26301 Score: 0 | Risposta

              Tindaro73
              Partecipante

                Ciao,

                utilizzando la funzione Instr() non posso far caricare nella combobox solo gli articoli che contengono le lettere digitate nella combobox?

                #26302 Score: 0 | Risposta

                GiuseppeMN
                Partecipante
                  19 pts

                  Buona giornata a Tutti.

                  @tindaro73:
                  quello che riesco a proporti è la possibilità di ottenere ComboBox filtrato in funzione del contenuto di una Cella, nell'immagine in allegato Cella "A3".

                  Nel caso tu ritenga la proposta adeguata, assieme, possiamo approfondire.

                  Giuseppe.

                  Allegati:
                  You must be logged in to view attached files.
                  #26319 Score: 0 | Risposta

                  tanimon
                  Partecipante
                    16 pts

                    ciao a tutti,

                    ciao Tindaro ed un saluto a Giuseppe   

                    Questa volta spero di avere capito la richiesta.

                    Ti allego un file con nome Cartel1.xlsm, strutturato per funzionare sulla cartella al percorso 

                    c:\prova, se non hai la cartella creala prima di aprire il file e copialo nella cartella.

                    Dopo avere effettuato il filtro che hai chiesto, e mi sembra proprio che lo faccia,

                    dopo averlo chiuso, alla successiva riapertura segnala un problema con parte del contenuto,

                    ma questa cosa non inficia assolutamente il file:

                    date in successione le conferme "Sì" e "Chiudi", lavora correttamente.

                    E' sicuramente fastidioso, ma se è possibile, non ho abbastanza tempo per cercare di risolverlo.

                     

                    Spero possa servirti,

                    Frank 

                    P.S.

                    modificando il post, mi ha caricato due allegati, ma sono lo stesso file.

                    Allegati:
                    You must be logged in to view attached files.
                    #26344 Score: 0 | Risposta

                    Tindaro73
                    Partecipante

                      Buongiorno,

                      ho creato la cartella e scaricato i due file allegati.

                      Non so per quale motivo ma non riesco a farli funzionare. Quando digito nella combobox questa mi trova il primo elemento della lista che contiene le lettere digitate però mi riportata anche tutti i dati della lista. Quando schiaccio filtra vado a finire nella lista. 

                      La soluzione prospettata da GiuseppeMN come da Allegato mi sembra più semplice e usabile. Non è necessario creare la cartella e inoltre in base alla figura riesce a filtrare i dati che servono.

                      Tindaro73

                      #26345 Score: 0 | Risposta

                      Tindaro73
                      Partecipante

                        Cercando su internet ho visto che nel 2016 "Andrea (utente non iscritto) data: 27/04/2016 11:47:10" ha aperto la seguente discussione "combobox a ricerca testo dinamica".

                        Da Google non riesco ha scaricare i file della discussione e dal sito non riesco a trovare la discussione per vedere la soluzione o se il caso risulta essere equivalente al mio.

                        Tindaro73

                         

                        #26346 Score: 0 | Risposta

                        GiuseppeMN
                        Partecipante
                          19 pts

                          Buona pomeriggio @tindaro73;
                          se lo ritieni utile e opportuno possiamo approfondire l'argomento.

                          La mia proposta si basa su un Codice VBA che analizza il contenuto dell Cella LinkedCell del ComboBox, nel tuo File era la Cella "B5" nei Test che ho condotto ho scelto al Cella "A3" ma quesro è ininfluente.

                          Inserendo il vincolo di ricerca nella Cella di riferimento il valore viene inserito in ComboBox.

                          Ho utilizzato l'evento "GotFocus"; quando si seleziona ComboBox il Codice VBA:
                          - Vuota il ComboBox di tutti i suoi Valori; questo nel caso in cui ComboBox sia stato popolato in precedenza.
                          - Confronta tutti i Record presenti in "Foglio1" con il Valore inserito in ComboBox
                          - Quando il confronto è positivo, aggiunge quel Record in ComboBox

                          Questo in estrema sintesi.

                          Che conoscenze hai di programmazione in VBA?

                          Se pensi di essere in grado di costruire un Codice VBA, in Forum, potremmo analizzarlo e vedere eventuali implementazioni.

                           

                          A disposizione.

                          Buon fine settimana.

                          Giuseppe

                          #26347 Score: 0 | Risposta

                          tanimon
                          Partecipante
                            16 pts

                            ciao a tutti,

                            la soluzione di Giuseppe che saluto, è sicuramente valida, di semplice utilizzo e funzionale

                            alla mia si può togliere il fatto di creare una cartella ad hoc, ma fa un'altra cosa:

                             

                            crea una convalida dati in foglio1, mostrando solo i valori che cominciano con la lettera iniziale del valore in combobox sul foglio2.

                             

                            saluti

                            Frank

                            #26349 Score: 0 | Risposta

                            Tindaro73
                            Partecipante

                              Le mie conoscenze di VBA sono base.

                              Causa Corona-Virus ho seguito dei video su internet di programmazione VBA.

                              Non conosco bene la sintassi delle istruzioni.

                              In base alle mie conoscenze bisogna creare una matrice in cui caricare solo il dato dell'elenco che contiene il testo digitato. Per fare ciò si può sfruttare la funzione Instr(). Trovati tutti i dati che soddisfano la corrispondenza carico la combobox con i dati contenuti nella matrice.

                              Tindaro73

                              #26350 Score: 1 | Risposta

                              GiuseppeMN
                              Partecipante
                                19 pts

                                ... ho seguito dei video su internet di programmazione VBA ...
                                Considerando che ti stai impegnando, ti propongo una mia alternativa alla tua idea di struttura del Codice VBA

                                ... bisogna creare una matrice in cui caricare solo il dato dell'elenco che contiene il testo digitato. Per fare ciò si può sfruttare la funzione Instr(). Trovati tutti i dati che soddisfano la corrispondenza carico la combobox con i dati contenuti nella matrice.

                                Potrebbe essere una soluzione; io ho scelto questa alternativa:

                                Option Explicit

                                Private Sub ComboBox1_GotFocus()
                                Dim lRiga As Long, lng As Long, Rgx As Long
                                Dim Str As String
                                Dim Sh As Worksheet

                                Str = Range(ComboBox1.LinkedCell).Value
                                ComboBox1.Clear
                                Set Sh = ThisWorkbook.Worksheets("Foglio1")
                                With Sh
                                lRiga = .Range("A" & .Rows.Count).End(xlUp).Row
                                End With
                                With Me.ComboBox1
                                For lng = 3 To lRiga
                                If Left(Sh.Range("A" & lng).Value, Len(Str)) = Str Then
                                .AddItem Sh.Range("A" & lng).Value
                                End If
                                Next
                                End With
                                Set Sh = Nothing
                                End Sub

                                Inserisci la Stringa da valutare in LinkedCell, seleziona ComboBox e premi ▼

                                Giuseppe

                                #26364 Score: 0 | Risposta

                                Tindaro73
                                Partecipante

                                  Buongiorno,

                                  In primis ringrazio GiuseppeMN per il codice che mi ha consentito "in parte" di trovare una soluzione al mio problema.

                                  Solo per una questione di una migliore usabilità del file la soluzione ottimale sarebbe stata quella di utilizzare la combobox per filtrare i dati dell'elenco.

                                  Ho modificato il codice vba inserendo la funzione Instr() al posto di Left() in maniera tale da filtrare anche gli art. che contengono al loro interno il testo digitato.

                                  Ho notato però che quando i dati trovati sono più di 1 (provare digitando nella cella C1"base"), e schiaccio la freccia della combobox questa apre il menù a tendina ma non mi fa vedere immediatamente tutti i dati trovati. Compaiono due freccette (una verso l'alto ed una verso il basso) che mi permettono di scorrere l'elenco. Se chiudo e riapro la combobox ottengo tutto l'elenco. Si perde un pò di usabilità del sistema.

                                  E' possibile risolvere il problema modificando qualche proprietà della combobox o è solo un problema di versione di excel?

                                  Allegati:
                                  You must be logged in to view attached files.
                                  #26367 Score: 0 | Risposta

                                  GiuseppeMN
                                  Partecipante
                                    19 pts

                                    Buon pomeriggio, @tindaro73.

                                    @tindaro73, scrive:

                                    ... Ho notato però che quando i dati trovati sono più di 1 (provare digitando nella cella C1"base"), e schiaccio la freccia della combobox questa apre il menù a tendina ma non mi fa vedere immediatamente tutti i dati trovati. Compaiono due freccette (una verso l'alto ed una verso il basso) che mi permettono di scorrere l'elenco. Se chiudo e riapro la combobox ottengo tutto l'elenco. Si perde un pò di usabilità del sistema ...

                                    Credo tu non abbia seguito le mie istruzioni:
                                    - Inserisci la Stringa da valutare in LinkedCell
                                    - Seleziona ComboBox
                                    - Premi ▼
                                    ComboBox si popola quando "Viene selezionato ComboBox"; se prima di premerenon hai selezionato ComboBox accade ciò che dichiari.

                                    Fai sapere se in questo modo hai risolto.

                                    Giuseppe

                                    #26368 Score: 0 | Risposta

                                    Tindaro73
                                    Partecipante

                                      Selezionando la combobox e poi la freccia funziona correttamente.

                                      In alternativa è possibile utilizzare la tua Private Sub () modificata (dopo una ricerca su internet) in cui ho sostituito l'evento GotFocus() con DropButtonClick ed inserendo una Private Sub() con evento Click per restituire il valore selezionato dal menù a tendina.

                                      L'unico neo e che non riesco a mantenere il dato selezionato nella combobox. Dettaglio!!.

                                      Grazie del tuo aiuto. Fondamentale.

                                      Tindaro73

                                      Private Sub ComboBox1_DropButtonClick()
                                      Dim lRiga As Long, lng As Long, Rgx As Long
                                      Dim Str As String
                                      Dim Sh As Worksheet
                                      
                                      Str = Range(ComboBox1.LinkedCell).Value
                                      ComboBox1.Clear
                                      Set Sh = ThisWorkbook.Worksheets("El_ArtDef")
                                      With Sh
                                      lRiga = .Range("B" & .Rows.Count).End(xlUp).Row
                                      End With
                                      With Me.ComboBox1
                                      For lng = 2 To lRiga
                                          If InStr(1, Sh.Range("B" & lng).Value, Str) > 0 Then
                                              .AddItem Sh.Range("B" & lng).Value
                                          End If
                                      Next
                                      End With
                                      Set Sh = Nothing
                                      End Sub
                                      
                                      Private Sub ComboBox1_Click()
                                      Cells(2, 3) = ComboBox1.Value
                                      End Sub
                                      
                                      Allegati:
                                      You must be logged in to view attached files.
                                      #26382 Score: 0 | Risposta

                                      GiuseppeMN
                                      Partecipante
                                        19 pts

                                        Considerando che non riesco a vedere le mie risposte inserite qualche minuto fa, provo a riprorla.

                                        Buona giornata, @tindaro73;
                                        sono veramente felice che tu abbia risolto in autonomia.

                                        Solo per completezza, gli "eventi" sono molti, per ComboBox credo siano 15, ognuno può contenere un Codice VBA più o meno strutturato.
                                        Considerando che ogni volta che si verifica un evento viene attivato il relativo Codice VBA la scelta deve essere ben ponderata.

                                        Solo una domanda, considerando che in ComboBox1 vengono caricati tutti i Record presenti nel Foglio di lavoro "El_ArtDef" non credi sarebbe più opportuno attribuire a ListFillRange il Range da considerare?
                                        La definizione della Proprietà potrebbe essere:
                                        - ListFillRange Z_SchDef
                                        In questo modo non avresti più la necessità di un Codice VBA per popolare il ComboBox.
                                        Considera che "Z_SchDef" può essere definito, in modo automatico, in funzione di eventuali Record aggiunti o eliminati.

                                        Per quanto concerne:
                                        @tindaro73, scrive:
                                        ... L'unico neo e che non riesco a mantenere il dato selezionato nella combobox. Dettaglio!! ...
                                        Potresti riconsiderare la Proprietà:
                                        - LinkedCell Sch_AP!C1
                                        La cella "C1" è vuota, quindi ComboBox1.Value correttamente assume il valore contenuto in tale Cella.

                                        Gradirei un commento su quanto sopra esposto. Grazie.

                                        Buon Lavoro.

                                        Giuseppe

                                      Login Registrati
                                      Stai vedendo 18 articoli - dal 1 a 18 (di 18 totali)
                                      Rispondi a: Menu a tendina con filtro con Combo box
                                      Gli allegati sono permessi solo ad utenti REGISTRATI
                                      Le tue informazioni: