Merci pour l’idée, mais le problème vient ici de l’enchaînement des évènements, et j’observe que la séquence n’est pas la même selon qu’on exécute l’application sous Windows ou sous Linux.
Je développe sous Linux et je n’ai pas de problème lorsqu’une ligne est en cours d’édition et qu’on clique sur le bouton “Retour” du formulaire. La macro appelée fait son close et son open sur le nouveau formulaire et la ligne en cours d’édition est bien mise à jour.
Sous Windows, lorsque la macro s’exécute, la mise à jour n’est pas faite. Le “close” provoque l’affichage du message pour enregistrer la saisie en cours et le plantage qui est probablement du à la simultanéité des actions “enregistrement de la ligne” / “fermeture du formulaire”.
Après un peu de recherche, j’ai donc appliqué la solution suivante : dans la macro, je vérifie si le dataset est en mode update et si oui, j’affiche un message indiquant de cliquer une nouvelle fois sur le bouton “Retour”. Pas besoin d’updaterow, la mise à jour se fait automatiquement car la ligne d’édition a perdu le focus. Pas génial, mais propre. Evidemment, le message ne s’affiche que sous Windows.
'
' L'utilisateur a cliqué sur le bouton "Retour"
'
Sub OnBackButtonAction(ByRef e As Object)
Dim dsOrganismes AS Object
Dim dsCaracteristiques As Object
'Si le dataset est modifié, on demande la mise à jour de la ligne courante
dsOrganismes = GetFormFromEvent(e)
dsCaracteristiques = dsOrganismes.GetByName("dsEspeces").GetByName("dsCaracteristiques")
If dsCaracteristiques.IsModified Then
MsgBox "Cliquer une nouvelle fois sur ""Retour"" pour revenir au menu.", MB_OK, "Vous venez de modifier une caractéristique"
Else
GoBack
End If
End Sub