Bon alors,
On a deux versions de postes de travail : Ubuntu 16.07 LTS ou Win 10 Pro 16299.1087
Le fichier est enregistré sur un serveur (lui-même sous Linux, mais je ne sais pas quelle version. A noter que je travaille sur une version en local sur mon poste.
Tous les postes (serveurs compris) sont loggés via un proxy situé à ....
En général, il y a Firefox et Thunderbird qui tournent en permanence.
Le JRE est Oracle Corporation 1.8.0_162 (pour les postes Ubuntu et Win10 Pro)
LibreOffice en détail, c'est Version: 6.0.3.2 Build ID: 1:6.0.3~rc2-0ubuntu0.16.04.1~lo2 (c'est un release spécifique à ma boutique)
Après moult essais et ouvertures/fermetures, de toutes les façons possibles (sur poste Ubuntu ou Win10 Pro, avec ou sans application qui tourne en parallèle, ouverture-fermeture, ouverture-saisies-fermeture, ouverture-boutons-saisies-fermeture, etc....), l'erreur apparaît toujours. De plus, tous ces essais m'ont permis de constater qu'en fait, c'est la
non-apparition de l'erreur qui est aléatoire, en plus d'être rare. Il semblerait que seule la fermeture sans rien avoir modifié ne la fasse pas apparaître...
Il ne reste que deux hypothèses :
1- Fermer un fichier avec
ThisComponent.close(True) est définitivement incompatible avec la bonne marche de l'ensemble... Mais alors, pourquoi existe-t-elle ?
2- Ça vient du fichier et il y a des scories de vieilles macros ou de codes plus ou moins compatibles avec la version actuelle... Pour en avoir le cœur net, j'ai fait un tout petit fichier avec juste les macros
Quitter et
FermerBase, l'une affectée à un bouton, l'autre à l'événement
Le document va être fermé
Code : Tout sélectionner
sub Quitter
sVar = MsgBox ("Fermer la base ?",1+32+128,"FERMETURE")
If sVar = 1 Then
FermerBase
on Error Resume Next
ThisComponent.close(True)
On Error GoTo 0
Else
Exit Sub
End If
end sub
Sub FermerBase
MsgBox ("Juste un essai pour que la macro fasse quelque chose de visible",0,"Boîte")
ThisComponent.store(True)
End Sub
Et ça marche, les deux font leur job, pas de message d'erreur...
Je vais donc gratter dans mon code et simplifier/supprimer tout ce qui me paraît bizarre, inutile, trop exotique... Et regarder ce que ça donne.
Le sujet pourrait être considéré comme résolu, mais je voudrais le laisser ouvert encore un petit peu, au cas où...
Merci à vous deux !
Ajout du 22/08/2019 11:41
C'est bon, je crois que c'est fini !
En faisant le ménage dans mes macros, j'ai vu que
TitreDoc tournait en boucle, ce qui pouvait contrarier LibO à la fermeture...
Je l'ai donc supprimée, après avoir constaté qu'elle tournait toujours alors même que j'avais enlevé le lien à l'événement de feuille.
(Une cellule continuait à être remplie, à chaque modification de la feuille ...???!??)
puis j'ai enfin compris qu'en plus de déclencher un
.close(True), les boutons
Fermer la Base envoyaient dans une macro avec
Select... Case, au contraire du passage par la petite croix de fermeture en haut à gauche (ou a droite, c'est selon) qui ne provoquent pas l'apparition du message d'erreur, tout comme l''utilisation du bouton
Fermer la fenêtre ajouté à la barre d'outils ou l'utilisation des touches Ctrl+W.
Bref, la source du problème est je pense :
- Soit une macro en boucle qui n'est pas fermée au moment du
.close(True)
- Soit un
.close(True) avant la sortie du
Select
- Soit les deux.
J'ai donc sorti la routine Quitter du select et je l'ai mise dans une macro bien isolée toute seule, loin de toute boucle ou Select, et je l'ai affectée à un bouton
Fermer la base ...
Au passage, j'ai utilisé
au lieu de
au cas ou il y aurait une histoire de fermeture de fenêtre versus fermeture de fichier...
Résultat :
- Utilisation de ce bouton particulier -> Pas d'erreur
- Utilisation des autres boutons avec passage par le Select -> Erreur...
Je place donc le sujet en résolu et résume la solution :
Ajout : Lorsqu'on veut fermer un tableau par un bouton, il faut
- veiller à ce qu'aucune boucle ne tourne
- Passer par une macro isolée :
Code : Tout sélectionner Sub Quitter
rem-------Demande de confirmation de fermeture-------------------
sVar = MsgBox ("Fermer la base ?",1+32+128,"FERMETURE")
If sVar = 1 Then
FermerBase
on Error Resume Next
ThisComponent.CurrentController.Frame.close(True)
On Error GoTo 0
Else
Exit Sub
End If
End Sub
Et en principe, tout se passe bien. |
J'ai aussi édité le titre du fil pour le rendre un peu plus explicite...
Merci à vous deux pour m'avoir poussé à me triturer un peu les méninges et à avancer....
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.