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ésactiver la touche escape pour un Combo


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Désactiver la touche escape pour un Combo
    Bonjour,

    Dans un form créé sous excel 2003,

    J'ai créé un combobox dont :
    La propriété rowsource est basée sur une plage de la feuille active sous jacente.

    La propriété MatchRequired est à true afin d'empêcher une saisie hors sujet.

    J'ai 3 questions :

    1 Comment initialiser à vide ou null un tel combo sans provoquer l'affichage du message d'anomalie de saisie puisque null ou vide ne sont pas dans les choix possibles et à l'occasion de quel évènement -> activate ou initialize?

    2 En cas de saisie hors liste du Combo, comment personnaliser le message d'anomalie et avoir autre chose qu'un imperturbable "Valeur de propriété non valide"?

    ET SURTOUT
    3 Comment empêcher l'utilisateur d'utiliser la touche Echap qui lui permet de passer outre la saisie Hors sujet et de continuer sa saisie dans le reste du formulaire.

    Merci à tous pour vos futures réponses éclairées.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    1 - Je n'ai pas compris Qu'entends-tu "initialiser à vide" . ComboBox1.clear vide le combo, ce n'est pas ça que tu cherches, alors quoi ?
    A placer de préférence juste avant Combo.rowsource ou le "remplissage" par additem. Mais là encore je doute avoir compris
    2 - Montre ton code, sans lui, je ne vois pas quand tu as cette erreur.
    3 - Pas compris. Je n'ai pas d'effet si j'appuie sur Escape.
    Ton code pourrait peut-être m'éclairer.

    PS - Où est ton combo ? Dans un userform ou dans une feuille de calculs ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour Ouskl'n'or et merci de ta réponse,
    J'avais pas pensé à clear.
    Le combobox se trouve dans un userform.
    Je t'ai mis un fichier simplifié en pièce jointe(excel 2003) pour t'exposer le problème.

    En l'exécutant, si tu saisis une valeur non autorisée, tu verras que tant que tu utilises la souris ou les touches entrée ou tab, Combobox1 te renvoie une erreur ("valeur de propriété non valide") et t'oblige à modifier ta saisie et tu ne peux pas passer au control suivant.

    Par contre, si tu utilises echap, la valeur erronée reste affichée dans combobox1, Combobox1 n'a aucune valeur (aucun évènement Update ne se produit), MAIS tu peux passer au control suivant ce qui fout totalement par terre l'intérêt d'une saisie obligatoire dans combobox1.

    Merci d'avance
    Ci-dessous le code d'initialisation du formulaire

    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()
        'initialise à rien le combobox1 merci ouskl'n'or
        ComboBox1.Clear
        'initialise les choix autorisés dans le combo en fonction d'une plage nommée
        ' "Listesaisie" de la feuil1 du classeur
        ComboBox1.RowSource = ThisWorkbook.Sheets("feuil1") _
        .Range("Listesaisie").Name.RefersTo
        'Empêche la saisie d'autres valeurs que celles présentes dans "Listesaisie"
        ComboBox1.MatchRequired = True
     
    End Sub
    Fichiers attachés Fichiers attachés

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Sans lire plus loin, que "aucun évènement Update ne se produit", as-tu tenté un test dans ComboBox_Exit ? Tu pourrais vérifier que la donnée est correcte, sinon, Cancel = true ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    LaBonneRéponse = Toncontrôle
    if not LaBonneRéponse then
        Cancel = True
        ComboBox1.SetFocus
    endif
    End Sub
    Tu dis
    A+

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Evenement exit
    Bonjour Ouskl'n'or,

    J'ai testé la solution suivante qui marche comme tu l'as très bien expliqué dans ta dernière réponse, merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not ComboBox1.MatchFound Then
        MsgBox "Valeur non autorisée", vbInformation, "Valeur non autorisée"
        Cancel = True
    End If
    End Sub
    Par contre, je ne sais pas comment contrôler le message automatique renvoyé par combobox1 en cas de saisie hors valeurs autorisées.
    Comment remplacer le message " valeur de propriété non valide" par un message personnalisé?
    Merci d'avance.
    A+

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu l'as à quel moment, ce message ? Je n'ai pas réussi à le provoquer et ça me rend très triste
    A+

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut moment du message
    Re-bonjour,
    Lorsque tu es dans le combobox, tu saisis volontairement un element non compris dans la liste. Quand tu sors du combo, par clic sur un autre control ou par tab ou par enter, la validité de la saisie est automatiquement controlée par le combo (probable par matchfound mais à l'occasion de quel évenement??) et si la valeur est hors champ le message apparait.
    Merci
    A+

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Je teste

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ben non, avec un test dans _Exit du combo,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If Me.ComboBox1.ListIndex = -1 Then
                MsgBox "Aucune valeur n'a été sélectionnée"
            Else
                MsgBox Me.ComboBox1.List(ComboBox1.ListIndex)
        End If
     
    End Sub
    avec MatchRequired = false et MatchEntry = fmMatchEntryComplete je n'ai que le message MsgBox "Aucune valeur n'a été sélectionnée"
    tu vois les propriétés de ton combo
    A+

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour Ouskl'n'or,
    Tu dis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If Me.ComboBox1.ListIndex = -1 Then
                MsgBox "Aucune valeur n'a été sélectionnée"
            Else
                MsgBox Me.ComboBox1.List(ComboBox1.ListIndex)
        End If
     
    End Sub
    Ok, ça marche, mais quand même MsForm n'est pas très élégant sur le coup.
    Pourquoi Microsoft s'embête avec des propriétés si le développement n'est pas abouti?
    Merci
    Sujet clos mais je chercherai quand même aut'chose.

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Msform n'a pas prévu les utilisateurs pervers qui, pour ne pas répondre à une question directe, prennent des chemins détournés pour lui échapper

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

Discussions similaires

  1. Une Solution pour désactiver la touche Caps Lock
    Par Graffito dans le forum Windows
    Réponses: 7
    Dernier message: 15/05/2017, 21h53
  2. Réponses: 0
    Dernier message: 21/02/2011, 10h07
  3. désactiver la touche ESCAPE en VB
    Par visualo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/09/2008, 14h43
  4. Lire rapidement la touche Escape
    Par BernardLimont dans le forum Assembleur
    Réponses: 11
    Dernier message: 16/07/2003, 22h09
  5. Désactiver les touches F1, F2, F3, F4, F5 dans IE
    Par ZiZouJH dans le forum Flash
    Réponses: 7
    Dernier message: 17/02/2003, 10h59

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