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 :

Fermer UserForm en appuyant sur une touche


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut Fermer UserForm en appuyant sur une touche
    Bonjour,

    je souhaiterai permettre à l'utilisateur de fermer les boites de dialogues à l'aide de raccourcis clavier plutôt qu'à la souris. Un sujet similaire à été posté, mais je n'arrive pas à faire fonctionner la solution proposée. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
     
    If (KeyCode = vbKeyEscape) Then
        MsgBox ("Fermeture du formulaire")
        Call fermer
    End If
     
    End Sub
     
    Public Sub fermer()
        unload Me
    End Sub
    Ce code est placé dans la partie code d'un UserForm. Une fois l'userform affiché, il ne se ferme pas lorsque l'on appuie sur la touche échappe. La message box n'apparaît pas non plus. Avez-vous une idée ?

  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
    Points : 5 535
    Points
    5 535
    Par défaut
    Pense à mettre à True la propriété KeyPreview de ta UserForm.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Bonjour ucfoutu,

    j'ai regardé, il n'existe pas de propriété KeyPreview dans mon userform (je travaille sous Excel/VBA). Et même en imposant KeyPreview =True ça ne fonctionne toujours pas. D'ailleurs, l'aide d'Excel indique mot clé introuvable sur Keypreview. (Office 2003)

  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 535
    Points
    5 535
    Par défaut
    pas de keypreview ?
    Ah ce coquin de VBA ...

    Puisque c'est ainsi, on va se montrer encore plus coquin que lui (cà lui servira de leçon... ) :

    ajoute sur ton userform un bouton de commande et donne-lui le nom monkiki ... et ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub UserForm_Initialize()
       With monkiki
         .Cancel = True
         .Move Me.Width, Me.Height, 1, 1
       End With
    End Sub
     
    Private Sub monkiki_Click()
     msgbox "allez ! on ferme boutique..."
     Unload Me
    End Sub

    presse la touche escape ...
    tu dis ...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Est-ce que celà marche si j'ai plusieurs objets dans mon user form ou ça marche parce que le boutton "monkiki" est actif ? En ce qui me concerne j'ai beaucoup d'objets sur ma feuille, et l'utilisateur peut se déplacer entre les bouttons avec des tabulations.

  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 535
    Points
    5 535
    Par défaut
    Hé !

    Essaye donc, hein ===>> et tu le sauras très vite !!!

    EDIT : et si tu ne veux pas que la tabulation y parvienne, à ce bouton .... t'as pas une petite idée, non ? (Tapstop à false, chépamoa ...)....

  7. #7
    Membre actif Avatar de ilcocodrillo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Âge : 17
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 276
    Points
    276
    Par défaut
    Bravo ucfoutu pour ce tour de passe passe ! SI tu veux bien prendre quelques minutes pour m'expliquer ce Me je suis preneur car avec l'aide VBA et l'espion du débogeur je ne comprends pas ce que c'est que ce Me...

    Meuuuh....
    80% des pannes informatiques se situent entre le clavier et la chaise...

    L'informatique ça vous énerve, prenez 5mns de détente ici


    =========== ===========

    Une fois que le problème à trouvé une solution n'oubliez pas le

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Salut ucfoutu, effectivement ça marche : merci bien.

    Mais (car il y a un "mais") la touche échappe était un exemple, et si je souhaitais que ce soit la touche "B" par exemple ? En fait je souhaiterai que l'utilisateur puisse utiliser d'autres touches pour effectuer d'autres actions.

    Dans l'idéal j'aimerai pouvoir définir quelles touches ont un effet sur ... la fermeture par exemple.

    En fait, ça ne résoud pas vraiment mon problème, ça le contourne. J'aimerai comprendre pourquoi ma procédure de détection de la touche "échappe" ne fonctionne pas sur mon userform alors qu'elle fonctionne sur un userform vide.

  9. #9
    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 535
    Points
    5 535
    Par défaut
    Parceque, lorsqu'elle est vide, ta UserForm a le focus, pardi !

    Tu aurais dû poser la question directement au lieu de parler de la touche Escape, puis de venir nous dire qu'en fait tu voudrais pouvoir le faire avec d'autres touches ...()

    Moi, je vais voir la mer ...

  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 535
    Points
    5 535
    Par défaut
    Bon...
    de retour...

    J'ai peut être un truc à te proposer (ce sera encore un truc, car Onkey, si ma mémoire est bonne, fonctionne depuis la feuille Excel mais pas depuis une UserForm ...)

    Mais cette fois-ci, tu vas tout nous dire, hein ...

    Questions, donc :
    - combien d'actions différentes dois-tu lancer à l'aide du clavier
    - quelles touches as-tu prévu d'utiliser ?


    Je peux te proposer, éventuellement, un truc, mais avec une seule touche (telle la touche Escape) non alphanumérique. Toutes les autres devront être des lettres.

    A toi de répondre et n'oublie cette fois-ci rien, s'il te plait !

  11. #11
    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 535
    Points
    5 535
    Par défaut
    Bon (pas là ...) :
    On m'attend pour dîner .

    Vois ce que fais ceci :

    Une UserForm, sur laquelle tu mets 3 boutons de commande appelés matoucheescape, malettrez et malettreb

    Ce code :

    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 Form_Initialize()
       With matoucheescape
         .Cancel = True
         .Move Me.Width, Me.Height, 1, 1
       End With
       malettrez.Caption = "&z"
       malettreb.Caption = "&b"
       malettrez.Move Me.Width, Me.Height, 1, 1
       malettreb.Move Me.Width, Me.Height, 1, 1
    End Sub
     
    Private Sub matoucheescape_Click()
     MsgBox "t'as frappé Escape ===>> on ferme boutique"
     Unload Me
    End Sub
     
    Private Sub malettrez_Click()
      MsgBox "tu viens de frappez ALT+Z"
      ' ton action ici
    End Sub
     
    Private Sub malettreb_Click()
      MsgBox "tu viens de frappez ALT+B"
      ' ton action ici
    End Sub
    Lance et vois ce que fais :
    - la touche escape
    - la touche ALT + B
    - la touche ALT + Z

    L'emploi de la touche ALT en plus de la lettre B ou de la lettre Z est malheureusement inévitable..
    Bon appétit.

  12. #12
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Complément d'information... Toutes les fenêtres de Windows (peu importe l'application) sont fermables avec la combinaisons de touches Alt-F4. À moins que le programmeur ait prévu de bloquer ce raccourci standard.

    Pour fermer les fenêtres de documents sans fermer l'application mère (application MDI), le raccourci standard est Ctrl-F4.

    Donc, en principe, tu devrait pouvoir fermer un UserForm avec Alt-F4.

    Pour autre chose, il existe plusieurs options, et je crois que la plupart ont étés mentionnées.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Salut ucfoutu,

    merci pour ton aide, ça me convient ! Je garde cette astuce pour quitter l'userform. Et pour les lettres de raccourci, en fait, l'astuce que tu me propose est équivalente à utiliser la propriété "Accelerator" d'un objet !

    En tout cas merci bien pour ton coup de main, "pour un monde meilleur".

    zazaraignée, l'objectif est d'utiliser la touche connue de la plupart des utilisateurs pour fermer une fenêtre, c'est dire échappe. C'est pourquoi j'évite l'usage du Alt F4, en plus ça donne des crampes aux doigts !

  14. #14
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Alors, il faut mettre la propriété Cancel du bouton Fermer à True. Si, bien sur, les autres commandes ont bien été faites avant de fermer...

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Merci à tous les participants de cette discussion pour leurs apports respectifs.

  16. #16
    Candidat au Club
    Homme Profil pro
    thérapeute
    Inscrit en
    Mai 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : thérapeute

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    2023 et toujours le même problème: le code suivant ne fonctionne pas pour fermer avec la touche esc un userform :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
        ByVal Shift As Integer)
            If KeyCode = vbKeyEscape Then
                Unload Me
            End If
    End Sub
    Pour une solution simple qui marche pas besoin du code précèdent ni d'autres codes plus complexes , j'avais déjà un bouton "fermer" au quel j'ai édité la propriété "Cancel" sur true :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'Bouton Fermer avec la propriété Cancel = True 
    Private Sub CommandButton_fermer_Click()
     
        Unload Me
     
    End Sub
    quand on appuie sur esc maintenant ça ferme le formulaire.

    Je précise que je suis sur Excel de office 365

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

Discussions similaires

  1. Arrêter une temporisation en appuyant sur une touche
    Par Climoo dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 10/01/2008, 15h35
  2. Réponses: 12
    Dernier message: 25/08/2006, 13h44
  3. Activer un bouton en appuyant sur une touche du clavier
    Par brasco06 dans le forum AWT/Swing
    Réponses: 12
    Dernier message: 16/02/2006, 23h47
  4. Changer de texture en appuyant sur une touche
    Par Hyoga dans le forum OpenGL
    Réponses: 1
    Dernier message: 29/01/2005, 23h36
  5. Réponses: 15
    Dernier message: 28/01/2005, 04h46

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