Risolto convalida dati indiretto con ricerca dinamica

kcaste

Nuovo utente
22 Settembre 2021
7
1
2013
0
Buongiorno a tutti, sono nuova del forum e avrei bisogno di una mano. Allego il file a cui sto lavorando, si tratta di un rapportino mensile che devono compilare i commerciali di casa madre, che promuovono anche i prodotti delle controllate. L'obiettivo è capire quanto lavorano per le controllate, quali prodotti vengono proposti e l'interesse dei clienti.
Ogni azienda vende prodotti diversi, quindi nella colonna G (argomenti trattati) l'elenco degli argomenti proposti varia a seconda della società inserita nella colonna B (ho usato la formula "indiretto" nell'origine della convalida).
Con un ridotto numero di argomenti/famiglie di prodotto la cosa potrebbe anche funzionare. Ma parliamo di almeno 100 argomenti per società. Vorrei quindi che, una volta cliccata la cella della colonna G, si aprisse una maschera con una casella di inserimento testo, che filtra le parole dell'elenco che contengono il testo digitato, tenendo sempre conto della società indicata nella colonna B (e quindi "suo" elenco argomenti).
Spero di essere stata sufficientemente chiara.

Grazie in anticipo per l'aiuto

Katia
 

alfrimpa

VBA Expert
Supermoderatore
18 Dicembre 2015
40.776
2.445
68
Napoli
Office 365
1.320
K @kcaste

Se vuoi che selezionando una cella della colonna G si apra una maschera con una casella di inserimento del testo, che filtra le parole dell'elenco che contengono il testo digitato occorre il VBA.

Al post 5 di questa discussione


trovi un mio esempio

Ad ogni buon conto ti linko video di Gerardo Zuccalà @Gerardo Zuccalà che illustra come realizzare quello che hai chiesto con una convalida dati.


Fai sapere quale delle due strade intendi seguire.
 
Ultima modifica:

kcaste

Nuovo utente
22 Settembre 2021
7
1
2013
0
Ho visto il tuo esempio, sarebbe esattamente quello che mi serve, però mancherebbe la possibilità di filtrare da liste diverse a seconda del criterio indicato nella colonna B.
 
Ultima modifica:

alfrimpa

VBA Expert
Supermoderatore
18 Dicembre 2015
40.776
2.445
68
Napoli
Office 365
1.320
Ti aiuto volentieri ma ora sono fuori ed ho solo il cellulare.

Se non interviene qualcuno prima ci dobbiamo riaggiornare a lunedì quando avrò un pc a disposizione.
 

kcaste

Nuovo utente
22 Settembre 2021
7
1
2013
0
Grazie, molto gentile. Intanto ho inserito il tuo codice VBA nel mio file e funziona perfettamente, manca solo la parte di scelta dell'intervallo.
 

alfrimpa

VBA Expert
Supermoderatore
18 Dicembre 2015
40.776
2.445
68
Napoli
Office 365
1.320
Intanto complimenti.

Come ti ho detto non ho modo di vedere il file tu comunque allega nuovamente il tuo file con il mio codice che hai inserito (quando lo avrai fatto eliminerò il precedente a quel punto inutile) e lunedì vedremo.
 

alfrimpa

VBA Expert
Supermoderatore
18 Dicembre 2015
40.776
2.445
68
Napoli
Office 365
1.320
K @kcaste

Allora Katia nel tuo file sul foglio "ARGOMENTI" elimina le colonne vuote (non servono) e sostituisci la sub Worksheet_SelectionChange(ByVal Target As Range) con questa

Visual Basic:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim ur As Long
ur = Cells(Rows.Count, 2).End(xlUp).Row
If Target.Rows.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("g17:g" & ur)) Is Nothing Then
    If Target.Offset(0, -5).Value <> "" Then
        UserForm1.Show
        Else
        Exit Sub
    End If
End If
End Sub
e la sub Sub mCaricaListBox(ByVal s As String) con questa

Visual Basic:
Private Sub mCaricaListBox(ByVal s As String)

    Dim lRiga As Long
    Dim lng As Long
    Dim col As Integer
    col = WorksheetFunction.Match(ActiveCell.Offset(0, -5), Sheets("ARGOMENTI").Range("A1:d1"), 0)
    With sh
        lRiga = .Cells(Rows.Count, col).End(xlUp).Row
    End With
 
    With Me.ListBox1
        If s = "CaricaDati" Then
            For lng = 2 To lRiga
                .AddItem (sh.Cells(lng, col).Value)
            Next
        ElseIf s = "FiltraDati" Then
            .Clear
            For lng = 2 To lRiga
                If InStr(sh.Cells(lng, col).Value, Me.TextBox1.Text) Then
                    .AddItem sh.Cells(lng, col).Value
                End If
            Next
        End If
    End With
 
End Sub
Fai sapere (soprattutto se le modifiche che ho apportato al codice precedente ti sono chiare).
 
Ultima modifica:

kcaste

Nuovo utente
22 Settembre 2021
7
1
2013
0
Ciao Alfredo, sono riuscita a collegarmi solo adesso. Domani dovrei riuscire ad inserire la modifica nel mio file. Ti faccio sapere… Intanto grazie mille!!!
 

kcaste

Nuovo utente
22 Settembre 2021
7
1
2013
0
Ciao Alfredo, ho modificato ora il mio file. Funziona (ovviamente) alla perfezione!! Ora me la studio per bene, così da essere autonoma la prossima volta che dovesse servirmi qualcosa di analogo.
Mi hai risolto un bel problema! Grazie per la disponibilità! Una coppa non è sufficiente! :applausi:
 

alfrimpa

VBA Expert
Supermoderatore
18 Dicembre 2015
40.776
2.445
68
Napoli
Office 365
1.320
K @kcaste

Son contento che hai risolto; se qualcosa non ti è chiaro chiedi pure.

P.S. Dovresti allargare un po’ la userform.
 
Ultima modifica:

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!