Ciao Giò
Come ti dicevo ieri quello che hai chiesto non si può fare con una Convalida Dati Elenco ma si riesce quello che vuoi mediante ricorso ad una userform (in sostanza una maschera) ed al VBA.
Quella che ti propongo è probabilmente una soluzione un po' "complicata" (ma solo dal punto di vista della sua comprensione ma molto facile da usare. Ovviamente è solo un primo approccio che andrà adattato al tuo caso reale che non credo sia semplice come l'esempio che hai allegato.
Ti spiego come funziona il tutto.
1) Quando sul foglio1 ti posizioni su una delle celle gialle dell'intervallo G9:G15 ti si apre una maschera
2) All'interno di questa maschera (userform) ci sono una casella di testo (textbox) e ed una casella di riepilogo (listbox) una sull'altra
3) Inizialmente nella casella di riepilogo vedrai tutte le voci ma quando inizierai a digitare delle lettere nella casella di testo (quella superiore) vedrai che nella casella di riepilogo via via compariranno le sole voci che contengono le lettere digitate
4) Quando avrai "isolato" nella casella di riepilogo (quella inferiore) la voce che ti interessa basta che ci clicchi con il mouse ed automaticamente tale voce verrà riportata nella cella attiva (ossia quella selezionata inizialmente) la voce prescelta.
Solo per pura curiosità ti riporto il codice VBA che gestisce tutto questo
vb
Option Compare Text
Private sh As Worksheet
Private Sub ListBox1_Click()
ActiveCell.Value = UserForm1.ListBox1.Value
UserForm1.TextBox1.Value = ""
UserForm1.Hide
End Sub
Private Sub TextBox1_Change()
Call mCaricaListBox("FiltraDati")
End Sub
Private Sub UserForm_Initialize()
Set sh = ThisWorkbook.Worksheets("Foglio1")
Call mCaricaListBox("CaricaDati")
End Sub
Private Sub mCaricaListBox(ByVal s As String)
Dim lRiga As Long
Dim lng As Long
With sh
lRiga = .Range("b" & .Rows.Count).End(xlUp).Row
End With
With Me.ListBox1
If s = "CaricaDati" Then
For lng = 4 To lRiga
.AddItem (sh.Range("b" & lng).Value)
Next
ElseIf s = "FiltraDati" Then
.Clear
For lng = 4 To lRiga
If InStr(sh.Range("b" & lng).Value, Me.TextBox1.Text) Then
.AddItem sh.Range("b" & lng).Value
End If
Next
End If
End With
End Sub
Private Sub UserForm_Terminate()
Set sh = Nothing
End Sub
Spero di essere stato chiaro e se hai domande chiedi pure.