Forcer une saisie en majuscules dans un champ Access

Ces articles pourraient également vous intéresser...

26 réponses

  1. atexcel dit :

    merci pour cette information, mais pourquoi ne pas utiliser L au lieu de C…, pour les lettres, c’est plutôt L non?

    • Hervé Inisan dit :

      L ou C sont effectivement applicables, c’est au choix. La différence étant que L désigne un caractère A-Z obligatoire, C un caractère A-Z-espace facultatif.
      LLLL suppose donc une saisie systématique de 4 caractères, alors qu’avec CCCC on peut en saisir 0, 1, 2, 3 ou 4 (c’est donc plus souple).

      Ouala !

  2. zoconline dit :

    Bonjour,
    Toujours au chapitre conversion des données d’entrée, j’utilise l’evènement keypress de la rubrique pour substituer par exemple le chiffre 7 au caractère “è” (par ex. code postal ou N° de Téléphone) :
    If KeyAscii = 232 Then KeyAscii = 55 pour cet exemple
    Les utilisateurs de portable fâchés avec leur clavier sans pavé numérique comprendront sûrement l’intérêt de bout code
    toutefois cela ne fonctionne pas si j’essaie de le transposer dans une fonction.
    Cela est-il du à l’évènement KeyPress?
    Quelqu’un a-t-il une idée ou une piste?

    Un grand merci, Monsieur Inisan, pour tous ces tutos et ce travail colossal. Simple, clair, limpide (enfin pas toujours, mais cela ne vient pas de vous) MERCI

    • Hervé Inisan dit :

      Je n’ai pas le code sous la main, mais j’aurais 2 remarques :

      • Le fait de passer par une fonction (ou une procédure) externe est une bonne idée, ça permet d’externaliser le code et de le réutiliser ailleurs.
      • La procédure KeyPress doit quand même être définie pour répondre à l’événement. L’idée est que ce bout de code va appeler la fonction.

      S’il y a possibilité de poster la fonction ici, je pourrai peut-être en dire plus.
      Ouala !

      • zoccolo dit :

        Bonsoir,
        La fonction ressemblerai à cela :
        Function KeyPad()
        If KeyAscii = 224 Then KeyAscii = 48
        If KeyAscii = 38 Then KeyAscii = 49
        If KeyAscii = 233 Then KeyAscii = 50
        If KeyAscii = 34 Then KeyAscii = 51
        If KeyAscii = 39 Then KeyAscii = 52
        If KeyAscii = 40 Then KeyAscii = 53
        If KeyAscii = 45 Then KeyAscii = 54
        If KeyAscii = 232 Then KeyAscii = 55
        If KeyAscii = 95 Then KeyAscii = 56
        If KeyAscii = 231 Then KeyAscii = 57

        End Function

        N’ayant toujours pas trouvé comment la faire fonctionner, je mets ce code sur l’évènement Keypress de toutes mes rubriques numériques mais cela alourdi inutilement mon programme.
        Votre remarque sur la procédure Keypress reste mystérieuse pour moi. Je crains de ne pas être encore arrivé à ce niveau…
        Si vous avez une suggestion, ce sera avec plaisir.

        • Hervé Inisan dit :

          Je vois mieux. En fait, la fonction KeyPad() n’a pas ici de paramètre KeyAscii, ce qui fait que les If ne peuvent pas fonctionner. J’écrirais d’abord ceci dans un module standard (pour que ce soit indépendant des formulaires) :

          J’ai remplacé les If par un Select, de manière à traiter le cas où le caractère ne doit pas être modifié (le Case Else).
          Ensuite, pour chaque rubrique numérique, il faut quand même définir l’événement KeyPress. Mais cette fois, il se réduit à ceci :

          Ça devrait pouvoir coller… :)

          • zoccolo dit :

            Pfffft…. je ne dirais qu’un mot : Respect!
            Non seulement ça marche mais en plus j’ai découvert l’instruction Select case. Merci infiniment :):):):)
            Je profite de ce post pour vous demander où je peux acheter votre livre Access 2007 référence qui est épuisé partout? Allez-vous le rééditer ou le mettre à jour?

          • Hervé Inisan dit :

            Content que ça puisse dépanner. :)
            Le Référence 2007 est effectivement épuisé. Pour l’instant, je n’ai malheureusement pas le temps d’écrire une mise à jour pour Access 2013, bien que ça m’intéresserait. On va attendre la prochaine version d’Access… ;)

  3. Vini76 dit :

    Autre possibilité, toujours sur un événement du champ concerné :

    La mise à jour s’exécute au fur et à mesure de la saisie et en dur dans la table. Les accents en plus …

  4. Hervé Inisan dit :

    Bobe48000 > Si le nombre de chiffres est variable, le masque de saisie n’est sans doute pas adapté. La structure est vraiment variable ?

  5. Bobe48000 dit :

    bon jour Hervé Inisan merci pour ces tuto
    mon question est comment utilise un masque de saisie pour force l’écriture un certain nombre de chiffre suivie par ” / ” puis un nombre de chiffre par ex 1255/25 ou 111/127 . et surtout pas des lettre
    merci pour votre aide d’avance

  6. Hervé Inisan dit :

    goran > Dans une table, les champs doivent être “atomiques” (une information simple et unitaire dans chaque champ). Ça veut dire que les nom et prénom ne devraient pas être stockés dans le même champ, il te faut 2 champs différents.

    Ça permet plus tard de trier ou filtrer sur n’importe quel champ indépendamment, et de gérer différents problèmes d’affichage. Par exemple, sur un état, l’affichage que tu souhaites est une formule du type :

    Inversement, si les 2 infos sont dans le même champ, il n’y a aucune méthode fiable pour résoudre ta question.

  7. goran dit :

    Bonsoir,

    Je cherche depuis un certain temps comme faire pour que dans mon champ Nom Prénom qu’il m’écrive le NOM en majuscule et Prénom avec la première lettre en majuscule et le reste en minuscule et entre nom et prénom qu’il insère une virgule?

    exemple: DUPONT,Jean

    Par avance merci

  8. Hervé Inisan dit :

    mathieu2105 > Une piste, à froid comme ça, consisterait à utiliser la fonction Replace() de VBA, dans la 2ème méthode.

  9. mathieu2105 dit :

    Bonjour,
    Merci pour la méthode, je voudrais en plus forcer la saisie sans accents? comment faire merci d’avance pour une éventuelle solution

    Mathieu

  10. Hervé Inisan dit :

    otam > Effectivement, la solution est bonne s’il faut forcer les majuscules à la volée.

  11. otam dit :

    J’ai déposé un commentaire pour savoir comment enregistrer en majuscule une donnée absente d’une liste déroulante. En fait sur votre site il suffit de remplacer rst!Intitulé = NewData par rst!Intitulé = UCase(NewData) dans votre article AJOUTER UN ELEMENT DANS UNE LISTE DEROULANTE pour que la saisie soit comfortable

  12. otam dit :

    Bonjour,
    La difficulté désormais consiste à forcer les majuscules lorsqu’une valeur n’est pas dans une liste déroulante issue d’une table et que l’on veut ajouter la nouvelle valeur à la dite table. Il y a semble-t-il conflit dans l’ordre des évènement.
    La solution que j’ai trouvée a été de mettre >CCCCCC dans le masque de saisie du champ du formulaire pour enregistrer la valeur en majuscule dans la table.
    Y avait-il plus simple?

  13. Hervé Inisan dit :

    citoyen_pip > Effectivement, la méthode VBA est toujours la meilleure pour ce type de traitement. :-)

    Maintenant, le fait que les accents soient conservés n’est pas un problème, c’est même plutôt une qualité (cf. “Majuscules accentuées” sur Wikipedia, et en typographie d’une manière générale).

  14. citoyen_pip dit :

    attention, l’utilisation de “>” en format d’un champ texte de votre formulaire force uniquement l’AFFICHAGE du texte dans votre formulaire, dans votre table le texte sera toujours en minuscule !
    si vous voulez enregistrer votre texte en majuscule “en dur” dans votre table, il faut alors utiliser la 2nde méthode (en utilisant avant MAJ) qui marche très bien… (à ceci près que vos majuscules conserve les accents)

  15. Hervé Inisan dit :

    possible924 > Dans le cas d’une conversion en majuscule, le Avant MAJ du champ n’est effectivement pas adapté (le Avant MAJ du formulaire, le Après MAJ ou Perte Focus sont ok). Ce n’est pas facile à expliquer, mais il y a en quelque sorte “conflit d’événements”, sur le Avant MAJ du champ.

    La raison : je tape une info dans le champ (donc je déclenche une mise à jour). Mais avant cette mise à jour, une autre mise à jour est déclenchée par VBA. On a un problème similaire aux références circulaires d’Excel.

    Dans les autres événements cités, la mise à jour faite par Access (la 1ère) est terminée lorsque les événements sont appelés. Il n’y a donc plus de conflit, et l’enchaînement est possible.

  16. possible924 dit :

    Bonjour,
    Si je met ce code
    Me.Usager_Nom = UCase(Trim(Me.Usager_Nom))
    sur AvantMAJ, ça plante
    et je reçois un message d’erreur “… empêche d’enregistrer les données dans le champ”
    sur AprèsMAJ, ça marche
    sur PerteFocus, ça marche
    pourquoi ça ne marche pas sur AvantMAJ ?

  17. Hervé Inisan dit :

    abdelmajid > En fait, l’événement Avant mise à jour du champ peut faire l’affaire (il se produit avant LostFocus, et il pourrait être annulé si nécessaire).

  18. abdelmajid dit :

    c’est mieux de mettre le code suivant:
    Me.Nom_Acteur = UCase(Me.Nom_Acteur)
    dans l’événement LostFocus()

  19. Hervé Inisan dit :

    Cri > Laquelle des 2 méthodes as-tu employée ? Est-ce que tu as un message d’erreur ? Est-ce que le nom de ton champ est correct ?

  20. cri dit :

    forcer la majuscule dans une zone texte sous access, soit j’ai rien compris et donc je n’y suis pas arrivée soit elle marche pas
    dommage
    cri

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">