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 :

Key Press sur une feuille excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 298
    Par défaut Key Press sur une feuille excel
    Bonjour,

    Comment détécter une touche de clavier enfoncée sur une feuille excel (et non pas sur une userForm) mais sans perdre la fonctionnalité de la touche ??

    Par exemple, je désire savoir quand un utilisateur tape la touche "Del" mais que l'utilisateur puisse quand même utiliser cette fonction (c'est à dire de deleter..)

    Merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Il n'y a pas d'événement KeyPress pour une feuille mais il y a moyen de bricoler cet événement via l'API GetAsyncKeyState

    Dans un module standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
     
    Sub test_touche_del()
    If GetAsyncKeyState(46) <> 0 Then '<-- 46 correspond au KeyCode de la touche Delete
    MsgBox "La touche DELETE a été utilisée"
    End If
    End Sub
    et dans l'événement Change de la feuille concernée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    test_touche_del
    End Sub

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 298
    Par défaut
    Merci pour vos réponses.

    Lorsque j'insère ta première partie de code dans mon module, il me dit : Compile error : Only comments may appear after End Sub...
    Ou dois-je le placer exactement ?

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Tu l'insères où tu veux mais cette ligne ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
    doit impérativement se trouver en tête de module.

    Pour être certain, tu copies mon code tel quel dans un nouveau module

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 298
    Par défaut
    Effectivement, ça marche mieux lorsque je le place en début de code !

    Par contre, lorsque je supprime un objet de ma feuille Excel, il me supprime mais sans m'afficher le messagebox. Par contre, si je me trouve dans une cellule et que je clique sur la touche Del, il m'affiche le message...

    Tu sais pour quelle raison ?

  6. #6
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    oui c'est normal, les objets n'entrent pas en ligne de compte dans l'événement Worksheet_Change.
    Par contre les objets acceptent l'événement KeyPress, il faudra donc jongler avec les deux événements.

    Pour gérer un événement sur tous tes objets en évitant de taper le code dans chaque objet, voir du côté des Modules de Classe

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 298
    Par défaut
    Ah voilà.. ça, je ne le savais pas !!
    Pourrais-tu, si tu as 5 minutes, me donner un exemple, stp ?
    Merci bcp pour ton aide..

    Ah mais attend.. je crois qu'il y a eu un malentendu. Quand je parle d'objet, je ne veux pas parler de bouton, image, etc... Moi je disais "objet" dans le sens fichier externe (en fesant "insert -> object..")

    Est-ce bien correct ? On peut aussi avoir l'évenement KeyPress sur ces objets là ?

  8. #8
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    A ma connaissance non et je n'ai pas de solution, désolé.

  9. #9
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 298
    Par défaut
    Bon ben très bien.. une fois de plus, je me rend compte que Excel peut être très large comme très limité sur certains points !!

    Merci en tout cas pour ton aide.. c'est sympa !

  10. #10
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Ne perdons pas de vue qu'Excel, à la base..., est un tableur permettant d'effectuer des calculs, il ne faut pas s'étonner que si on lui demande de faire des frites, celles-ci ne seront pas forcément cuites à point

Discussions similaires

  1. Réponses: 9
    Dernier message: 04/04/2007, 11h16
  2. [VBA-E] musique sur une feuille Excel
    Par jnmab dans le forum Excel
    Réponses: 2
    Dernier message: 01/04/2007, 11h21
  3. [VBA EXCEL]comment utiliser les boites a outils control sur une feuille excel
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/02/2007, 19h04
  4. Réponses: 8
    Dernier message: 15/05/2006, 14h33
  5. ecrire sur une feuille excel avec Asp
    Par Ajay dans le forum ASP
    Réponses: 7
    Dernier message: 06/01/2006, 23h18

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