Plantage sur la fermeture d'un formulaire si ligne en cours d'édition

Brièvement : j’ai un sous-formulaire qui contient une table dans laquelle l’utilisateur peut modifier une donnée de chaque ligne. J’ai également un bouton “Retour” qui permet de revenir au menu d’accueil de l’application.
Lorsque l’utilisateur modifie une donnée et clique sur “Retour”, j’appelle une macro qui fait un “close” du formulaire actuel pour ouvrir le menu. Le close provoque le message demandant si on veut enregistrer la saisie en cours. Que l’on réponde oui ou non, LibreOffice crashe.

Je suppose que pour bien faire, il faudrait forcer la mise à jour de la ligne de la table en cours d’édition avant d’exécuter le close. Ou ne pas autoriser l’action sur le bouton lorsqu’on est en cours d’édition. Mais comment faire ?

Bonjour ,
Personnellement ,j’insère ces commandes dans certaines de mes macros .
if FlagGard = 0 then
“nom du sous-formulaire”.last
FlagGard = 1
end if
Cela permet de se positionner sur le dernier enregistrement
Et ensuite les commandes
“nom du sous-formulaire”.updaterow mise à jour de la ligne
“nom du sous-formulaire”.reload pour recharger le sous-formulaire .

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