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

IHM Discussion :

liste choix étendue sur champs avec masque de saisie


Sujet :

IHM

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 56
    Points : 34
    Points
    34
    Par défaut liste choix étendue sur champs avec masque de saisie
    Bonjour à tous,

    Je ne sais si vous l'avez remarqué mais lorsque vous avez un champs en liste modifiable paramétré avec un masque de saisie... et que vous demandez auto étendre la liste (l'option bien sympas qui consiste à remplir le champs au fur et à mesure de la saisie, par les solutions possibles dans le contenu de la liste... suis je clair ?! ) et bien cette dernière engendre une réaction plutôt désagréable : à la première touche enfoncée, "l'auto étendre" comble entièrement le champs avec la première solution qu'il trouve dans la liste empéchant ainsi de compléter son choix pour trouver la bonne solution.

    Pour moi c'est problématique parce que :
    - j'ai besoin d'un masque pour guider l'utilisateur dans la saisie quand celle-ci ne fait pas partie de la liste
    - l'utilisateur doit pouvoir aussi faire un choix dans la liste de manière "ergonomique"

    Il est vrai que le "format" ne pose pas ce problème, mais il ne guide pas l'utilisateur dans la saisie

    Alors si vous avez des solutions... merci à vous

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    L'un ne peut pas être associé à l'autre.
    Il faut faire un choix.

    Si le problème vient d'une erreur possible durant la saisie , à toi de mettre un gestionnaire d'erreur sur l'événement BeforeUpdate() avec un Cancel à True lorsque celle-ci est incorrecte.

    Dans ton message, tu affiches la syntaxe à respecter.

    Tu peux en //, user de l'évenement NotInList() qui est méga pratique.

    Argy

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Merci pour ta réponse,

    ...domage pour le choix obligatoire.

    Pour l'évenement sur NotInList(), cela suppose que le champs soit limité aux valeurs de la liste (pas de nouvelles valeurs) ce qui ne correspond pas à mon choix ... re-domage

    reste l'évènement avant MAJ, cela revient à se servir du "valide si" (avec la gestion du message personalisé) mais dans l'absolu c'est moins pratique qu'un masque de saisie puisque cela renvoie une erreure après la saisie (et non accompagne la saisie à chaque caractère)... je ne prend pas mes utilisateures pour des boulets, mais aime bien ce qui est le plus simple possible

    Bref, je vais chercher malgrè tout du côté des évènements, mais au fait quels sont les fonctions qui testent si un caractère (ou une suite de carctère récupérée par extractchaine) est une lettre ou un chiffre ?

    Merci

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par le.dams Voir le message
    Pour l'évenement sur NotInList(), cela suppose que le champs soit limité aux valeurs de la liste (pas de nouvelles valeurs) ce qui ne correspond pas à mon choix ... re-domage
    Non, ce n'est pas le cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Function DataNotInList(ByRef CB As ComboBox, ByVal NewData As String, _
    ByVal Response As Integer) As Integer
        If MsgBox("La valeur " & NewData & " ne fait pas partie de la liste..." & _
            vbCrLf & vbCrLf & "Voulez-vous l'ajouter ?", vbQuestion + vbYesNo, _
            "Contrôle contenu") = vbYes Then
            Response = acDataErrAdded
            CB.RowSource = CB.RowSource & ";" & NewData
        Else
            CB.Undo
            Response = acDataErrContinue
        End If
        DataNotInList = Response
    End Function
    Cela a l'avantage de suivre l'action de l'utilisateur sans justement le prendre pour un boulet...
    Argy

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Bon j'ai peut être omis d'indiquer que je suis une bille en vba, et du coup je gère tout en macro je sais que c'est une hérésie pour certains d'entre vous mais en fait on peut faire vraiment beaucoup de choses déjà comme ça.
    Bref, ainsi quand je simule une macro sur l'évènement "sur absence dans liste", elle ne se déclenche que quand je limite le champs à la liste.

    Comme je ne cherche pas à rester un nul de vba toute ma vie , je voudrais bien me servir de ton code, mais mes essais se sont avérés infructueux.
    Serais tu assez patient pour m'en dire un peu plus sur la façon de l'utiliser ? (directement dans le vba sur l'évènement "sur absence dans liste" du champs, ou dans un module qui est ensuite appelé par "call"... ?)

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    ... quitte à t'embêter, j'assume jusqu'au bout :
    pour tester un ou pls caractère si numérique, OK c'est "EstNum(expression)" mais pour tester si c'est une lettre et rien qu'une lettre (pas de symboles,...) quelle est la fonction STP ?

  7. #7
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Attention l'exemple que je t'ai donné est pour une liste de valeurs.

    Pour une liste issue d'une table, il faut utiliser la même finction mais modifiée :
    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
     
    Private Function DataNotInList(ByRef CB As ComboBox, ByVal NewData As String, _
        ByVal Response As Integer) As Integer
    Dim SQLCommand As String
        If MsgBox("La valeur " & NewData & " ne fait pas partie de la liste..." & _
            vbCrLf & vbCrLf & "Voulez-vous l'ajouter ?", vbQuestion + vbYesNo, _
            "Contrôle contenu") = vbYes Then
            Response = acDataErrAdded
            SQLCommand = "INSERT INTO TBCategories (Categorie) VALUES ('" & NewData _
                & "');"
            CurrentDb.Execute SQLCommand, dbSeeChanges
        Else
            CB.Undo
            Response = acDataErrContinue
        End If
        DataNotInList = Response
    End Function
    Tu affectes à l'événement comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Compare Database
     
    Private Sub cboCategories_NotInList(NewData As String, Response As Integer)
        Response = DataNotInList(cboCategories, NewData, Response)
    End Sub
    Pour tester un caractère, cela dépend jusqu'où tu veux aller...
    Si ça se limite à l'alphabet et que tu veux empêcher toute autre saisie que ABCDEF...XYZ, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub cboCategories_KeyPress(KeyAscii As Integer)
        Select Case KeyAscii
            Case 65 To 90, 97 To 122
            Case Else
                MsgBox "Une lettre, S.V.P., une lettre voyons !!!", vbExclamation
                KeyAscii = 0
        End Select
    End Sub
    Sinon, il faut tester avec une boucle For/Next et ça complique un peu...
    Mais sur le principe, il faut user de la fonction Chr() ou de Asc() selon le cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Chr(65) 'te renvoie "A"
    Asc("B") 'te renvoies 66
    Argy

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Merci pour le test de caractère selon le code ascii, ça marche bien.

    Pour la confirmation d'une valeur dans une liste, je vais essayer de le tester aujourd'hui

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Re...

    Je reviens sur le test ascii selon ton code VBA :
    sur réception focus depuis la souris (clic)... OK pas de problèmes, mais sur réception focus depuis une touche clavier (tab ou entrée à partir du champs précédent), l'évènement Keypress se déclenche et surtout considère que c'est non valide selon le test (même si Asccii 0 accordé dans les valeurs valides... de toutes façons cela fait pareil si le champs est déjà remplie d'une valeur valide) -> as tu une idée ?

    Pour ta demande de confirmation d'ajout dans la liste, j'ai tenté d'adpater ton code à mes "noms" mais je bloque sur la commande INSERT TO en SQL ("erreur de synthaxe")...
    ma source de contenu est une commande SQL qui ne fait que récupérer un champs en le regroupant et le classant par ordre alpha, alors j'ai voulu faire l'ajout directement dans la table de la sorte (Table "FICHE DE SUIVIE QUALITE" champs "Fournisseur"):

    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
    Function DataNotInList(ByRef CB As ComboBox, ByVal NewData As String, _
        ByVal Response As Integer) As Integer
    Dim SQLCommand As String
        If MsgBox("La valeur " & NewData & " ne fait pas partie de la liste..." & _
            vbCrLf & vbCrLf & "Voulez-vous l'ajouter ?", vbQuestion + vbYesNo, _
            "Contrôle contenu") = vbYes Then
            Response = acDataErrAdded
            SQLCommand = "INSERT INTO FICHE DE SUIVIE QUALITE (Fournisseur) VALUE ('" & NewData & "');"
            CurrentDb.Execute SQLCommand, dbSeeChanges
        Else
            CB.Undo
            Response = acDataErrContinue
        End If
        DataNotInList = Response
    End Function
    Merci pour ton aide

  10. #10
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Tu peux lire avec attention ce tuto.

    Ton script :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO FICHE DE SUIVIE QUALITE (Fournisseur) VALUE ('" & NewData & "');"

    Devrait être si tu souhaites conserver ce nom :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO [FICHE DE SUIVIE QUALITE] (Fournisseur) VALUES ('" & NewData & "');"
    Et ne plantera pas non plus si tu mets un S à "VALUE"

    Mais l'idéal est de respecter les conventions de nomination :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TBFicheSuiviQualite (NomFournisseur) VALUES ('" & NewData & "');"

    Argy

Discussions similaires

  1. [AC-2000] Pb en sortie vba d'un champ avec masque de saisie
    Par davidcurty dans le forum VBA Access
    Réponses: 6
    Dernier message: 06/10/2009, 14h14
  2. Réponses: 3
    Dernier message: 09/01/2008, 15h54
  3. Réponses: 1
    Dernier message: 04/09/2007, 06h21
  4. clause sql sur champ Date avec masque de saisie
    Par TOMSEC dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/04/2007, 12h20
  5. cliques sur zone de text avec masque de saisie
    Par branqueira dans le forum Access
    Réponses: 2
    Dernier message: 19/12/2006, 20h15

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