Hola de nuevo Luis. Parece que he conseguido solucionar el problema. Te comento un poco lo que yo he hecho para ver si te sirve a ti (ojo, lo mismo no vale para nada, pero a mí de momento me funciona

)
A ver, lo que yo quería hacer era lo siguiente:
Creo una tabla clientes, otra pedidos... las que necesite y las relaciono dependiendo de las necesidades que tenga.
Después creo un formulario basado en las tablas para introducir datos (clientes). Ahora bien, me interesa que, al introducir el dni (por ejemplo) Access compruebe si los datos de ese cliente ya están en la tabla, y, de ser así me muestre otro formulario en el que aparezcan dichos datos, algo así como "En la base de datos aparecen registros con este dni cuyos datos son los siguientes: " y, en un cuadro de lista se mostraría el nombre y apellidos del/de los cliente/s (hay que tener en cuenta que puede haber dos personas con el mismo dni). Al hacer click sobre la entrada correspondiente del cuadro de lista, me carga los datos en el formulario de entrada de datos, con lo cual no se repiten los datos en la base. Ahora bien, esto es para introducir datos, pero ¿qué ocurre si quiero realizar una búsqueda? Para ello creo una consulta (consultadatos) con los campos que necesite (así, además puedo introducir con facilidad expresiones como suma, promedio... o, simplemente crear una expresión que agrupe en un campo el nombre y los apellidos del cliente, los cuales en la tabla estaban por separado). En la consulta no introduzco ningún criterio de búsqueda. Creo dos formularios basados en esta consulta uno será el que comentaba antes (llamado Yaexiste) para mostrar que ya hay algún registro con ese dni y otro será para mostrar en detalle los datos de ese cliente (datos_clientes) y otro formulario independiente (Búsqueda)
En el formulario clientes, tengo los campos de la tabla (idcliente, letra_nif, nif, nombre, apellido1, apellido2...) y también dos cuadros de texto (letradni y dni) independientes y, en el evento "al cargar" de dicho formulario, sitúo el foco en letradni (además, los campos letra_nif y nif no son visibles ni tampoco punto de tabulación para no poder escribir en ellos). En el evento "después de actualizar del control dni coloco el siguiente código:
DoCmd.Openform "Yaexiste"
En las propiedades del formulario "Yaexiste", en la pestaña datos, apartado filtro le coloco el siguiente código: letra=forms!clientes!letradni y dni=forms!clientes!dni.
Añado un cuadro de texto llamado codigoId.
Añado también un cuadro de lista (existe) basado también en consultadatos y, en la pestaña datos de dicho cuadro de lista pongo como origen de la fila Select [consultadatos].[idcliente], [consultadatos].[letra_nif], [consultadatos].[nif],... From consultadatos WHERE ((([consultadatos].letra = forms!clientes! letradni) and (([consultadatos].dni= forms!clientes!dni)) order by [Idcliente];
Al hacer esto así, SIEMPRE que se abra el formulario Ya existe, me aplicará estos filtros (OJO, SIEMPRE ES SIEMPRE

) y me mostrará los datos que deseo (los imprescindibles para no sobrecargar de datos un formulario, ya que si lo abrimos con todos los datos que tenemos, lo más probable es que el usuario huya despavorido

)
Ahora, en el evento "al hacer click" del cuadro de lista "existe" pongo lo siguiente:
codigoId.value = existe.column(0)
Así el cuadro de texto codigoId toma el valor IdCliente.
DoCmd.Openform "Datos_Clientes"
Este formulario se utilizará, como te he comentado, tanto para mostrar en detalle los datos de un cliente cuyo dni hemos introducido en el formulario clientes, como para mostrar los resultados de una consulta. Por tanto no podemos aplicar aquí el truco de poner un filtro fijo en las propiedades del formulario ya que, en ese caso, solo podríamos utilizarlo para una de las dos cosas. Nos interesa poder cambiar el filtro en función de cúal sea el formulario desde el que lo llamamos.
En el formulario Datos_clientes tendremos los campos de los datos personales (todos) y, además, un cuadro de lista (detalles) en el que mostrará, por ejemplo, los pedidos realizados por el cliente (para ello habríamos creado previamente una tabla pedidos, la habríamos relacionado con la tabla clientes y, lógicamente, habríamos arrastrado los campos pertinentes a la consulta consultadatos). Este cuadro nos permitirá, haciendo click en la entrada correspondiente, ver el detalle de los distintos pedidos que aparezcan.
Hasta aquí hemos conseguido la primera parte. La siguiente se la he enviado también a deneg, pero la copio aquí por si no la has visto y te puede servir.
En ese cuadro de lista (detalles), en datos, origen de la fila, pongo como criterio el siguiente: idCliente (campo que está en la tabla clientes, en la consulta consultadatos y en el form datos_clientes) = forms!datos_clientes!idcliente
después hago un requery y listo.
Para hacer el requery:
En el evento "al cargar" del formulario datos_clientes pongo
DoCmd. ShowAllRecords
y quito los filtros que pudiera haber de anteriores entradas.
Como al cargar el form el foco se coloca automáticamente en el control idCliente (que es el primero que aparece), en dicho control, en el evento "al recibir el enfoque" he puesto el siguiente código:
Private Sub idCliente_gotfocus()
Me. idCliente.Requery
DoCmd.GoToControl "detalles"
y así envío el foco al cuadro de lista "detalles"
end sub.
por último, en el cuadro de lista pongo
Private sub detalles_gotfocus()
me.detalles.requery
actualizando así los datos que debe mostrarme ese cuadro de lista
end sub
Para poder ejecutar las distintas consultas desde cada formulario, simplemente utilizo el método DoCmd.Applyfilter (se puede poner, por ejemplo, en el evento "despues de actualizar), del siguiente modo:
DoCmd.ApplyFilter "consultadatos", "[consultadatos]![idcliente]=[Forms]![clientes]![idcliente]"
O bien, si quiero filtrar por más de un campo
DoCmd.ApplyFilter "consultadatos", "[consultadatos]![letradni]=[Forms]![buscar_cliente]![letra_dni] And [consultadatos]![dni]= [forms]![buscar_cliente]![dni]" (donde el form buscar_cliente es otro formulario creado exclusivamente para realizar búsquedas).
Listo, me funciona (al menos de momento) perfectamente.
En fin, no sé si esto te servirá de algo. Es más, no sé si he sabido explicarlo o si me he explicado como una piedra abierta

, pero bueno, ahi te lo dejo a ver si te sirve de algo.
Muchas gracias por tu atención y ya me dirás si te sirve
Un saludo.