La cosa si puo' fare usando un Combobox, la cui lista di origine viene aggiornata dinamicamente in funzione di quanto man mano si scrive nel combo box.
Quindi:
1) inserisci nel tuo foglio di lavoro (quello che nell' esermpio si chiamava 122449_171114185000_FACSIMILE) un "Combobox", prelevandolo tra i "controlli ActiveX".
2) tra le sue Proprieta' imposta Column count = 2, mentre le altre lasciale sullo stato di default
3) imposta una larghezza idonea a visualizzare sufficientemente sia il codice che la descrizione
4) Poi fai tasto dx sul tab col nome del foglio e scegli Visualizza codice
5) Copia questo codice e incollalo nel frame vuoto(*) di destra:
- Codice: Seleziona tutto
Private Sub ComboBox1_Change()
Dim LastA As Long, I As Long, vArr, BArr()
'
LastA = Sheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Row
ReDim BArr(1 To 2, 1 To LastA)
'
vArr = Sheets("Foglio1").Range("A1").Resize(LastA, 2).Value
With ActiveSheet.ComboBox1
.ListFillRange = ""
If .Value <> "" Then
For I = LBound(vArr, 1) To UBound(vArr, 1)
If InStr(1, vArr(I, 2), .Value, vbTextCompare) > 0 Then
j = j + 1
BArr(1, j) = vArr(I, 1)
BArr(2, j) = vArr(I, 2)
End If
Next I
ReDim Preserve BArr(1 To 2, 1 To j + 2)
.List = Application.WorksheetFunction.Transpose(BArr())
Else
.List = vArr
End If
' .ListRows = 8
.DropDown
If IsNumeric(.Text) And .LinkedCell <> "" Then Range(.LinkedCell) = CLng(.Text)
End With
End Sub
Private Sub ComboBox1_GotFocus()
ComboBox1.DropDown
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
myArea = "E1:E10" '<<< L' area dove deve comparire il ComboBox
If Application.Intersect(Target, Range(myArea)) Is Nothing Or Target.Count <> 1 Then
ActiveSheet.ComboBox1.Visible = False
ActiveSheet.ComboBox1.LinkedCell = ""
Else
With ActiveSheet.ComboBox1
.BackColor = RGB(255, 255, 100)
' myaddr = Sheets("Foglio1").Range(Sheets("Foglio1").Range("A1"), Sheets("Foglio1").Range("A1").End(xlDown).Offset(0, 1)).Address
' .ListFillRange = "Foglio1!" & myaddr
.LinkedCell = Target.Address
.Visible = True
.Top = Target.Top
.Left = Target.Offset(0, 1).Left
' .SetFocus
End With
End If
End Sub
Nota*: se il frame non e' vuoto allora pubblica il codice contenuto perche' bisogna controllare la compatiilita' con quanto proposto.
L' istruzione marcata <<< va personalizzata con l' area a cui si vuole associare il combo box.
Se il combobox che disegni non si chiama "ComboBox1", allora modifica coerentemente il codice soprastante (oppure cambia il nome dell'oggetto in ComboBox1; lo puoi fare nella finestra Proprieta').
Il risultato sara' che quando si seleziona una cella nell' area specificata dall' istruzione marcata <<< comparira' il combo box; digitando "qualcosa" nel combo box la lista mostrata sara' modificata per visualizzare solo le righe che comprendono quella stringa; quando la selezione sara' abbastanza corta si potra' selezionare la voce "giusta" e il relativo codice sara' inserito nella cella.
Userai il codice all' interno di una formula Cerca.Vert per estrarre dal foglio di Anagrafe le informazioni da inserire nelle colonne Q-R-S.
Prova e fai sapere...