Macro sauvegarde et fermeture fichier

Bonjour tout le monde,
Meilleurs vœux pour la nouvelle année, vœux de santé d’abord !
Je recherche une macro permettant la sauvegarde suivie de la fermeture d’un fichier en cas d’inactivité.
J’en possède une mais qui ne fonctionne pas hélas…dont voici le contenu ci-dessous.
Je vous remercie soit par les corrections à apporter soit par une nouvelle macro déjà existante…
Excellente journée à vous et prenez grand soin de vous
Jacques
Option Explicit

Dim oDlg as Object
Dim OuiNon as Boolean

Sub Main
'Macro déclenchée à l ouverture du classeur'
Dim lSec as long, lMin as long, intx as Integer
Dim MonTemps as String
For intx = 1 To 2
   lSec = Timer
   lMin = lSec / 60
   lMin = lMin Mod 60
   MonTemps = lMin & ":" &  lSec Mod 60
   Select Case MonTemps
      Case "0:0" , "15:0" , "30:0" , "45:0"
'A heure pile puis toutes les 15 minutes, appelle de la procédure InitDelai      '
         InitDelai
      End Select
   intx = intx - 1
Next
End Sub

Sub InitDelai
'Initialisation de la variable OuiNon'
   OuiNon = False
   OuvrirDialog
   Delai
End Sub

Sub OuvrirDialog
'Ouverture du dialogue'
Dim bibli As Object, monDialogue As Object
   DialogLibraries.LoadLibrary("Standard")
   bibli = DialogLibraries.GetByName("Standard")
   monDialogue = bibli.GetByName("Dialog1")
   oDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
   oDlg.Visible = True
End Sub

Sub Delai()
Dim monEtiquette as Object , I as Integer
'Temporisation pour la fermeture du document si pas de réponse'
   monEtiquette = oDlg.getControl("lblDelais")
      For I = 10 To 0 Step -1
         Wait 1000
         monEtiquette.Text = I & " Secondes"
         If OuiNon = True Then Exit For
         If monEtiquette.Text = 1 & " Secondes" Then
            oDlg.Visible = False
            saveandclose
         End If
      Next            
End Sub

Sub Bouton(oEv As Object)
   Select Case oEv.Source.Model.Name
'L utilisateur clique sur le bouton Oui'
      Case "cmdOK"
         oDlg.Visible = False
         OuiNon = True
'Il clique sur le bonton Non'
      Case "cmdClose"
         oDlg.Visible = False
         saveandclose
   End Select
End Sub

Sub saveandclose
'Si le document à été modifié on sauvegarde et on ferme, sinon on ferme'
Dim oDoc As Object
   oDoc = ThisComponent
   If oDoc.isModified = True Then
      oDoc.Store
      oDoc.Close(True)
   Else
      oDoc.Close(True)
   End If
'on arrête les procédures éventuellement en cours  ' 
   End
End Sub

@JBBR973 juste pour info. j’ai édité ton post pour ajouter une ' à la fin des commentaires. Ce n’est naturellement pas nécessaire en basic mais sur ce site oui pour l’interprétation du markdown.

Cordialement

Bonjour @JBBR973

Ci-joint un exemple.

  • La procédure PysOnLoad est lancée à l’ouverture du document et au clic sur le bouton Start
  • La procédure PysOnChangeest lancée sur Contenu modifié (clic droit sur l’onglet de la feuille puis Événements)
  • La procédure PysStopest lancée au clic sur le bouton Stop
  • Aide sur la fonction GetSystemTicks
  • Fonctionnement :
  • au démarrage initialisation des variables puis lancement de la boucle d’attente
  • cette dernière est interrompue si on a cliqué Stop ou si environ 10 secondes sans modification
  • lors d’une modification du classeur on réinitialise la variable servant de test

Les boutons permettent d’arrêter/redémarrer le traitement. Utile pour la mise au point car les 10 secondes sont vite passées :slight_smile:

Voir FermerSurInactif.ods

Cordialement