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 :

Afficher les valeurs d'une liste liée si la première liste est vide


Sujet :

IHM

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 18
    Points
    18
    Par défaut Afficher les valeurs d'une liste liée si la première liste est vide
    Bonjour,

    Je suis en train de créer une base access qui sert à suivre l’évolution de projets. Bon, jusque là rien d’exceptionnel.
    Cependant je suis confronté à 3 petits problèmes, je fais part d’un problème ici, et explicite les deux autres ailleurs. (ici : http://www.developpez.net/forums/d62...e/#post3687684)

    Je résume rapidement mes bases, j’en ai 2 principales : une projet et une finance. La base projet décrit le projet et la base finance (attaché en relation multiples au projet car il peut y avoir plusieurs scénarios financiers) donne les informations financières
    Premier problème :
    je crée un formulaire qui sert à renvoyer à d’autres formulaires. Par exemple à partir de ce formulaire on peut créer un nouveau projet, le modifier ou le supprimer. Et à chaque fois une commande renvoie à une des actions.

    Donc il faut choisir le projet. Pour cela je crée une liste déroulante avec les projets. Mais comme il y a beaucoup de projet, afin d’élaguer un peu le choix, je propose aux utilisateurs de spécifier dans quel pays à lieu le projet. Ainsi si le projet a lieu en Espagne, il n’affichera que les projets espagnols.




    Quand l’utilisateur choisit « Espagne » dans paysListe2, ça affiche bien que les projets espagnols. Cependant s’il ne sélectionne rien, projetListe n’affichera rien. Or cet outil est une aide, il se peut que l’utilisateur ne se souvienne plus le pays du projet…
    Voici le code que j’ai mis dans la requête de projetListe :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT PROJET.[ID projet], PROJET.nomProjet
    FROM PROJET
    WHERE ((PROJET.nomPays)=[paysListe2]))
    ORDER BY PROJET.nomProjet;

    J’aimerais que si l’utilisateur n’entre aucune information, il puisse choisir dans projetListe tous les projets de la base, or je ne parviens pas à utiliser de fonction if dans la requête. Si vous pouvez m’aider

  2. #2
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,

    Je te suggère la solution suivante :

    Insère dans ta liste Pays un élément ("Tous" pas exemple, tu trouveras dans la faq comment l'utiliser a l'aide d'une requête UNION).

    Soit l'utilisateur sélectionne tous et alors la liste Projet contient tous les projets de tous les pays, soit il sélectionne un pays et alors les projets du pays s'affiche.


  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    OU sinon par défaut dans ta requête sur projectList tu mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT PROJET.[ID projet], PROJET.nomProjet
    FROM PROJET
    ORDER BY PROJET.nomProjet;
    et sur l'évènement change de ta listPays tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    dim sql as string
    sql = "SELECT PROJET.[ID projet], PROJET.nomProjet "
    sql=sql &"FROM PROJET "
    'test si tu as sélectionné une valeur
    if me.paysListe <> -1 then
         sql = sql &"Where nomPays=" &me.paysListe
    end if
    sql=sql &" ORDER By NOMProjet"
    me.projetListe.rowSource = sql
    comme ça tu construit dynamiquement ta liste des projet en fonction de ta liste Pays

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 18
    Points
    18
    Par défaut
    je suis en train de chercher la fac pour les union, merci.

    Taouret, j'ai compris ta solution, mais ça ne marche pas.

    j'ai mis ce code dans changement de paysListe2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub paysListe2_Change()
    Dim sql As String
    sql = "SELECT PROJET.[ID projet], PROJET.nomProjet "
    sql = sql & "FROM PROJET "
    'test si tu as sélectionné une valeur
    If Me.paysListe2 <> -1 Then
         sql = sql & "Where nomPays=" & Me.paysListe2
    End If
    sql = sql & " ORDER By NOMProjet"
    Me.projetListe2.RowSource = sql
    End Sub
    et fais ce que tu as dit dans la sélection de projet

    mais quand j'essaye de sélectionner un projet dans ma liste de projet, il me demande d'entrer une valeur de paramètre avec comme indication "bhoutan" (si j'ai sélectionné bhoutan dans ma paysListe2). Une idée pour éviter cette étape intermédiaire (car quand je tape bhoutan à la main, ça n'affiche en effet que les projets bhoutan. Mais je peux tout aussi bien taper Bahrein à la place et ça affichera les projets Bahrein) ?

    et j'ai également un autre soucis avec cette solution, c'est que par exemple si je prends "Centre Afrique" ça affichera "erreur de syntaxe (opérateur absent) dans l'expression "nomPays=Centre Afrique" "
    je pense que cela est du à l'espace

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    non c'est juste du au fait qu'il faut que tu lui dise que Me.paysListe2 est une chaîne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Private Sub paysListe2_Change()
    Dim sql As String
    sql = "SELECT PROJET.[ID projet], PROJET.nomProjet "
    sql = sql & "FROM PROJET "
    'test si tu as sélectionné une valeur
    If Me.paysListe2 <> -1 Then
         sql = sql & "Where nomPays='" & Me.paysListe2 &"'"
    End If
    sql = sql & " ORDER By NOMProjet"
    Me.projetListe2.RowSource = sql
    End Sub

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 18
    Points
    18
    Par défaut
    merci beaucoup ! cela marche parfaitement.

    Maintenant je complique un peu : je ne sélectionne pas le projet en fonction d'un seul critère, mais de trois critères (les deuxièmes et 3ème étant une liste déroulante avec des valeurs entrées à la main, voici ce que j'ai essayé de faire :



    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Dim sql As String
    sql = "SELECT PROJET.[ID projet], PROJET.nomProjet "
    sql = sql & "FROM PROJET "
    'test si tu as sélectionné une valeur
     
    If Me.paysListe2 <> -1 Or Me.typeListe2 <> -1 Or Me.demandeListe2 <> -1 Then
        sql = sql & "Where "
    End If
    If Me.paysListe2 <> -1 Then
        sql = sql & "nomPays='" & Me.paysListe2 & "'"
    End If
    If Me.typeListe2 <> -1 And Me.paysListe <> -1 Then
        sql = sql & " And type ='" & Me.typeListe2 & "'"
    End If
    If Me.typeListe2 <> -1 And Me.paysListe = -1 Then
        sql = sql & " type ='" & Me.typeListe2 & "'"
    End If
    If Me.demandeListe2 <> -1 And (Me.paysListe <> -1 Or Me.typeListe2 <> -1) Then
        sql = sql & " And demande='" & Me.demandeListe2 & "'"
    End If
    If Me.demandeListe2 <> -1 And (Me.paysListe = -1 And Me.typeListe2 = -1) Then
        sql = sql & " demande='" & Me.demandeListe2 & "'"
    End If
     
        sql = sql & " ORDER By NOMProjet"
    Me.projetListe2.RowSource = sql

    et je mets le même code dans demandeListe2 et typeListe2 qui sont les deux autres critères. Mais ça n'a pas l'air de marcher, j'ai l'impression qu'il ne prend en considération que paysListe...

    (et de même j'ai une erreur de syntaxe dans mon critère demandeListe2, à cause de l'espace je pense)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    es-tu sûr que les champ type et demande de ta table sont de type Texte?

    Essaie peut-être d'enlever les espace avant demande et type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'au lieu de sql = sql & " demande='" & Me.demandeListe2 & "'"
    sql = sql & "demande='" & Me.demandeListe2 & "'"
    Sinon rajoute un debug.print sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        sql = sql & " ORDER By NOMProjet"
        debug.print sql
        Me.projetListe2.RowSource = sql
    et met un point d'arrêt sur me.projectliste.rowsource

    Puis essaie de changer la valeur de ta zone de liste. Il se mettra sur le point d'arrêt et ut verras dans la fenêtre d'exécution la requête sql. Si tu ne trouve pas d'erreur, poste-là afin que je regarde

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 18
    Points
    18
    Par défaut
    excuse moi, je viens de trouver l'erreur. Ce que je t'ai montré et ce que j'avais laissé dans ma table ne correspond pas, en fait j'avais du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    If Me.paysListe2 <> -1 Or Me.typeListe2 <> -1 Or Me.demandeListe2 <> -1 Then
        sql = sql & "Where "
    [...]
    If Me.typeListe2 <> -1 And Me.paysListe <> -1 Then
        sql = sql & " And type ='" & Me.typeListe2 & "'"
    End If
    If Me.typeListe2 <> -1 And Me.paysListe = -1 Then
        sql = sql & "Where type ='" & Me.typeListe2 & "'"
    un where en trop, a priori maintenant que j'ai mis la bonne version, ça marche.

    Par contre mes listes demandeListe2 et typeListe2 sont bien des textes, d'où le problème avec l'espace

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    Je ne comprend pas ton problème avec l'espace...
    Puisque tu mets des ' ' si tu as un espace dans ton texte, il le prendra bien ...

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 18
    Points
    18
    Par défaut
    en fait, j'ai fait différents tests, et j'ai un autre soucis, sûrement plus important.

    Voici le texte que j'ai mis à chaque fois que je change un des éléments type, demande ou pays :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Dim sql As String
    sql = "SELECT PROJET.[ID projet], PROJET.nomProjet "
    sql = sql & "FROM PROJET "
    'test si tu as sélectionné une valeur
     
    If Me.paysListe2 <> -1 Or Me.typeListe2 <> -1 Or Me.demandeListe2 <> -1 Then
        sql = sql & "Where "
    End If
    If Me.paysListe2 <> -1 Then
        sql = sql & "nomPays='" & Me.paysListe2 & "'"
    End If
     
    If Me.typeListe2 <> -1 And Me.paysListe2 <> -1 Then
        sql = sql & " And type ='" & Me.typeListe2 & "'"
    End If
     
    If Me.typeListe2 <> -1 And Me.paysListe = -1 Then
        sql = sql & " type ='" & Me.typeListe2 & "'"
    End If
     
    If Me.demandeListe2 <> -1 And (Me.paysListe2 <> -1 Or Me.typeListe2 <> -1) Then
        sql = sql & " And demande='" & Me.demandeListe2 & "'"
    End If
     
    If Me.demandeListe2 <> -1 And (Me.paysListe2 = -1 And Me.typeListe2 = -1) Then
        sql = sql & " demande='" & Me.demandeListe2 & "'"
    End If
     
        sql = sql & " ORDER By NOMProjet"
    Me.projetListe2.RowSource = sql
    toujours le même code.

    Quelque soit ma combinaison de sélection, si je sélectionne entre autre le pays, il n'y a pas de souci. Par contre, si je ne le sélectionne pas (et que je prends donc soit demande seul, soit type seul, soit demande et type ensemble) alors quand j'essaye de sélectionner le projet il m'affiche : "erreur de syntaxe dans la clause WHERE"

    en tout cas, merci de m'accorder de ton temps !

    (au fait, pour debug.print sql, je ne sais pas mettre de point d'arrêt...)

  11. #11
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 18
    Points
    18
    Par défaut
    sinon il y aurait aussi cette solution (pour reprendre l'idée de Lou Pitchoun)
    http://access.developpez.com/faq/?pa...l#AjoutTousLst

    mais non seulement je ne comprends pas trop les arguments (et ne sait pas par quoi les remplacer dans le cas présent), mais en plus typeListe2 et demanedeListe2 sont des listes avec des valeurs créées à la main, du coup dans "contenu" je vois la liste des valeurs et j'ai pas la possibilité de faire une requête

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    Pour mettre un point d'arrêt, lorsque tu es en train de taper ton code (quand tu es sous l'éditeur VBA), tu as une colonne grisée juste à gauche de ton code. clique dessus à côté de ligne où tu veux mettre un point d'arrêt. Un petit rond rouge/marron apparaîtra : tu vient de mettre un point d'arrêt

  13. #13
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,

    Il faut que tu bases ta liste pays sur une chaine SQL de ce type :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT IDpays, NomPays, 1 As Position
    FROM TablePays
    UNION
    SELECT TOP 1 "Tous", "Tous", 0
    FROM TablePays
    ORDER BY Position



    Citation Envoyé par eye2909 Voir le message
    sinon il y aurait aussi cette solution (pour reprendre l'idée de Lou Pitchoun)
    http://access.developpez.com/faq/?pa...l#AjoutTousLst

    mais non seulement je ne comprends pas trop les arguments (et ne sait pas par quoi les remplacer dans le cas présent), mais en plus typeListe2 et demanedeListe2 sont des listes avec des valeurs créées à la main, du coup dans "contenu" je vois la liste des valeurs et j'ai pas la possibilité de faire une requête

  14. #14
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 18
    Points
    18
    Par défaut
    voici ce que j'ai mis, puisque ma table s'appelle "Pays" et que ma clef est "NomPays" (puisqu'on peut supposer qu'il n'y aura pas deux pays du même nom)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT NomPays, 1 AS Position FROM Pays UNION SELECT TOP 1 "Tous", "Tous", 0 FROM Pays
    ORDER BY Position;
    cependant, ce code m'affiche ceci :


  15. #15
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    il y a un "tous" de trop ou un champ de moins dans ton 1er SELECT.

    Soit tu enlèves un "tous" soit tu ajoutes la clé primaire dans le 1er SELECT.

  16. #16
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 18
    Points
    18
    Par défaut
    Le "tous" s'affiche bien (et je l'ai d'ailleurs mis en valeur par défaut), mais en remettant dans la requête nomProjet ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT PROJET.[ID projet], PROJET.nomProjet
    FROM PROJET
    WHERE ((PROJET.nomPays)=[paysListe2]))
    ORDER BY PROJET.nomProjet;
    ça ne marche pas : quand je sélectionne "tous", aucun projet ne s'affiche. Ce bug n'a lieu que quand je sélectionne 'tous'... Je comprends pas trop d'où il vient...

    le code de paysListe2 est bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT NomPays, 1 AS Position FROM Pays UNION SELECT TOP 1 "tous",  0 FROM Pays
    ORDER BY Position;

    par ailleurs, sais-tu comment faire une option "tous" comme celle-ci avec une liste où les valeurs ont été entrées à la main ? (en fait, mes deux autres listes). Le mieux serait de la mettre seulement en valeur par défaut, mais c'est du détail ensuite

  17. #17
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 18
    Points
    18
    Par défaut
    voici la solution à laquelle j'ai abouti (merci renaldo)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT NomPays, 1 AS Position FROM Pays UNION SELECT  "*" ,0 FROM Pays
    ORDER BY Position;
    et j'ai rajouté le choix "*" dans les autres listes qui ne faisaient pas référence à une requête.

    Merci, vraiment, à tous d'avoir planché sur le problème !

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

Discussions similaires

  1. [WD17] Combo qui affiche les valeurs dans une liste
    Par ameura1 dans le forum WinDev
    Réponses: 7
    Dernier message: 02/09/2014, 11h11
  2. [XSLT 1.0] afficher les valeurs d'une liste
    Par momodev2008 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 21/01/2011, 19h31
  3. afficher les valeur d'une requete dans une combobox
    Par carlos587261 dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/06/2007, 09h45
  4. Afficher les valeurs d'une structure dans une matrice
    Par yabbiyou dans le forum MATLAB
    Réponses: 1
    Dernier message: 22/02/2007, 13h26
  5. comment afficher les valeurs d'une semaine
    Par duck54 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/05/2006, 23h57

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