Ciao
premesso che quanto chiesto da Giuseppe è indispensabile, la tua modifica è corretta, pertanto se dici che ti riporta i dati "dove vuole" hai evidentemente delle righe vuote (in D-E) prima di quella che tu ritieni sia giusta.
Ti ricordo che la macro cerca a partire dall'alto del range assegnato e non dal basso.
Es:
D11 valore - E11 vuoto
D12 vuoto - E12 valore
D13 vuoto - E13 vuoto
D14 valore - E14 vuoto
D15 valore - E15 vuoto
la prima riga vuota è: 13.(vedi img allegata)
Se invece la riga vuota per te è la 15, bisogna cambiare il loop che non può essere più un For Each ma deve essere un:
For i= UltimaRigaRange to PrimaRigaRange Step -1.
Ciò detto lo sviluppo "in verticale" del tuo lavoro non entusiasma molto, in quanto ti costringe a spostarti sensibilmente nel foglio per cercare i dati.
saluti
Domenico
Win 10 - Excel 2016