IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Temporisation fermeture classeur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 656
    Par défaut Temporisation fermeture classeur
    Bonjour,

    Dans un module standard, j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Public HeureAlerte
    Option Private Module
    Sub ProchaineAlerte()
        With ThisWorkbooks  
            HeureAlerte = Now + TimeValue("00:05:00")  'ajustement
            Application.OnTime HeureAlerte, "Fin"
        End With
    End Sub
     
    Sub fin()
    Dim Répertoire As String, Fichier As String, FichierIndexé As String  
     
        Application.OnTime HeureAlerte, Procedure:="Fin", Schedule:=False
     
        réponse = MsgBox("Avez-vous fini d'utiliser ce Classeur ?" _
                & Chr(10) & Chr(10) & _
            "Si vous cliquez sur Non, une nouvelle alerte" _
                & Chr(10) & _
            "s'affichera dans 05 minutes...", vbYesNo + vbQuestion)
     
        If réponse = vbNo Then
            Call ProchaineAlerte
        Else
    Plutôt que de laisser la main à l'utilisateur, je souhaite fermer le classeur si aucune action n'est détectée dans l'intervalle de temporisation.

    J'ai donc ajouté ceci dans le module de Feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Call ProchaineAlerte
    End Sub
    ... et ça ne fonctionne pas !

    Après 5', la procédure "fin" s'exécute normalement jusqu'à :
    réponse = MsgBox("Avez-vous fini d'utiliser ce Classeur ?")
    ... et si l'utilisateur clique sur "Non", la procédure "ProchaineAlerte" s'exécute pour relancer une tempo de 5'

    Mais si "ProchaineAlerte" s'exécute à partir de :
    Worksheet_SelectionChange
    ça ne réinitialise pas le compteur.

    Par ailleurs, mais cela doit peut-être faire l'objet d'un autre fil de discussion, est-il possible d'avoir un "décompte" dans la barre de tâche ?

    En vous remerciant par avance pour votre aide,
    Cdt

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 418
    Par défaut
    Bonjour,

    Si vous envoyez un MsgBox, l'application va rester ouverte tant que l'utilisateur n'aura pas répondu oui ou non. Il n'y a donc pas réellement une fermeture automatique après un temps d'inactivité. En attaché, une possible façon de faire utilisant un UserForm. Pour l'exemple, 60 secondes avant apparition du formulaire, sauvegarde et fermeture si toujours pas de réaction après 60 autres secondes.

    Cordialement.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 656
    Par défaut
    Bonjour,

    Merci pour le fichier joint, très instructif et qui répond même à ma question "subsidiaire" !

    Désolé, j'ai oublié de modifier mon code en précisant que je voulais évidemment supprimer la Msgbox.
    Comme vous le rappelez, c'est bien le "problème", si l'utilisateur ne clique pas sur oui ou non, la procédure de fermeture est bloquée d'où mon idée de la contourner.

    Avez-vous une idée sur le fait que ma procédure ProchaineAlerte ne réinitialise pas la temporisation ? Elle s'exécute pourtant bien depuis Worksheet SelectionChange

    Cdt

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 656
    Par défaut
    Bonjour,

    Pour différencier la temporisation (ici 1 minute) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sub TimeSetting()
        CloseTime = Now + TimeValue("00:01:00")
    ... du compte à rebours que je fixe arbitrairement ici à 15'', je déduis 45'' aux 60'' initiales (code UF) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub AfficherSecondes()
    Dim i As Integer, n As Single
    
    '   n = (CloseTime - Now) * 24 * 3600
        n = ((CloseTime - Now) * 24 * 3600) - 45
    Bien que ça fonctionne, ça ne me semble pas très académique. J'imagine qu'on peut faire mieux.

    Cdt

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 656
    Par défaut
    Non, finalement, ça ne fonctionne pas !

  6. #6
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 418
    Par défaut
    Bonjour,

    En fait il faut absolument "annuler" le OnTime en cours avant d'en créer un autre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub ProchaineAlerte()
        Application.OnTime HeureAlerte, "Fin", , False    '--- annule le OnTime en cours
        HeureAlerte = Now + TimeValue("00:05:00")         '--- ajustement
        Application.OnTime HeureAlerte, "Fin", , True
    End Sub
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre fermeture classeur et fermeture excel
    Par ghosteur dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/06/2011, 09h24
  2. Temporisation et ouverture/fermeture classeur
    Par crassetph dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/03/2010, 07h52
  3. Suppression code VBA et fermeture classeur
    Par Kaaluu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/04/2009, 11h03
  4. VBa project fantome apres fermeture Classeur
    Par vanima dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/12/2008, 10h04
  5. [VBA-E]Problème de sauvegarde et de fermeture classeur
    Par teaRz dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 24/05/2006, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo