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 :

Problème avec un code pour fermeture d'un fichier après un moment d'inactivité


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour à tous,

    J'ai mis en place ce code, trouvé sur le Web. Il permet que le fichier se ferme après un moment d'inactivité, dans mon cas 1 heure. Il fonctionne plutôt bien, mais je rencontre cependant un problème, au bout d'une heure il se ferme automatiquement même si je suis entrain de travailler dessus.
    Voici mon code :

    Dans 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
    17
    18
     
    Private Sub Workbook_Open()
    depart
    Dim rep%
    rep% = MsgBox("Merci d'activer le chronomètre. Sans action, le fichier se fermera dans environ " & MILLI_SECONDES / 1000 / 60 & " minutes. ", vbOKOnly)
    If rep% = vbOK Then
        Application.EnableEvents = True
    End If
    Call myTimer
     
    Sheets("Accueil").Visible = True
     
     
        With ActiveWindow
            .DisplayHeadings = True
            .Zoom = 100
        End With
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Not NoMake Then Call myTimer
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Not NoMake Then Call myTimer
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    Option Explicit
     
    '### Constante à adapter ###
    Public Const MILLI_SECONDES As Long = 3600000 '60 mn = 600000 (60 mn * 60 secondes * 1000 millièmes de seconde)
    '###########################
     
    Private Declare Function SetTimer& Lib "user32" _
      (ByVal hwnd As Long, ByVal nIDEvent As Long, _
      ByVal uElapse As Long, ByVal lpTimerFunc As Long)
    Private Declare Function KillTimer& Lib "user32" _
      (ByVal hwnd As Long, ByVal nIDEvent As Long)
    Private Declare Sub keybd_event Lib "user32.dll" ( _
      ByVal bVk As Byte, ByVal bScan As Byte, _
      ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
     
    Const VK_RETURN = &HD
    Const KEYEVENTF_EXTENDEDKEY = &H1
    Const KEYEVENTF_KEYUP = &H2
     
    Dim OnTimer&
    Dim OnTimer2&
    Public NoMake As Boolean
     
    Private Sub CloseAfterDelai()
    Call OffTimer
    Application.OnTime Now + TimeValue("00:00:01"), "Fermeture"
    End Sub
     
    Private Sub SimuleEnter()
    NoMake = True
    ThisWorkbook.Activate
    keybd_event VK_RETURN, 0, 0, 0
    keybd_event VK_RETURN, 0, KEYEVENTF_KEYUP, 0
    End Sub
     
    Private Sub RunTimer(Delai&)
    If OnTimer& > 0 Then OffTimer
    OnTimer& = SetTimer(0, 0, ByVal Delai&, AddressOf CloseAfterDelai)
    OnTimer2& = SetTimer(0, 0, ByVal Delai& - 100, AddressOf SimuleEnter)
    End Sub
     
    Private Sub OffTimer()
    If OnTimer& > 0 Then
      OnTimer& = KillTimer(0&, OnTimer&)
      OnTimer& = 0
    End If
    If OnTimer2& > 0 Then
      OnTimer2& = KillTimer(0&, OnTimer2&)
      OnTimer2& = 0
    End If
    End Sub
     
    Public Sub myTimer(Optional dummy As Byte)
    Call OffTimer
    OnTimer& = 0
    Call RunTimer(Delai:=Time + MILLI_SECONDES)
    End Sub
     
    Private Sub Fermeture()
    Dim WB As Workbook
    For Each WB In Application.Workbooks
      If WB.name <> ThisWorkbook.name Then
        WB.Activate
        Exit For
      End If
    Next WB
    ThisWorkbook.Save
    ThisWorkbook.Close savechanges:=True
    End Sub
    Merci par avance pour votre aide

    Bonjour à tous,

    J'ai cherché la solution mais sans succès. J'ai donc allongé le temps à une heure de cette façon il y a du temps pour la saisie.

    Je continue à chercher

  2. #2
    Membre régulier
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Octobre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 46
    Points : 107
    Points
    107
    Par défaut
    Bonjour,

    Juste quelques remarques :
    1) dans la procédure Workbook_Open(), depart c'est une procédure ou une étiquette ? Si c'est une procédure, elle n'est pas définie, si c'est une étiquette il manque les ":" finaux.
    2) où est initialisé le booléen NoMake ?
    3) A quoi sert la procédure SimuleEnter ? Si c'est pour générer un appui sur la touche "Entrée" pourquoi mettre le NoMake à vrai qui annule ensuite les re-initialisations du timer ?

    Cordialement.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    "depart" est une autre procédure qui n'a rien à voir avec la fermeture ou l'ouverture du fichier.

    NoMake est initialisé dans le dernier module de mon message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public NoMake As Boolean
     
    Private Sub CloseAfterDelai()
    Call OffTimer
    Application.OnTime Now + TimeValue("00:00:01"), "Fermeture"
    End Sub
     
    Private Sub SimuleEnter()
    NoMake = True
    Pour la dernière suggestion, je ne sais pas quoi répondre, si ce n'est le fait que je pensais que cela aurait une influence sur l'activité ou non du fichier.
    Mais apparement j'ai tout faux.

    Quelle est la bonne méthode ?

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

Discussions similaires

  1. Problème avec un code pour remplir une feuille de calcul
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 31/03/2011, 22h17
  2. problème avec mon code pour accès au serveur ftp
    Par mimi51340 dans le forum Général Java
    Réponses: 1
    Dernier message: 03/03/2008, 23h24
  3. Réponses: 2
    Dernier message: 17/10/2005, 22h16
  4. problèmes avec "include file" pour une page asp
    Par chipsense dans le forum ASP
    Réponses: 1
    Dernier message: 02/09/2005, 15h22
  5. [tomcat] [jsp] Problème avec driver OCI pour oracle
    Par nanardcompanie dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 01/07/2004, 09h54

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