Note: The other languages of the website are Google-translated. Back to English

Comment enregistrer et fermer le classeur après une inactivité pendant un certain temps?

Dans certains cas, vous pouvez fermer accidentellement un classeur lorsque vous êtes occupé par d'autres affaires pendant une longue période, ce qui peut perdre certaines données importantes du classeur. Existe-t-il des astuces pour enregistrer et fermer automatiquement le classeur si vous l'avez désactivé pendant un certain temps?

Enregistrement automatique et fermeture du classeur après une certaine inactivité avec VBA


flèche bleue bulle droite Enregistrement automatique et fermeture du classeur après une certaine inactivité avec VBA

Il n'y a pas de fonction intégrée dans Excel pour résoudre ce problème, mais je peux introduire un code de macro qui peut vous aider à enregistrer et fermer le classeur après une inactivité dans un certain temps.

1. Activez le classeur que vous souhaitez enregistrer automatiquement et fermer après une certaine inactivité pendant quelques secondes, puis appuyez sur Alt + F11 clés pour ouvrir Microsoft Visual Basic pour applications fenêtre.

2. Cliquez insérer > Module créer un Module script, et collez-y le code ci-dessous. Voir la capture d'écran:

Dim CloseTime As Date
Sub TimeSetting()
    CloseTime = Now + TimeValue("00:00:15")
    On Error Resume Next
    Application.OnTime EarliestTime:=CloseTime, _
      Procedure:="SavedAndClose", Schedule:=True
End Sub
Sub TimeStop()
    On Error Resume Next
    Application.OnTime EarliestTime:=CloseTime, _
      Procedure:="SavedAndClose", Schedule:=False
 End Sub
Sub SavedAndClose()
    ActiveWorkbook.Close Savechanges:=True
End Sub

 

doc enregistrer fermer le classeur après l'inactivité 1

3. Puis dans le Explorateur de projets volet, double-cliquez Ce cahieret collez le code ci-dessous dans le script ci-dessous. Voir la capture d'écran:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call TimeStop
End Sub

Private Sub Workbook_Open()
    Call TimeSetting
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   Call TimeStop
   Call TimeSetting
End Sub

 

doc enregistrer fermer le classeur après l'inactivité 2

4. Cliquez deux fois sur le module que vous avez inséré à l'étape 2 et appuyez sur F5 clé pour exécuter le code. Voir la capture d'écran:
doc enregistrer fermer le classeur après l'inactivité 3

5. Ensuite, après 15 secondes, une boîte de dialogue apparaît pour vous rappeler d'enregistrer le classeur et cliquez sur Oui pour enregistrer et fermer le classeur.
doc enregistrer fermer le classeur après l'inactivité 4

Conseils:

(1) Dans le premier code, vous pouvez changer le temps d'inactivité en autre dans cette chaîne: Maintenant + TimeValue ("00:00:15")

(2) Si vous n'avez jamais enregistré le classeur auparavant, le Enregistrer sous La boîte de dialogue apparaîtra en premier et vous demandera de l'enregistrer.
doc enregistrer fermer le classeur après l'inactivité 5


Bien Protéger la feuille de travail

Kutools pour Excel Protéger la feuille de travail La fonction peut protéger rapidement plusieurs feuilles ou tout le classeur à la fois.
doc protéger plusieurs feuilles de calcul

Les meilleurs outils de productivité de bureau

Kutools for Excel résout la plupart de vos problèmes et augmente votre productivité de 80%

  • Réutilisation: Insérer rapidement formules complexes, graphiques et tout ce que vous avez utilisé auparavant; Crypter les cellules avec mot de passe; Créer une liste de diffusion et envoyer des e-mails ...
  • Barre Super Formula (modifiez facilement plusieurs lignes de texte et de formule); Disposition de lecture (lire et modifier facilement un grand nombre de cellules); Coller dans la plage filtrée...
  • Fusionner les cellules / lignes / colonnes sans perdre de données; Contenu des cellules divisées; Combiner des lignes / colonnes en double... Empêcher les cellules en double; Comparer les gammes...
  • Sélectionnez Dupliquer ou Unique Lignes; Sélectionnez les lignes vides (toutes les cellules sont vides); Super Find et Fuzzy Find dans de nombreux classeurs; Sélection aléatoire ...
  • Copie exacte Plusieurs cellules sans changer la référence de formule; Créer automatiquement des références à plusieurs feuilles; Insérer des puces, Cases à cocher et plus encore ...
  • Extrait du texte, Ajouter du texte, Supprimer par position, Supprimer l'espace; Créer et imprimer des sous-totaux de pagination; Conversion entre le contenu et les commentaires des cellules...
  • Super filtre (enregistrer et appliquer des schémas de filtrage à d'autres feuilles); Tri avancé par mois / semaine / jour, fréquence et plus; Filtre spécial par gras, italique ...
  • Combiner des classeurs et des feuilles de travail; Fusionner les tableaux en fonction des colonnes clés; Diviser les données en plusieurs feuilles; Conversion par lots xls, xlsx et PDF...
  • Plus de 300 fonctionnalités puissantes. Prend en charge Office / Excel 2007-2019 et 365. Prend en charge toutes les langues. Déploiement facile dans votre entreprise ou organisation. Essai gratuit de 30 jours. Garantie de remboursement de 60 jours.
onglet kte 201905

Office Tab apporte une interface à onglets à Office et simplifie considérablement votre travail

  • Activer l'édition et la lecture par onglets dans Word, Excel, PowerPoint, Publisher, Access, Visio et Project.
  • Ouvrez et créez plusieurs documents dans de nouveaux onglets de la même fenêtre, plutôt que dans de nouvelles fenêtres.
  • Augmente votre productivité de 50% et réduit des centaines de clics de souris chaque jour!
bas de cabine
Commentaires (11)
Pas encore de notes. Soyez le premier à évaluer!
Ce commentaire a été minimisé par le modérateur sur le site
Le code ci-dessus ne fonctionne pas lorsqu'une cellule est active. C'est

1. entrez une valeur dans la cellule (n'appuyez pas sur Entrée ou sur la tabulation)

2. minimiser l'excel.

Dans ce cas, le code ne fonctionne pas.
Excel
Ce commentaire a été minimisé par le modérateur sur le site
Si vous travaillez dans un classeur séparé au moment où l'heure de fermeture est atteinte, il fermera ce classeur et non celui qui est inactif. Cela peut être résolu en ajustant le code à:

Dim CloseTime As Date
Atténuer WKB en tant que chaîne
Sous TimeSetting()
WKB = ActiveWorkbook.Nom
HeureFermée = Maintenant + ValeurHeure("00:00:15")
On Error Resume Next
Application.OnTime EarlyTime :=CloseTime, _
Procedure:="SavedAndClose", Schedule:=True
End Sub
Sous TimeStop()
On Error Resume Next
Application.OnTime EarlyTime :=CloseTime, _
Procedure:="SavedAndClose", Schedule:=False
End Sub
Sous EnregistréEtFermé()
Classeurs(WKB).Fermer Enregistrer les modifications :=True
End Sub
Torin
Ce commentaire a été minimisé par le modérateur sur le site
J'ai remarqué la même chose. Et j'ai trouvé la même solution :-)
Ro
Ce commentaire a été minimisé par le modérateur sur le site
Je rencontre parfois une "Erreur de temps d'exécution" lorsque j'ouvre le classeur dans lequel ce code est intégré. Quoi qu'il en soit, mieux écrire ce code pour qu'il soit plus stable?
Pulsateur
Ce commentaire a été minimisé par le modérateur sur le site
génial merci
seb
Ce commentaire a été minimisé par le modérateur sur le site
Salut, je veux insérer ce code dans un autre code comme le code d'expiration avec ce code, comment puis-je faire... ?
le code est... suivant
Sous-carnet de travail privé_Open ()

Dim exdate As Date
Dim i comme entier

'modifier les valeurs pour la date d'expiration ici !!!
anul = 2019 'année
luna = 5 'mois
ziua = 16' jour

exdate = DateSerial(anul, luna, ziua)

Si Date > exdate Alors
MsgBox ("L'application " & ThisWorkbook.Name & " a expiré !" & vbNewLine & vbNewLine _
& "La date d'expiration configurée est : " & exdate & " :)" & vbNewLine & vbNewLine _
& "Contacter l'administrateur pour renouveler la version !"), vbCritical, ThisWorkbook.Name

expired_file = ThisWorkbook.Path & "\" & ThisWorkbook.Name

En cas d'erreur GoTo ErrorHandler
Avec des classeurs (ThisWorkbook.Name)
Si .Chemin <> "" Alors

.Enregistré = Vrai
.ChangeFileAccess xlReadOnly

Tuer expired_file

'obtenir le nom du complément s'il s'agit d'un complément et désinstaller le complément
Si Application.Version >= 12 Alors
i = 5
Sinon : je = 4
Si fin

Si Right(ThisWorkbook.Name, i) = ".xlam" Ou Right(ThisWorkbook.Name, i) = ".xla" Alors
wbName = Gauche(ThisWorkbook.Name, Len(ThisWorkbook.Name) - i)
'désinstaller le complément s'il est installé
Si AddIns(wbName).Installé Alors
Compléments(wbName).Installé = Faux
Si fin
Si fin

.Proche

Si fin
Terminer par

Exit Sub

Si fin

'MsgBox ("Vous avez " & exdate - Date & "Jours restants")
Exit Sub

ErrorHandler:
MsgBox "Échec de la suppression du fichier.. "
Exit Sub

End Sub
Rajesh rana
Ce commentaire a été minimisé par le modérateur sur le site
Si vous travaillez dans un classeur séparé au moment où l'heure de fermeture est atteinte, il fermera ce classeur et non celui qui est inactif. Cela peut être résolu en ajustant le code pour : - corrigé et testé à partir du commentaire ci-dessous - utilisez ce code :

Entrez dans "Ce classeur"

Classeur de sous-classement privé_AvantFermer (Annuler en tant que booléen)
Temps d'appelStop
End Sub
Sous-carnet de travail privé_Open ()
Réglage de l'heure d'appel
End Sub
Private Sub Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range)
Temps d'appelStop
Réglage de l'heure d'appel
End Sub


Entrez dans "module":

Dim CloseTime As Date
Sous TimeSetting()
HeureFermée = Maintenant + ValeurHeure("00:10:00")
On Error Resume Next
Application.OnTime EarlyTime :=CloseTime, _
Procedure:="SavedAndClose", Schedule:=True
End Sub
Sous TimeStop()
On Error Resume Next
Application.OnTime EarlyTime :=CloseTime, _
Procedure:="SavedAndClose", Schedule:=False
End Sub
Sous EnregistréEtFermé()
ThisWorkbook.Close Savechanges :=True
End Sub


vous pouvez changer le réglage de l'heure en changeant CloseTime = Now + TimeValue("00:10:00") - ceci est réglé sur 10 minutes, changez le("00:10:00") à l'heure que vous voulez et cela fonctionne.
Joe
Ce commentaire a été minimisé par le modérateur sur le site
Je ne sais pas ce qui s'est passé mais cette solution ne fonctionne plus. Voici le correctif de cette solution qui a fonctionné pour moi:

````
Dim resetCompter aussi longtemps

Public Sub Workbook_Open()
On Error Resume Next
Définir xWB = ThisWorkbook
resetCount = 0
End Sub

Private Sub Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) En cas d'erreur, reprendre le suivant
Réinitialiser
End Sub

Sous-réinitialiser() En cas d'erreur, reprendre le suivant
Statique xCloseTime
Si resetCount <> 0 Alors
ThisWorkbook.Application.OnTime xCloseTime, "SaveWork1", Schedule :=False
resetCount = resetCount + 1
xFermeHeure = DateAjoute("n", 15, Maintenant)
ThisWorkbook.Application.OnTime xCloseTime, "SaveWork1", Schedule:=True

autre
resetCount = resetCount + 1
xFermeHeure = DateAjoute("n", 15, Maintenant)
ThisWorkbook.Application.OnTime xCloseTime, "SaveWork1", Schedule:=True
Si fin
End Sub
````
Ceci utilise le même SaveWork1 As :
```` Sous SaveWork1()
Application.DisplayAlerts = Faux
Ce classeur.Enregistrer
ThisWorkbook.Fermer

Application.DisplayAlerts = Vrai
End Sub

````
Xman
Ce commentaire a été minimisé par le modérateur sur le site
C'est bien. Des conseils sur l'ajout d'une boîte de message contextuelle qui avertira l'utilisateur que la feuille est sur le point de se fermer et lui donnera la possibilité de réinitialiser le minuteur ?
Jason
Ce commentaire a été minimisé par le modérateur sur le site
Quand je ne veux pas éditer et que je veux juste consulter, le fichier se ferme quand même. Il ne devrait pas fermer. Devrait redémarrer le comptage lorsque je sélectionne des cellules. Quelle est la solution?
Pedro Matos
Ce commentaire a été minimisé par le modérateur sur le site
Quand je ne veux pas éditer et que je veux juste consulter, le fichier se ferme quand même. Il ne devrait pas fermer. Devrait redémarrer le comptage lorsque je sélectionne des cellules. Quelle est la solution?
PedroMatos
Il n'y a pas encore de commentaires postés ici
Laisser vos commentaires
Publier en tant qu'invité
×
Évaluez cet article:
0  Personnages
Emplacements suggérés