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 :

Inactivité et macro en cours [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut Inactivité et macro en cours
    Bonjour,

    Dans un module et dans This Workbook, j'ai mis une macro qui en cas d'inactivité sur mon fichier Excel, ce dernier s'enregistre puis se ferme automatiquement.
    Mon souci est que j'ai une macro qui lorsque je la déclenche dure plus longtemps, (entre 1 et 15 mn) selon certains choix, que le timer (5mn) que j'ai mis en cas d'inactivité.

    Comment faire pour y remédier sans changer la durée du Timer

    Voici mon code :

    ThisWorkbook :
    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
    Option Explicit
    Private Sub Workbook_Open()
        Call SetTimer
    End Sub
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Call StopTimer
    End Sub
    Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
        Call StopTimer
        Call SetTimer
    End Sub
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
      ByVal Target As Excel.Range)
        Call StopTimer
        Call SetTimer
    End Sub
    Dans un module :
    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
    Option Explicit
    Dim DownTime As Date
    Sub SetTimer()
        DownTime = Now + TimeValue("00:05:00")
        Application.OnTime EarliestTime:=DownTime, _
          Procedure:="ShutDown", Schedule:=True
    End Sub
    Sub StopTimer()
        On Error Resume Next
        Application.OnTime EarliestTime:=DownTime, _
          Procedure:="ShutDown", Schedule:=False
        On Error GoTo 0
     End Sub
    Sub ShutDown()
        ThisWorkbook.Save
        Application.Quit
     
    End Sub
    Cordialement

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour !
    Est-ce que lorsque tu appelles cette fonction qui dure éventuellement plus de 5 min, tu ne pourrais pas désactiver les évènements du classeur?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Application.EnableEvents = False
    'puis ne pas oublier à la fin du code
    Application.EnableEvents = True

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    peut etre mettre une variable Boolean qui interdit le blocage. Tu la mettrais a True au debut des macros susceptibles d'etre lancees et a False a la fin.

    Dans le code ShutDown, tu ajoutes la condition qu'aucune macro ne tourne =]
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Bjr RIAOLLE et merci pour ta reponse.
    Ou faut il mettre ton code ?
    Dans ThisWorkbook, dans mon module (Timer) ou dans le module de la macro qui peut durer plus longtemps que la duree du timer ?

    Cordialement.

  5. #5
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Citation Envoyé par Jean-Philippe André Voir le message
    Salut,

    peut etre mettre une variable Boolean qui interdit le blocage. Tu la mettrais a True au debut des macros susceptibles d'etre lancees et a False a la fin.

    Dans le code ShutDown, tu ajoutes la condition qu'aucune macro ne tourne =]
    Bjr et merci a toi met je ne touche pas ma bille en VBA et ta reponse reste un mystere pour moi.
    Peux tu m'expliquer plus en détail en me mettant des codes ?

    Cordialement

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Bien sur,

    dans le dernier module dans ton exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
    Dim DownTime As Date
    Public bBlockShutDown As Boolean
    '...
    Sub ShutDown()
        If Not bBlockShutDown Then
            ThisWorkbook.Save
            Application.Quit
         End If
    End Sub
    Dans le ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_Open()
        bBlockShutDown  =False
        Call SetTimer
    End Sub
    Dans les macros pouvant justifier un blocage de la fermeture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub TaMacroBloquante()
    bBlockShutDown  = True
    'le contenu de ton code
    bBlockShutDown  = False
    End Sub
    En esperant que tu comprends l'idee =]

    Et pour la formation, les cours et tutoriels pour apprendre Excel : https://excel.developpez.com/cours/
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    MErci Jean-Philippe,
    maintenant c'est beaucoup lus claire. J'ai tout compris. Je teste tout çà et encore merci

  8. #8
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Citation Envoyé par graphikris Voir le message
    Bjr RIAOLLE et merci pour ta reponse.
    Ou faut il mettre ton code ?
    Dans ThisWorkbook, dans mon module (Timer) ou dans le module de la macro qui peut durer plus longtemps que la duree du timer ?

    Cordialement.

    Le code se place dans la macro qui peut durer plus longtemps que la durée du timer. Il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = False
    au début du code est l'équivalent avec True à la fin du code. Cela empêchera les évènements de se déclencher.

  9. #9
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Dans un module et dans This Workbook, j'ai mis une macro qui en cas d'inactivité sur mon fichier Excel, ce dernier s'enregistre puis se ferme automatiquement.
    J'ai personnellement une question :
    Comment détermines-tu exactement cette "inactivité" ?
    Pour moi, par exemple, l'inactivité ne se résume pas à une non-intervention de l'utilisateur.
    La réponse à cette question est importante.

  10. #10
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Bjr Unparia,

    En fait mon fichier est sur un serveur, nous sommes 4 a l'utiliser mais pas en partage. Si l'un de nous ouvre le fichier puis s'absente pour aller en reunion par exemple, nous ne pouvons pas ouvrir le fichier car ie serveur nous dit : ce fichier est en cours d'utilisateur par XXXXX.

  11. #11
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ta réponse n'est en aucun cas une réponse à ma question, graphikris.
    Je la réitère donc :
    Comment détermines-tu exactement cette "inactivité" ?
    Pour moi, par exemple, l'inactivité ne se résume pas à une non-intervention de l'utilisateur.
    L'inactivité est-elle pour toi uniquement l'absence d'intervention (via souris, clavier, etc ...) du seul utilisateur ?
    Cette définition de l'inactivité est celle de l'utilisateur et pas forcément celle du classeur.
    Ne comprends-tu pas la différence ?
    Montre nous donc (on y verra peut-être plus clair ainsi) le code par lequel tu décèles ce que tu appelles "inactivité" .

  12. #12
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Mon code est au post #1.
    Sinon l'inactivité est celle du classeur (pas de clic, de passage de souris)

  13. #13
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    la réponse qu'attend unparia est : je calcule l'inactivité au moyen de l'évènement calculate et selectionchange


  14. #14
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Citation Envoyé par graphikris Voir le message
    Mon code est au post #1.
    Sinon l'inactivité est celle du classeur (pas de clic, de passage de souris)
    Je ne vois rien de tout cela dans le code montré dans ton message #1 et y vois encore moins ce qui y différencie l'activité de tel ou tel autre utilisateur.

  15. #15
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Y fallait le comprendre

  16. #16
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Rhoo c'était pas compliqué non plus.
    Schématiquement, il souhaite savoir "comment" et tu lui répond "pourquoi" tu le fais

    j'ai triché, je suis pas censé répondre car son intervention fait partie de ton cycle d'apprentissage, t'es pas tout nouveau sur le forum, on peut se permettre de te pousser un peu plus loin non ? C'est dans ton réel intérêt

  17. #17
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    je n'ai pas dit le contraire. Mais je fais du VBA par obligation donc forcément ça ne m'intéresse pas plus que ça donc j'oublie vite

  18. #18
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    L'inactivité d'un programme (quel qu'il soit) se décèle à l'absence de messages qu'il échange avec le système.
    Il se suffit pas que l'utilisateur ne se "promène" plus d'une cellule à l'autre (ton selection_change) pour décréter que le classeur n'est plus actif. Idem en ce qui concerne l'évènement Calculate
    Cela implique l'utilisation de la fonction GetLastInputInfo de la librairie user32 de l'Api de Windows.

    Maintenant : si tu te contentes de décréter que le seul fait de ne constater ni calculs, ni sélections est "déterminant" de l'inactivité de ton classeur, il te suffit de mettre en oeuvre ce qui t'a été indiqué, à savoir par exemple une variable booléenne publique mise à true à chacune de ces deux activités. Au Ontime : si false, tu quittes le classeur. Si true, tu ne quittes pas et relance le Ontime après avoir remis cette booléenne à False. Tu peux également utiliser une variable publique de type date actualisée lors de chacun de ces deux évènements et, au Ontime, ne quitter que si Now - cette variable > délai imparti.
    Tu peux enfin (et cela t'a également été suggéré) utiliser une variable booléenne mise à true au lancement de ta macro et remise à false à sa fin. Et tu ne quittes que si false.

  19. #19
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Merci pour tous ces conseils.
    Tout fonctionne comme je le voulais.

  20. #20
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    Je rouvre la discussion non pas parce que ça ne fonctionne pas mais plutôt parce qu'une question me trottine dans la tète :
    Dans mon module ci dessous, le TimeValue("00:05:00") est positionné à 5mn, comment faire si je veux indiquer ce délai non pas dans mon module mais dans la cellule B5 de la feuille 1 qui aura le format horaire ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
    Dim DownTime As Date
    Sub SetTimer()
        DownTime = Now + TimeValue("00:05:00")
        Application.OnTime EarliestTime:=DownTime, _
          Procedure:="ShutDown", Schedule:=True
    End Sub
    Sub StopTimer()
        On Error Resume Next
        Application.OnTime EarliestTime:=DownTime, _
          Procedure:="ShutDown", Schedule:=False
        On Error GoTo 0
     End Sub

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. arreter une macro en cours d'execution.
    Par scons dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 19/06/2014, 10h49
  2. Problème accès macro en cours d'utilisation
    Par Petru16 dans le forum Macro
    Réponses: 4
    Dernier message: 19/03/2010, 08h56
  3. Réponses: 1
    Dernier message: 12/02/2009, 11h55
  4. A quel classeur appartient la macro en cours d'exécution ?
    Par Oliv- dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/07/2008, 12h59
  5. [VBA-E]Nom du classeur contenant la macro en cours
    Par repié dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/02/2006, 10h24

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