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 :

Détection de touche


Sujet :

Macros et VBA Excel

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

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut Détection de touche
    Bonjour

    J'ai cherché sur le forum sans trouver solution à mon problème.
    Existe-t-il un moyen de détecter sous VBA si une touche quelconque a été appuyée, où si l'appuie sur le click droit, ou gauche ou la molette a été fait ? En bref, détecter si une quelconque action sur la feuille a été faite.

    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Je n'ai pas Excel sous la main, mais si tu ouvres VBA et que tu regarde sur ThisWorkbook ou sur ta feuille directement (double clique) tu as une liste déroulante en haut a droite, dans cette liste tu as BeforClick, OnMouseMouve, OnKeyUp... (c'est peut etre pas les termes exact) si tu met du code dans ces evenement, le code sera réalié lors par exemple d'un clique dans une cellule (cas de BeforClick)
    A++
    Qwaz

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

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Désolé, mais ceux qui apparaissent sont :

    activate
    beforedoubleclick
    beforerightclick
    calculate
    change
    deactivate
    followhipperlinck
    pivottableupdate

  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
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    tu as mal cherché car tu aurais dû trouver, par exemple, Application.OnKey.
    Laquelle ne te sert toutefois pas dans le cas qui t'intéresse, puisqu'elle détecte une touche à définir.
    J'ignore, n'ayant pas excel sous la main, si d'autres choses du genre existent.
    Si tel n'est pas le cas, il te faudra passer nécessairement par des fonctions de l'Api de Windows, en conjonction avec ... un timer !... (lourd, lourd..)
    L'enjeu en vaut-il vraiment la chandelle ? . Pourquoi donc cherches-tu à faire celà ?

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

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Car j'ai une macro qui me fait défiler un chronomètre
    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
    Sub timer_off()
    Dim start, PauseTime
    Dim S As Byte
        PauseTime = 600   ' Définit la durée.
        start = Timer    ' Définit l'heure de début.
        UserForm1.Show ([0])
        ActiveCell.Offset(0, 0).Activate
    Do While Timer < start + PauseTime
            If S <> Second(Time) Then
                UserForm1.Label1.Caption = Format(100 * Int((start + PauseTime - Timer) / 60) + Int((start + PauseTime - Timer) Mod 60), "00:00")
                S = Second(Time)
            End If
        DoEvents    ' Donne le contrôle à d'autres processus.
    Loop
    End Sub
    ce que je voudrais, c'est qu'en casd'appui sur une quelconque touche, le chronomètre se remette au début.
    J'ai bien essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CBX_Change()
    ActiveCell = CBX.Value
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    With CBX
    timer_off
    End With
    End Sub
    dans la feuille, mais quand j'ai validé une saisie, le chrono se remet bien au début et pour refaire une autre saisie, je suis oblgé de revalider la celluledans laquelle je veux aller, le userform a repris la main.
    Ais-je été assez clair ?

  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
    Points : 5 537
    Points
    5 537
    Par défaut
    Clair, oui ...

    Mais (dit mille fois) te servir d'une boucle avec la fonction Timer et DoEvents, le tout pendant 600 secondes, soit 10 minutes) est la meilleure méthode pour faire souffrir ton processeur !!!

    Sers-toi plutôt de Application.Ontime (mais il ne réagira au mieux que toutes les secondes)

    Ensuite : je t'ai parlé de Application.Onkey (qui t'éviterait ce mic-mac, à condition toutefois de définir la touche à presser.

    Mais (une autre fois) : quel peut bien être l'utilité d'une telle manoeuvre ?

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

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    L'utilité est, comme damandé déjà il y a un certain temps, j'ai un Base dont plusieurs personnes peuvent se servir, mais que certaines oublient de fermer avant d'aller déjeuner, par exemple. Donc les autres sont obligés d'attendre.
    Cette méthode est pratique mais a ses limites. Lorsqu'un utilisateur se sert vraiment de cette base, le timing n'en a cure et ferme l'appli, ce qui est embêtant.
    Avec ma nouvelle demande, le chrono ne serait vraiment utile que lorsqu'aucune touche ne serait validée pendant un certain temps.

    DEplus, pourrais-tu m'indiquer comment se servir de : Application.ontime, je ne vois pas comment m'en servir.
    Merci

  8. #8
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Je me souvient de mes début en programmation sur VB4 et il existait et existe surement toujours un moyen de faire une capture des message souris via un picturebox si mes souvenir sont exact, en utilisant les api windows pour lier la souris au DC du PictureBox ou un truc dans ce gout la.
    a++
    Qwaz

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonsoir,

    puisque tu utilises un userform, essaie en plaçant une textbox dessus, donne-lui le focus, et utilise l'un des événements, KeyDown, KeyUp ou KeyPress de la textbox.

    Maintenant, à bien regarder au lieu de lancer une procédure Timer tout le temps,il y a un événement particulier pour ne la lancer que lorsque c'est nécessaire; c'est la demande d'ouverture du fichier par un nouvel utilisateur.
    Autre chose, déclenche la fermeture du fichier pendant l'heure du déjeuner.

  10. #10
    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
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par babybell Voir le message
    L'utilité est, comme damandé déjà il y a un certain temps, j'ai un Base dont plusieurs personnes peuvent se servir, mais que certaines oublient de fermer avant d'aller déjeuner, par exemple. Donc les autres sont obligés d'attendre.
    Cette méthode est pratique mais a ses limites. Lorsqu'un utilisateur se sert vraiment de cette base, le timing n'en a cure et ferme l'appli, ce qui est embêtant.
    Avec ma nouvelle demande, le chrono ne serait vraiment utile que lorsqu'aucune touche ne serait validée pendant un certain temps.
    Ouais...
    Au bout du compte, il s'agit de déterminer l'absence d'activité et de décider en conséquence...

    Ce sujet a déjà été traité (et j'y ai participé) il y a environ 3 ou 4 mois ...
    Une fonction de l'Api de Windows permet de déceler l'absence d'activité.
    La solution proposée faisait justement appel à l'utilisation de Application.Ontime ...
    Fais une recherche sur ce forum et tu retrouveras la discussion dont il s'agit !
    (peut-être avec le mot activité ...)

    EDIT :
    Ah çà alors, c'est trop fort !
    Je viens de retouver la discussion dont il s'agit !
    1) tu en es l'auteur
    2) tu as eu ta solution
    3) Application.Ontime y est utilisé, précisément !!! ...

    On ne va tout de même pas recommencer, non ?

  11. #11
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Hihihi, je trouve deja pénible de répondre 50 fois par semaine aux même questions qui reviennent sans cesse, mais si en plus les gens se mettent a reposer les même questions a 4 mois d'intervalle... ça va commencer a être... compliqué on va dire...
    Ceci dis pourrais tu donner le lien de la conversation ucfoutu, car le sujet pourrait m'intéresser, malheureusement je ne le trouve pas en faisant la recherche dans le fofo.
    Merci d'avance

    [edit]
    Au temps pour moi!
    http://www.developpez.net/forums/d65...t-application/
    [/Edit]


    Qwaz

  12. #12
    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
    Points : 5 537
    Points
    5 537
    Par défaut
    Pas de problème...
    Il est en plus balisé "RESOLU" !!

    http://www.developpez.net/forums/d65...t-application/


    EDIT :
    J'avais même fabrique un ocx paramétrable, qu'il suffit d'insérer sur un userform... et zou ... (il se débrouille seul et sert en plus parfaitement de timer, même si on ne s'occupe pas de l'inactivité... donc sans avoir à s'amuser avec Application.Ontime)
    Je viens de le retrouver dans mon fouillis (je ne l'avais pas encore jeté ...)
    Qui le veut ?

  13. #13
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Je suis preneur, ça peut servir, le timer n'étant pas implémenté sur vba
    ++
    Qwaz

  14. #14
    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
    Points : 5 537
    Points
    5 537
    Par défaut
    Le voilà donc (fichier zip joint)

    Mets-le dans le fichier système et n'oublie pas de l'enregistrer par regsvr

    voici maintenant comment l'utiliser :

    - le mettre sur un userform (composants complémentaires, etc...).

    si tu ne veux pas voir l'userform, tu le peux en ajoutant Me.hide ou me.visible = false

    exemple de code pour l'userform :

    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
    Private Sub UserForm_Initialize()
      espionactivite1.Battement = 1000  'fréquence du "battement", exprimée en millisecondes
      espionactivite1.Espionne = True 'si true : Timer en route... si False : Timer stoppé
      espionactivite1.timeout = 20 'durée d'inactivité permise (au delà de laquelle on "coupe"), exprimée en secondes
    End Sub
     
    Private Sub espionactivite1_actionaubattement()
     Label1.Caption = Time ' c'est là en démo de fonctionnement du Timer seul' tu peux mettre ici toute autre action de ton choix.
     ' tout ce qui suit va gérer la surveillance d'inactivité
     ' rien ne t'oblige à surveiller ce point-là ! le Timer continuera à fonctionner si tu inhibes les lignes qui suivent, donc
     If espionactivite1.inactif() Then ' 
       espionactivite1.Espionne = False
       MsgBox "voilà ! temps expiré ... c'est à la place de cette msgbox que tu dois mettre tes instructions de fermeture ou autres , comme tu les entends"
       Unload Me
     End If
    End Sub

    Voilà ...

    Lance l'userform et vois .... rien ne se passera tant que tu es actif (souris, clavier) . Lâche ensuite tout et éloigne-toi un peu de ton pc et laisse 20 secondes s'écouler sans activité et constate...
    Fichiers attachés Fichiers attachés

  15. #15
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Cool merci bien, je vais me garder ca au chaud, il manque une section contribution a cette partie du forum, ce serait tout a fait la place de se genre de chose
    La discution n'aura pas été inutile... du moins pour moi ^^
    A++
    Qwaz

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

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Bonjour à tous
    Encore merci de votre aide, mais étant sur mon lieu de travail, je ne peux rien mettre dans le fichier system.
    Néanmoins, j'ai enfin réussi à trouver la solution à mon problème.
    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
    Sub timer_off()
    Dim start, PauseTime
    Dim S As Byte
        PauseTime = 100   ' Définit la durée.
        start = Timer    ' Définit l'heure de début.
    Do While Timer < start + PauseTime
            If S <> Second(Time) Then
            S = Second(Time)
            End If
        DoEvents    ' Donne le contrôle à d'autres processus.
    Loop
    End Sub
    et sur la feuille concernée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CBX_Change()
    ActiveCell = CBX.Value
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    With CBX
    timer_off
    End With
    End Sub

  17. #17
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Re
    Aller voila ce que j'utilise de mon coté pour réaliser ce que tu souhaites

    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
    Public AnyChange As Boolean
    Const TDelai = "00:15:00"
     
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    Sub Minuteur()
    AnyChange = True
     
    Exit Sub 'a supprimer une fois mis en place
     
    Application.OnTime Now + TimeValue(TDelai), "SaveAndClose", False
    End Sub
     
    Sub SaveAndClose()
    Dim TempoX As Integer, TempoY As Integer
    Beep: Beep: Beep
    AnyChange = False
    For TempoX = 0 To 40
        DoEvents
        If AnyChange Then Exit Sub
        Sleep 250
    Next
    If ThisWorkbook.ReadOnly Then ThisWorkbook.Close False Else ThisWorkbook.Close True
     
    End Sub
    Il faut ensuite faire appelle a Minuteur dans les événements principaux du classeur

    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
    Private Sub Workbook_Open()
    'Init de la fermeture auto
    Minuteur
    ...
     
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    'On repousse la fermeture auto
    Minuteur
    End Sub
    ...
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    'On repousse la fermeture auto
    Minuteur
     
    End Sub
    ...
     
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    'On repousse la fermeture auto
    Minuteur
    End Sub
    a++
    Qwaz

  18. #18
    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
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par babybell Voir le message
    Bonjour à tous
    Encore merci de votre aide, mais étant sur mon lieu de travail, je ne peux rien mettre dans le fichier system.
    Ah bon...
    (mais apparemment, cela ne te gêne absolument pas de sur-solliciter ton processeur avec tes Dovents et la fonction Timer dans une boucle !!!...)
    Tu veux que je te fabriques (largement possible) un "Timer" en ne faisant qu'appel aux fonctions de l'Api de Windows ?
    Je veux bien, mais il te faudra alors le comprendre, le mettre où il faut (dans un module) et savoir l'utiliser correctement (sans poser mille et une questions, hein... sinon non ...)...
    Tu dis ...

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

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    OK, je veux bien et t'en remercie

  20. #20
    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
    Points : 5 537
    Points
    5 537
    Par défaut
    Hé bien, allons-y donc en nous amusant et sans nous faire de croche-pieds ...

    Je t'ai bâclé un petit exemple ('et l'ai vérifié) :

    Sur un userform : un label nommé Label1 et 3 boutons de commande nommés command1, command2 et command3
    le code suivant :
    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
    Private Sub Command1_Click()
       battement_timer = 100 ' le timer aura un 'battement de 100 millisecondes"
       demarrons_timer 'on démarre le timer
    End Sub
     
    Private Sub Command2_Click()
      stoppons_timer 'on arrête le timer
    End Sub
     
    Private Sub Command3_Click()
      'tu as intérêt à faire ici attention : on ne quitte pas sans stopper le timer, sinon ===>>> Boum !
      ' utilise donc queryUnload, de ton côté (celà t'évitera certains petits problèmes
      stoppons_timer
      Unload Me
    End Sub
    '==================================================================================
     
    'Rien de ce qui suit ne t'est utile !
    'Ce n'est là que pour la démo et rien d'autre
    Private Sub UserForm_Activate()
      Command1.Caption = "Go"
      Command2.Caption = "STOP"
      Command3.caption = "QUITTER"
      Label1.Caption = ""
    End Sub
    et (à part) dans un module , le code suivant :

    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
    Public Declare Function timeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, _
                                                   ByVal uResolution As Long, ByVal lpFunction As Long, _
                                                   ByVal dwUser As Long, ByVal uFlags As Long) As Long
    Public Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
    Public Const TIME_PERIODIC = 1
    Public Const TIME_CALLBACK_FUNCTION = &H0
    Public mon_timer As Long, battement_timer As Long
     
    Public Sub demarrons_timer()
        mon_timer = timeSetEvent(battement_timer, 0, AddressOf procedure_timer, 0, _
                                       TIME_PERIODIC Or TIME_CALLBACK_FUNCTION)
     End Sub
     
    Public Sub stoppons_timer()
        timeKillEvent mon_timer
        mon_timer = 0
     End Sub
     
    Public Sub procedure_timer(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, _
                                                    ByVal dw1 As Long, ByVal dw2 As Long)
        ' à toi de mettre ici les instructions que tu veux
        'en lieu et place de ce petit affichage d'heure en démo !
        UserForm1.Label1.Caption = Now
    End Sub
    Voilà ...
    Maintenant : trois remarques :
    1) on travaille ici avec un "CallBack" ===>> la moindre erreur de compréhension, d'adaptation et de lancement de ta part = plantage en mode création, déjà. Ne quitte que par le bouton disant "QUITTER" ou par la petite croix de l'userform (sinon : plantage possible dans certains cas)
    2) à toi de comprendre et de conjuguer maintenant avec (en exécution du "battement" du Timer) l'utilisation de la fonction que tu devrais maintenant connaître de l'API de Windows en ce qui concerne le décelage d'inactivité. Je n'y reviendrai pas car ce que je t'en ai dit dfans ton autre discussion me parait très clair.... et si tu es un développeur : tu l'es.... si non : tu ne l'es pas ...
    3) tu comprends bien (ou au moins le devine) que l'ocx que je te proposais te permettait précisément d'éviter, confortablement, tout celà, non ? (il ne fait d'ailleurs rien d'autre, mais le fait à ta place, y compris en ce qui concerne le décelage d'inactivité...).
    A toi de voir, donc, maintenant : ou tu as compris l'exemple ci-dessus et sers-t-en, ou persuade ton responsable informatique de l'intérêt d'accepter l'OCX... ou continue comme tu l'entends dans tes "approximations hasardeuses"...
    J'ai quant à moi fini ICI.

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

Discussions similaires

  1. Détection des touches
    Par Oberown dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/12/2010, 16h16
  2. Détection de touches
    Par nicotom dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 05/06/2009, 16h12
  3. Détection de touches sans bloquer le programme
    Par DJ-sauron dans le forum Windows Forms
    Réponses: 6
    Dernier message: 03/11/2008, 09h52
  4. [D7] Détection de touche
    Par ericdelattre dans le forum Composants VCL
    Réponses: 1
    Dernier message: 13/09/2007, 16h09
  5. SDL_PollEvent et détection de touche
    Par mouteb dans le forum SDL
    Réponses: 6
    Dernier message: 14/11/2006, 22h58

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