Bonjour à tous et merci de votre temps et de votre aide.

J'ai une appli où j'ai la séquence suivante :

  1. sur le formulaire frmElement, l'utilisateur demande d'ajouter un nouvelle element associé.
  2. Le systeme ouvre le formulaire frmAjouterElement et
  3. L'utilisateur saisi les informations et valide sa saisie.
  4. Le système enregistre les nouvelles éléments et mets à jour diverses autres informations.
  5. le formulaire frmAjouterElement génère un événement "ElementAjoue".
  6. frmElement capte cet événement.
  7. frmElement instancie une copie de lui-même (frmElement_1 juste pour le distinguer de l'autre dans la discussion car il porte le même nom dans le système.)et lui assigne le focus.
  8. Le formulaire frmAjouterElement se ferme.


Si frmAjouterElement n'est pas modale, le focus reste bien sur frmElement_1.
Mais, si le formulaire frmAjouterElement est modale, le focus revient sur frmElement.

J'aimerai vraiment gardé le formulaire frmAjouterElement modale donc existe t'il un moyen de gardé le focus sur la copie.

Le code pour l'appel de frmAjouterElement est le suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub GererBtnAjouterElement_Click(prmAction As eAction_AjouterElement)
    If Not EST_MODE_DEBUG Then
        On Error GoTo Err_GererBtnAjouterElement_Click
    End If
 
    Call mdlFormulaire.Sauvegarder 'force l'enr des données saisie
 
    Set m_FrmAjouterElement = New Form_frmAjouterElement
    m_FrmAjouterElement.Action_AjouterElement = prmAction
    m_FrmAjouterElement.NomElementRef = Me.Nom
    m_FrmAjouterElement.CodeTypeElementRef = Me.CodeTypeElement
    m_FrmAjouterElement.ClefElementRef = Me.Clef
    m_FrmAjouterElement.Visible = True
 
Exit_GererBtnAjouterElement_Click:
    Exit Sub
 
Err_GererBtnAjouterElement_Click:
    Call mdlErreur.AfficherMessErreurStandard(Err)
    Resume Exit_GererBtnAjouterElement_Click
End Sub
Et il s'exécute en totalité même si le formulaire est modale.
Il semble que si on instancie le formulaire, Access n'arrête pas le code comme dans un DoCmd.

La demande d'affichage se fait ici :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub m_FrmAjouterElement_ElementAjoute()
    'Un élément vient d'être ajouté ou trouvé
    
    Dim actionAjouterElement As eAction_AjouterElement
    Dim ClefElementAjoute As Long
    actionAjouterElement = m_FrmAjouterElement.Action_AjouterElement
    ClefElementAjoute = m_FrmAjouterElement.ClefElementAjoute
    
    Select Case actionAjouterElement
        Case eAction_AjouterElementUtilise
            Me.sfrmAssElementElementUtilise.Requery
            Call Me.sfrmAssElementElementUtilise.Form.Recordset.FindFirst("[ClefElementUtilise]=" & ClefElementAjoute)
            
        Case eAction_AjouterElementUtilisateur
            Me.sfrmAssElementElementUtilisateur.Requery
            Call Me.sfrmAssElementElementUtilise.Form.Recordset.FindFirst("[ClefElementUtilisateur]=" & ClefElementAjoute)
            
        Case Else
            Call Err.Raise(5, , Error$(5) & " - Action inconnue.")
    End Select
    
    Call ActualiserFrmAffichageListeElement
    
    Call mdlElement.OuvrirFrmElement(ClefElementAjoute) 'C'est cette ligne là qui fait l'assignation du focus.
End Sub



A+