Pbm Access liste déroulante avec nombres

Résolu
Bonjour,

J'ai une liste déroulante créer sur Access 2003 qui est alimenté par une requête en base pointant sur des nombres de type 0077 par exemple. L'affichage dans le champ de la liste déroulante se fait comme suit : 77 au lieu de 0077. J'aimerai qu'il apparaisse correctement à l'écran !

J'ai déja essayé de lui rentrer dans la propriété format "0000" mais ça ne fonctionne pas. En base en revanche, j'ai bien mon champ qui est formaté 0000 et donc il m'affiche la valeur correcte mais pas dans la liste déroulante...
J'ai le même souci pour des numéros de mois dans une autre liste...

Avez vous une solution à me proposer?(même si c'est en VBA je prends, j'ai déja essayé des trucs pour ça mais sans succès...)

Merci de votre aide !!

--
La vitesse de la lumière étant plus rapide que celle du son, cela explique pourquoi certains ont l'air si brillant avant d'avoir l'air con !
Configuration: Windows XP
Firefox 2.0.0.18

18 réponses

Résumé de la discussion

Une liste déroulante dans Access 2003 alimentée par une requête affiche des valeurs numériques comme 77 alors que le champ est formaté 0000, ce qui masque les zéros initiaux à l'écran. La même problématique concerne les numéros de mois et des solutions évoquées incluent des masques de saisie (InputMask) ou des formats personnalisés afin de préserver l'affichage 07, 08 ou 09 selon le contexte. Plusieurs réponses suggèrent d'utiliser un masque d'entrée ou de jouer sur l'alignement et la propriété de format pour que la liste et le champ affichent systématiquement les zéros. D'autres échanges portent aussi sur l'ordre d'affichage des mois dans la liste, afin de les voir classés du mois de janvier à décembre plutôt que par ordre alphabétique.

Bobot (l’IA à votre service)
  1. salut little_titi

    Je viens d'essayer dans access et moi ça marche avec le format 0000
    Essaye de le taper sans les guillemets.

    C'est peut-être aussi simple que cela
    0
    1. merci pour ta réponse ! en fait justement j'ai mis aussi 0000 mais ça m'affiche bien dans le champ de la zone de liste 0077 mais quand je clic sur la fléche pour dérouler la liste et choisir la valeur que je veux, eh bien les valeurs de la liste apparaissent sous forme 77 !!!

      Peut-on définir une propriété d'alignement pour le contenu d'une zone de liste déroulante?
      dans le genre align = center car par défaut j'ai l'impression qu'il me mange les zéros car il doit aligner à gauche je pense...
      Il me semble que si j'arrive à définir le style d'affichage de ma requête pour les éléments de la liste, ça devrait marcher!! mais comment faire....?
      0
      1. Salut, je ne comprends pas ça marche très bien quand j'essaie.
        Sinon pour régler l'alignement comme tu veux dans la modifiable tu vas dans ses propriétés, tu prends l'onglet format et tu vas à "aligner texte"
        Mais apparemment ça n'est pas à cause de ça
        0
        1. Non non quand je fais ça, ça aligne juste la valeur choisie dans le champ modifiable mais pas celles dans la liste déroulante !!!
          (petit test : rentre 0077 et aligne à gauche ta propriété. Tu auras dans ton champ la valeur 77 au lieu de 0077. et dans ta liste tu auras 77. Maintenant si tu fais aligner à droite sur ta propriété, dans ton champ tu auras 0077 et dans ta liste 77. Et la est le souci....!:( )

          Autre question qui n'a rien à voir : je veux créer un format personnalisé dans une textbox et ça ressemblerait à la chose suivante :

          l'utilisateur a le choix de rentrer les données de 2 façons différentes :
          soit "12." et 5 chiffres qui suivent
          exemple : 12.65955

          soit le numéro du mois en cours (si on est en septembre ça fera 09.) et 7 chiffres qui suivent
          exemple : 09.1036484

          Comment faire pour un controle sur ce que l'utilisateur a rentré pour savoir si il rentre bien les données dans ces 2 formats ?? j'ai essayé un controle sur sortie de ma textbox et je voulais utiliser la fonction "format" mais je n'arrive pas l'écrire...
          Saurais tu comment faire ?

          merci de ton aide !! ;)
          0
          1. C'est pour quoi faire ta textBox ?
            est-ce grave si il tape 7 chiffres au lieu de 5 et qu'il met deux zéros avants?
            Si ça n'a pas d'importance tu peux créer un masque de saisie.
            Sinon, je vais tester une autre solution et je te dis si je trouve
            Réponds pour savoir
            @+
            0
            1. Justement en fait ma textbox, elle sert à rentrer des numéros d'achat pour des commandes. Et il existe 3 types de numéro d'achat possibles :

              -Soit l'utilisateur ne rentre que du texte et des chiffres...(ce qu'il veut)
              -Soit c'est une commande provenant d'un fax auquel cas on met par défaut le mois de la commande en cours suivi d'un point et 5 chiffres pour identifier la commande
              -Soit c'est une commande qui ne provient pas du fax auquel cas on met par défaut le numéro à 12. et on remplit 7 chiffres derrière

              Donc oui c'est important, je ne peux pas faire de masque de saisie de ce fait à moins que l'on puisse combiner plusieurs masque de saisie et dire par exemple à un champ textbox :
              Si c'est une commande fax alors
              tu m'afiiche le masque 1
              Si c'est une commande non fax alors
              tu m'affiche le masque 2
              Sinon
              tu ne m'affiche pas de masque/rien
              End

              A ton avis c'est possible? c'est pour ça que je voulais passer ça par un format()
              0
              1. Modérateur
                Salut,

                As-tu essayé de mettre ton champ de table en type texte ?

                Comme ça, plus de problème, on peut saisir ce qu'on veut.

                Mais le cas échéant, tu peux modifier en live le format de saisie d'une zone suite à un choix.

                mazone.inputmask = "00\.0000000"
                0
                1. Bonjour à tous les 2
                  Ouais, ça peut-être ça la solution. Tu mets trois boutons à côté pour choisir quel type de commande tu entres. Un bouton pour chaque type bien sur.(Tu peux aussi utiliser une liste déroulante qui contient les 3 possibilités). Et tu mets le code correspondant à chaque choix qui permet de modifier le masque de saisie.
                  Tu n'as pas tellement le choix parce que tu ne peux pas mettre plusieurs masques à la fois
                  @+
                  0
                  1. Re !! Merci les gars ! J'ai fais ça avec un Inputmask car je voyais que ça comme solution...et ça marche! :)

                    Le souci maintenant c'est que pour les fax où le mois doit s'afficher, il m'affiche par exemple 3.25599 (mois de mars) au lieu de 03.25599 dans la textbox...

                    On paramétre ça où pour qu'il prenne la valeur complète avec le 0 devant?
                    Merci!!
                    0
                    1. Modérateur
                      Mettre la zone en texte...
                      0
                  2. Mais elle y est en texte, D'ailleurs quand je rentre du texte (mes trois cas c'est 1 commande DA -->12.5998989, 2 commande fax --> 03.14644, 3 autre -->ce que l'utilisateur a envie de mettre) dans le cas 3 autre ça marche bien puisqu'il est sur texte mais dans le cas 2 dans mon champ la valeur récupérée à partir de mon champ mois (qui est dans l'exemple 03) eh bien n'affiche pas le zéro dans le mask !! exemple également pour le mois de mars on a : _3.25896 et pour le mois d'octobre on : 1_.25896 il me mange le zéro!!!!

                    Voila mon code :

                    Private Sub OptionCommande_AfterUpdate()
                    Dim NumeroMois As String

                    'Masques de saisie pour les Numéro d'Achat (N°AC) selon la provenance de la commande fax ou DA...
                    If OptionCommande.Value = 1 Then
                    NumAchat.Value = ""
                    NumAchat.InputMask = "12\.0000000"

                    ElseIf OptionCommande.Value = 2 Then
                    NumAchat.Value = ""
                    NumeroMois = MoisCommande.Value
                    NumAchat.InputMask = NumeroMois & "\.00000"

                    ElseIf OptionCommande.Value = 3 Then
                    NumAchat.InputMask = ""
                    End If
                    End Sub
                    0
                    1. Modérateur
                      Pourquoi tu ne mets pas "00\.00000" ?
                      0
                  3. Parce que je suis obligé de récupérer le numéro du mois en cours dans le cas d'un fax !!!Donc si je met ce mask 00\.00000 pour le cas 2 eh bien l'utilisateur va devoir rentrer le mois l et donc "perte de temps..." et risque d'erreur si ça ne correspond pas au mois en cours. Je voudrais que ça soit prérempli et au moins je n'ai pas besoin de rajouter un control supplémentaire pour vérifier que si c'est un fax il a bien rentré le mois en cours en premier...
                    0
                    1. Modérateur
                      Ben si tu veux le préremplir, il faut le mettre dans le masque :

                      Dim mois as string
                      mois = "\0\3"
                      toto.inputmask = mois & "\.00000"

                      Mais ça t'oblige à trafiquer le mois pour intercaler le backslash.

                      C'est quand même assez facilement réalisable, ceci dit.
                      0
                  4. Euh.......à tu regardé mon code?

                    NumeroMois = MoisCommande.Value
                    NumAchat.InputMask = NumeroMois & "\.00000"

                    MoisCommande.Value (c'est la valeur du champ mois en cours) que je met dans une variable et que j'intégre à mon mask ensuite.....je ne veux pas une valeur de mois fixe!!! ça doit être dynamique !
                    0
                    1. Modérateur
                      Euh.......à tu regardé mon code?
                      A l'instant :-P

                      Donc, il faut reprendre la fin de mon message, qui ne dit pas trop de c......, pour une fois ;-)
                      0
                  5. Oki ;)
                    Donc en gros je devrais avoir ça :

                    MoisCommande.InputMask = "00"

                    NumeroMois = MoisCommande.Value
                    NumAchat.InputMask = NumeroMois & "\.00000"

                    parce que si j'écris ça NumeroMois = "\0\3" il va toujours me mettre par défaut un chiffre et 3 derrière. Et je suis obligé de mettre \ devant les valeurs? car il va les comptabilisé en tant que caractère et ça ne sera pas dynamique...
                    0
                    1. Modérateur
                      Il faut mettre un \ car sinon, il va prendre le 0 pour une zone de saisie (chose que l'on ne veut pas).
                      NumAchat.InputMask = "!" & "\" & Left(NumeroMois, 1) & "\" & Right(NumeroMois, 1) & "\." & "00000;;_"
                      Le ! c'est pour faire la saisie de gauche à droite, c'est plus simple...
                      0
                  6. Re !! ça yé ça marche enfin !!!!!
                    Merci de ton aide précieuse Blux ! :p

                    Voici mon code final :

                    If OptionCommande.Value = 1 Then
                    NumAchat.Value = ""
                    NumAchat.InputMask = "12\.0000000"

                    ElseIf OptionCommande.Value = 2 Then
                    NumAchat.Value = ""
                    NumeroMois = MoisCommande.Value

                    If NumeroMois < 10 Then
                    NumAchat.InputMask = "!" & "\" & "0" & "\" & Right(NumeroMois, 1) & "\." & "00000;;_"
                    Else
                    NumAchat.InputMask = "!" & "\" & Left(NumeroMois, 1) & "\" & Right(NumeroMois, 1) & "\." & "00000;;_"
                    End If

                    ElseIf OptionCommande.Value = 3 Then
                    NumAchat.InputMask = ""
                    End If

                    End If

                    En revanche pour le problème initial du post (celui de l'affichage dans la liste déroulante) ça ne marche toujours pas...je tente des truc mais bon...
                    0
                    1. Modérateur
                      Tu peux rajouter le ! dans ton choix 1, aussi, si tu veux...

                      Pour le format de la liste déroulante, je ne saisis (!) pas : tes données viennent d'une requête et donc d'un champ de table. Est-il de type texte ou numérique ?
                      0
                  7. oui les données proviennent d'une requête sur un champ d'une table qui est en texte. donc voila je sais pas trop...
                    0
                    1. Modérateur
                      Elles ont saisies avec les 0 dans les tables où ces mêmes 0 sont ajoutés à l'affichage par un format ?
                      0
                  8. Modérateur
                    par une requête en base pointant sur des nombres de type 0077
                    Des nombres ?

                    Parce que moi, je viens de faire le test, une chaine 0077 dans un champ type texte est affichée 0077 dans la liste déroulante.
                    0
                    1. Bonsoir Blux , j'ai crée un champ texte "mois" en liste déroulante. je constate que lorsque je déroule la liste access les a classés par ordre alphabétique, j'aimerais les classer ou les voir se dérouler dans l'ordre logique des mois de l'année (janvier à Février)

                      Merci du topo.
                      0
                    2. Modérateur
                      @unseensoit tu changes pour mettre un format date, avec que le mois (format 'mmmm'), soit tu crées une colonne bidon qui contient ton criètère de tri numérique...
                      0
                    3. @bluxoui fais ça!
                      0
                  9. Ben pourtant mon champ en table est de type texte je ne comprend pas...moi ça s'affiche sans les zéros dans liste déroulante et avec les zéro sur le champ à remplir
                    ...???
                    0
                    1. bon ça yé ça marche !!

                      J'ai remplacer ma table (je l'ai refaite) et j'ai refait une requête sur cette table et la ça fonctionne ! Un petit bug d'access surement...:)

                      Bon en tout cas merci pour tout !!
                      @ bientot !
                      0