Avevo gia' spiegato perche' non condivido l'approccio del SelectionChange, ma vedo che ci sei affezionato e te lo lascio, con tutte le conseguenze che puo' portare dovuti a uso delle frecce per andare a zonzo tra le celle o a selezioni multiple.
Se vuoi escludere M2 dal codice successivo allora creiamo un If:
- Codice: Seleziona tutto
If Intersect(Target, [i1:m2]) Is Nothing Then Exit Sub
If Target.Address <> "$M$2" Then 'If End If Aggiunto
Range("b5").End(xlDown).Offset(1, 0) = ActiveCell.Value
Range("b5").End(xlDown).WrapText = True
'Etc
'Etc
End If
Che l'uso di .Date non funzioni mi sembra ovvio; usa invece
- Codice: Seleziona tutto
Range("b5").End(xlDown).Offset(0, -1).Value = Date
Se in M2 vuoi un menu' a tendina, mettici una Convalida dati: imposta Consenti=Elenco e come Origine scrivi l'intervallo dei nomi di Foglio3
Se i nomi li scrivi da A2 di Foglio3 in avanti allora puoi crearti un "Intervallo nominato dinamico" che contiene automaticamente solo e tutti i nomi elencati:
-crea un nuovo intervallo nominato, chiamalo CONVA, come "Riferito a" gli inserisci la seguente formula
- Codice: Seleziona tutto
=SCARTO(Foglio3!$A$2;0;0;CONTA.VALORI(Foglio3!$A$2:$A$1000);1)
Ora su M2 puoi mettere la convalida da elenco e come Origine ci scrivi
=CONVA(tra l'altro mi pare che su Office 2003 per usare un elenco presente su foglio diverso da quello con la convalida devi per forza usare un intervallo nominato)
Volendo, puoi far "aprire" l'elenco usando SendKeys inserendo un "Else" nel codice che ho scritto prima:
- Codice: Seleziona tutto
If Target.Address <> "$M$2" Then
Range("b5").End(xlDown).Offset(1, 0) = ActiveCell.Value
Range("b5").End(xlDown).WrapText = True
'Etc
'Etc
Else
SendKeys "%{DOWN}"
End If
Se vuoi che, scelto un nome da inserire in M2 lo stesso venga inserito in coda all'elenco presente in colonna B puoi aggiungere una macro di Worksheet_Change, nello stesso modulo che contiene la SelectionChange, corrispondente a questo codice:
- Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$M$2" Then
Me.Range("B5").End(xlDown).Offset(1, 0).Value = Target.Value
Range("M3").Select
End If
End Sub
Buone prove...