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 :

Time-out sur Application


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Par défaut Time-out sur Application
    Bonjour amis développeurs.

    Existe-t-il une fonction pour qu'en cas ne non utilisation d'une application Excel, il y ait un time-out qui ferme le programme.

    En effet, ayant une appli qui sert à beaucoup de monde, et ne pouvant la faire utiliser par plusieurs personnes en même temps (par obligation), lorsqu'un utilisateur oubli de la fermer avant de partir, les autres sont obligés d'attendre son retour, car son poste se vérouille.

    Merci à vous de me renseigner sur la faisabilité de ma demande.

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    C'est en effet possible, oui.
    Mais il te faudra utiliser la fonction GetLastInputInfo de la librairie User32 de l'Api de Windows et un "timer" (que tu peux mettre en oeuvre soit avec une autre fonction de l'API de Windows, soit en jouant habilement avec Application.Ontime).
    La chose est donc réalisable, mais assez coûteuse en ressources...
    Ne serait-ce pas préférable de te servir des outils de Windows pour mettre en veille/mot-de-passe ?

    EDIT IMPORTANT :
    Ce que j'ai dit plus haut repèrera une inactivité TOTALE de l'utilisateur (que ce soit donc sur ta fenêtre ou ailleurs)
    Si tu veux, par contre, imposer cette limitation de durée d'inactivité à ta seule appli, le principe est le même que précédemment, sauf à remplacer la fonction GetLastInputInfo (qui va repérer toutes les activités éventuelles de l'utilisateur) par la fonction GetInputState (qui, elle, ne repèrera que les messages système reçus par ta seule fenêtre .... Par le seul "fil" appelant, pour être plus précis...)..

  3. #3
    Membre éclairé Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Par défaut
    Merci de ta réponse, mais n'étant pas assez féru en VBA, je ne vois pas quelle est ou sont les instructions et la manière de s'en servir. Je ne vois pas quel est le code.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Je veux bien m'y mettre...

    Mais tu n'as pas choisi !
    Que veux-tu ?
    Une fin de ton appli si plus personne ne touche quoi que ce soit sur le PC pendant une durée déterminée ? (c'est la plus logique en matière de sécurité de ton appli)
    Je ne vais tout de même pas écrire les codes correspondant aux deux choix possibles !

  5. #5
    Membre éclairé Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Par défaut
    C'est tout à fait ce que j'aimerais. Je te remercie encore pour ton aide.

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Voilà donc :

    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
    Private Type LASTINPUTINFO
        cbSize As Long
        dwTime As Long
    End Type
    Private quand As Double, interval As Integer, duree As Long
     
    Private Sub Form_Initialize()
      Dim monintervalle As Integer
      monintervalle = 3 ' pour un intervalle de 3 secondes entre chaque vérif du timer
      duree = 100 ' on définit ici la durée (en secondes) d'inactivité au delà le laquelle on intervient
      TimerOn monintervalle
    End Sub
     
    Public Function inactif(ByVal duree As Long) As Boolean
        Dim deract As LASTINPUTINFO
        deract.cbSize = Len(deract)
        If GetLastInputInfo(deract) <> 0 Then
            inactif = (GetTickCount - deract.dwTime) > (1000 * duree)
        End If
    End Function
     
     
     
    '=====================================================================================
    'je n'ai pas Excel sous la main pour pouvoir vérifier ce qui suit (substitut d'un Timer)
    ' j'écris donc à main levée
    ' corrige au besoin (devrait pas y avoir beaucoup à corriger)
    Sub TimerOn(intv As Integer)
       interval = intv
       Application.OnTime Now + TimeSerial(0, 0, interval), "LeTimer"
    End Sub
     
    Sub TimerOff()
       On Error Resume Next
       Application.OnTime quand, "LeTimer", , False
    End Sub
     
    Sub LeTimer()
       If inactif(duree) Then
         TimerOff
         MsgBox "durée d'inactivité dépassée"
         ' remplace ici le msgbox par tes instructions à toi (de fermeture, donc)
         Exit Sub
       End If
       Lheure = Now + TimeSerial(0, 0, interval)
       Application.OnTime quand, "LeTimer"
    End Sub
    Je garantis jusqu'au trait ... Vérifie le reste (je n'ai pas Excel pour le tester, bien que celà devrait être bon).
    J'ai réglé à 100 secondes de durée d'inactivité ici :
    Pour tes tests divers, choisis de remplacer 100 par beaucoup moins (à moins que tu ne préfères boire un café entre chaque essai )
    Voilà ...

    Edit : Ah oui : pour tes essais, simule une véritable inactivité, hein .... tu ne touches plus rien (ni souris, ni clavier).

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

Discussions similaires

  1. Time out sur webservice
    Par sevyc64 dans le forum Web & réseau
    Réponses: 2
    Dernier message: 29/06/2009, 17h05
  2. Time out sur connexion à un Socket
    Par melleb dans le forum C#
    Réponses: 11
    Dernier message: 26/05/2008, 11h22
  3. [BCA]Time out sur Oracle
    Par jpclabaux dans le forum Administration-Migration
    Réponses: 5
    Dernier message: 17/10/2007, 15h49
  4. [JNI] Time out sur méthode native
    Par pierre2006 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 17/11/2006, 11h44
  5. SQL Server Time out sur Access
    Par Ronin-MK dans le forum Access
    Réponses: 2
    Dernier message: 14/06/2006, 20h42

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