ciao Alvaro,
essendo la combo box che stai utilizzando un controllo della form sincronizzata direi che puoi appoggiarti alla proprietà recordSetClone anziché clonare il recordset della form stessa, che settato ad object rallenta un po' l'esecuzione.
Ti consiglierei altresì di modificare il nome dei controlli che utilizzi quel CasellaCombinata324 ad access dice tutto ora e te pure, tra due giorni navigherai nella form alla ricerca disperata della combo CasellaCombinata324 e se il numero finale dovesse
corrispondere anche al numero di controlli della form ti auguro di essere molto fortunato nella ricerca o di avere molta memoria :-).
Battute a parte qualora, la possibilità che i casi di omonimia dovessero essere molteplici, più di due, o N, a me è venuto in mente, post sincronizzazione della form di aprire una form sussidiaria mostrando tutti records omonimi.
Chiaramente la form si apre solo nel caso in cui il cliente selezionato sia effettivamente un caso di omonimia.
Siccome in questi giorni ce l'ho con gli eventi pubblici ho pensato di ri-sincronizzare la form chiamata su doppio click della listbox che mostra gli omonimi, la listbox è contenuta nella form sussidiaria.
Sfruttando il fatto che le form sono classi, il recordSource della listbox è una proprietà della form chiamata stessa richiamata su caricamento della form sussidiaria ( si poteva agire anche in altro modo....)
I records duplicati sono quelli rettagolati in rosso come da immagini che seguono :


tutti gli altri sono singoli.
questo codice su evento doppio click sincronizza la form, controlla e apre la form sussisidiaria in caso di duplicati :
Private Sub cboCliente_AfterUpdate()
With Me.RecordsetClone
.FindFirst "idcust=" & Me.cboCliente.Column(2)
If Not .NoMatch Then
Me.Bookmark = .Bookmark
If DCount("IDCliente", "clienti", "IDCliente='" & Me.cboCliente & "'") > 1 Then
DoCmd.OpenForm "clientiDoppione", acNormal
End If
End If
End With
End Sub
su caricamento della form sussidiaria assegni il rowSource alla listbox, verificando la che form main sia caricata :
Private Sub Form_Load()
If (SysCmd(acSysCmdGetObjectState, acForm, myForm) <> 0) Then
Dim frm As Access.Form
Set frm = Forms(myForm)
Me.lstCustomer.RowSource = frm.myRowSource
Set frm = Nothing
End If
End Sub
questa la property della main form :
Public Property Get myRowSource() As String
Dim strSql As String
strSql = "select idcliente, nomesocieta, idCust from clienti where idcliente='" & Me.cboCliente & "'"
myRowSource = strSql
End Property
su doppio click della listbox :
Private Sub lstCustomer_DblClick(Cancel As Integer)
If (SysCmd(acSysCmdGetObjectState, acForm, myForm) <> 0) Then
Forms(myForm).SetFocus
RaiseEvent syncForm(Me.lstCustomer.Column(2))
End If
End Sub
se la form main è caricata scateni l'evento passando ad esso l'ID univoco questa volta del cliente scelto, sincronizzando la main form ancora una volta :
Private Sub frmC_syncForm(ByVal lngCustomer As Long)
With Me.RecordsetClone
.FindFirst "idcust=" & lngCustomer
If Not .NoMatch Then
Me.Bookmark = .Bookmark
End If
End With
End Sub
tutto questo lo trovi per semplicità e studio nella demo caricata qui .
Apri la form cliente scegli uno dei due clienti duplicati, e risicronizza la form main nuovamente su doppio click,
Ho mantenuto nella form e nella listbox gli idCust univoci in modo che tu possa effettivamente vedere che l'id scelto è quello giusto, è un'evidenza maggiore che si può anche eliminare.
Ciao!
Sandro.