Pues en mi caso, no soy capaz de reproducir ese error #REF por cambios en los datos vinculados.
He puesto una lista_base con más registros 7000. He guardado mi copia local.
Reabro archivo actualizando vínculos (5970 en lugar de 7000) y no aparece error.
Sí cuando elimino filas de LISTA_BASE en mi copia local (a lo que no le encuentro sentido) Con la manera matricial que nos enseña
mriosv ni siquiera en este último caso (eliminando 100 filas del medio aparecería N#D en las 100 del final, nunca en el rango "útil")
Aún así para "protegerse" ante la eliminación de filas, mejor INDIRECTO("LISTA_BASE.";DIRECCIÓN(FILA();COLUMNA()) como sugiere FORNELASA.
Ya que duplicamos la listas, particularmente encuentro preferible, por más versátil, que lista_consulta busque en lista_base en vez de una simple copia.
Primera columna la referencia {=LISTA_BASE.A3:A10003} ó INDIRECTO("LISTA_BASE." & DIRECCIÓN(FILA();1))
Esto permitiría cuando convenga, obtener datos calculados para cada referencia. P.E. si en lugar de lineal, el descuento fuese diferente según fabricante/familia/marca podría hacerse que la columna PrecioSinIVA= PrecioBaseSinIVA x Dto_fabricante/familia/marca, o columnas con datos combinados, ...
Es posible que sea útil ir directamente desde la selección en Lista_consulta y una validez de datos en B2 de BuscarXCodigo, por seleccionarlo de una lista.