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 déroulante dont le contenu change de type et de format


Sujet :

IHM

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Points : 14
    Points
    14
    Par défaut Liste déroulante dont le contenu change de type et de format
    Bonjour à tous,

    Dans l'un de mes formulaires, j'ai une liste déroulante dont le contenu dépend d'une autre liste. Cette liste (dont le contenu change) me pose problème... Quelque fois, elle contient des nombres (en euros), d'autres fois d'autres nombres (des années) et même du texte. Le contenu est mis à jour par VBA en changeant le RowSource.

    Mon problème vient du fait que la liste "mémorise" le type des données qu'elle contient... Si je change le contenu en suivant les exemples ci-dessus, j'ai les années qui s'affichent en Euro... Puis un message d'erreur parce qu'on ne peut pas mettre du texte dans une liste qui contenait des nombres...

    J'ai beau changer le contenu de la liste, changer son format, même changer son type (table/requete, liste de valeurs), rien n'y fait...

    Voilà ce que je fais subir à la liste lorsque je veux que son contenu s'efface (et donc qu'elle oublie ce qu'il y avait avant...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Me.Controls("lstFiltre" & i).RowSource = ""
        Me.Controls("lstFiltre" & i).Value = ""
        Me.Controls("lstFiltre" & i).Format = ""
        Me.Controls("lstFiltre" & i).RowSourceType = "Value List"
        Me.Controls("lstFiltre" & i).Requery
        Me.Controls("lstFiltre" & i).RowSourceType = "Table/Query"
        Me.Controls("lstFiltre" & i).RowSource = ""
        Me.Controls("lstFiltre" & i).Value = ""
        Me.Controls("lstFiltre" & i).Format = ""
        Me.Controls("lstFiltre" & i).Requery
    Sans succès...

    Avez-vous une idée pour que cette liste puisse contenir des données de différents types sans que cela pose de problème ?

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Précisions :
    - tu travailles avec quelle version d'Access?
    - ta liste est-elle indépendante? Si non, quelle est le champ source?
    - tu utilises combien de colonnes dans les différents cas?

    PGZ

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Désolé pour le retard à l'allumage... Le travail m'a un peu éloigné de ce problème (que je n'ai toujours pas résolu...).

    J'utilise Access 2003, ma liste est indépendante et sert à créer des critères de recherche et elle ne contient qu'une seule colonne, celle qui est affichée.

    Quelques mots de plus sur le contexte. Les utilisateurs accèdent à un écran pour faire une extraction de données. Je leur laisse le choix des colonnes à extraire de la base de données (en fait, ils ont le choix parmi tout ce que j'ai mis à leur disposition dans une requête). Ces colonnes contiennent toutes sortes de données ; du texte, des nombres...
    Ils ont aussi la possibilité de faire un critère. Par exemple, ils peuvent choisir dans une liste déroulante, parmi les colonnes qu'ils ont choisi, une donnée en particulier. Par exemple : Année, dans le but de faire un filtre.

    Filtrer par : [Année], extraire seulement : [2007]

    Ce que j'ai mis entre crochet sont des listes déroulantes. [Année] permet de choisir l'un des champs que l'on souhaite extraire. Quand on fait un choix dans cette liste, la seconde liste se voit affecter un contenu. Un "select distinct Année from R_OuIlYALesDonnees". L'utilisateur peut choisir l'une des valeurs présentes pour effectuer un filtre.

    Et tout ceci fonctionne très bien...

    Le problème, c'est quand l'utilisateur hésite... Si sélectionne dans la première liste une donnée qui est en Euro par exemple, et déroule la seconde liste, s'apperçoit de son erreur, revient à la première liste, change de colonne, et resélectionne une autre valeur. La seconde liste a gardé l'information qu'il s'agissait d'euros et ne veut plus en démordre... Du coup, on a des années en euros ou pire, un refus si l'on choisi du texte...

    Comment "réinitialiser" complètement la liste et qu'elle oublie tout (surtout le format., et le type de données...).

    Comme on peut le voir dans mon premier message, je réinistialise le rowsource, le format, fait un requery avant de remettre tout ce que je veux. Mais sans succès...

    Quelqu'un a t'il une idée pour rendre ma liste amnésique ?

  4. #4
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Essaies ceci, c'est rapide et on devrait vite voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Me.LaListe.Value = Null
    Me.LaListe.RowSourceType = ...
    Me.LaListe.RowSource = ...
    Normalement, cela devrait suffire.

    A bientôt,

    PGZ

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Je crois que vider le contenu de la liste avait été ma première idée (mais j'avais peut être mis "" au lieu de Null) ; je ne me souviens pas bien, j'ai essayé tellement de choses...

    Malheureusement, ma liste a toujours autant de mémoire...

    Je vais essayer de mettre Null un peu partout (rowsource etc...)...

    Voir ce que ça donne quand j'ai mis une donnée en euros puis une année (en pas euros...)

    Nom : lst01.JPG
Affichages : 73
Taille : 4,6 Ko

    [EDIT] Je viens de mettre des nulls un peu partout... Le format ne peut pas être Null, le rowsource non plus... A part le value, on ne peut pas mettre null ailleurs.

    Donc mon problème reste entier...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Une piste peut-être...

    J'ai listé les propriétés de la liste déroulante après y avoir sélectionné une donnée en euros. Il y a deux propriétés qui contiennent un chiffre en euros :

    - Text
    - SelText

    Qui permettent d'accéder, quand la liste a le focus, à la valeur présente dans la liste avant qu'elle soit passée dans le Value (éventuellement).

    J'ai essayé de les mettre à "" sans succès car une fois que la liste a le focus (obligatoire pour accéder en lecture ou écriture à ces propriétés), il refuse d'exécuter le code :
    "La macro ou la fonction attribuée à la propriété Avant MAJ ou Valide si pour ce champ empêche Blablabla d'enregistrer les données pour le champ" (blablabla, c'est le nom de mon application).


  7. #7
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Re

    Finalement, as-tu essayé exactement ce que je te proposais? (Cela n'a aucun intérêt de mettre une prop comme RowSource à Null.)
    Si oui et que cela ne marche toujours pas, c'est qu'il doit rester une propriété genre format.
    Peux-tu montrer le code de programmation de la liste dans les différents cas? Je parle bien de la programmation, pas de la partie où tu essaies de tout effacer dans la liste.

    A plus,

    PGZ

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    J'ai essayé d'ajouter Me.Liste.Value=Null pour effacer la liste... J'ai laissé le reste (.rowsource="", .format="", .rowsourcetype= liste de valeur etc...)

    Le code qui alimente la liste quand elle contient quelque chose est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If (Me.Controls("cchSeulement" & i).Value = True Or Me.Controls("cchSauf" & i).Value = True) And Me.Controls("lstChampsTri" & i) <> "" Then
        ' Il faut alimenter la liste avec toutes les valeurs possibles de la colonnes
        DoCmd.Hourglass True
        DoEvents
        Me.Controls("lstFiltre" & i).RowSource = "SELECT DISTINCT " & Me.Controls("lstChampsTri" & i).Value & " FROM R_RequetePersonnalise ORDER BY " & Me.Controls("lstChampsTri" & i).Value
        DoCmd.Hourglass False
    End If
    Si on coche Seulement ou Sauf (pour faire une restriction sur la colonne sélectionnée).
    On alimente la liste Filtre (y en a plusieurs alors, j'ai fait une fonction...) avec un rowsource en SQL.

    Pas le moindre format... Celui-ci est "hérité" du contenu et on ne peut plus s'en débarasser...

    Merci...

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    J'ai résolu mon problème en m'y prenant autrement... Au lieu d'alimenter la liste en mettant du SQL dans le RowSource, j'ai fait une boucle qui alimente la liste qui est de type "liste de valeurs". J'ai mis des " comme ça, je suis sûr que les données sont toujours du texte et que je n'ai plus de problème de format...

    Je ne constate pas vraiment de perte de performances (c'est une telle usine à gaz que ça ne peut pas être pire...). Mais je soupçonne que ça ne soit pas très rapide cette affaire.

    Tant pis, ça marche, c'est ce qui compte...

    Merci à ceux qui se sont penchés sur mon problème.

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

Discussions similaires

  1. [XL-2007] listes déroulantes dont l'une dépend de l'autre
    Par blackstrange dans le forum Excel
    Réponses: 11
    Dernier message: 12/06/2012, 16h56
  2. [XL-2003] Liste déroulante dont la flèche ne s'affiche PLUS!
    Par logiclogic dans le forum Excel
    Réponses: 3
    Dernier message: 01/02/2011, 15h31
  3. [AC-2003] Liste déroulante dont le contenu ne s'affiche pas
    Par FRESO dans le forum IHM
    Réponses: 4
    Dernier message: 07/09/2009, 11h58
  4. Réponses: 2
    Dernier message: 11/07/2007, 12h59
  5. Réponses: 21
    Dernier message: 10/05/2006, 14h25

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