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

Requêtes et SQL. Discussion :

Utilisation des choix d'une zdl à choix multiples pour une requête


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 15
    Points
    15
    Par défaut Utilisation des choix d'une zdl à choix multiples pour une requête
    Bonjour,

    Je ne sais pas trop si ma question est vraiment de l'ordre requête ou plutôt IHM, mais je tente ici.

    Voilà mon problème.
    J'ai plusieurs formulaires.

    Formulaire 1:
    Comporte une zone de liste à choix multiples permettant de sélectionner une région. Une fois cela effectuer, en cliquant sur un bouton de commande, on ferme ce formulaire et on ouvre le formulaire2

    Formulaire2:
    Sélection de plusieurs options à partir de zone de liste déroulante. On clique sur un bouton de commande, cela ferme ce formulaire et on arrive à un troisième formulaire.

    Formulaire 3:
    Sélection d'un type de calcul. On cliique sur un bouton de commande et là encore on ferme ce formulaire pour arriver un un dernier formulaire qui serait le formulaire des réponses.

    Dernier Formulaire:
    Calcule en fonction des choix effectués dans chacun des formulaires. Pour le moment, un sous formulaire basé sur une requête est présent dans ce formulaire.

    Maintenant voilà mes problèmes:
    1/ Je rencontre un problème avec ma zdl à choix multiple. Comme je l'ai lu dans de nombreuses discussions, il n'est pas si simple d'utiliser les choix multiples. En effet, lorsque je choisis d'utiliser choix simple, je n'ai pas de problème de calcul.
    Voici ce que j'avais mis dans ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Region.Name, Attribution_Cost_Material.Cost, Cost.Type, Group_Material.Name, Table_Entry_Material.Weight, Attribution_Cost_Material.ID_Region
    FROM Table_Entry_Material, Region INNER JOIN (Group_Material INNER JOIN (Cost INNER JOIN Attribution_Cost_Material ON Cost.ID_Cost = Attribution_Cost_Material.ID_Cost) ON Group_Material.ID_Group_Material = Attribution_Cost_Material.ID_Group_Material) ON Region.ID_Region = Attribution_Cost_Material.ID_Region
    WHERE (((Group_Material.Name)=[Table_Entry_Material].[Material Group]) AND ((Attribution_Cost_Material.ID_Region)=[Forms]![Switchboard_Menu]![lst_region]) AND ((Attribution_Cost_Material.ID_Cost)=1));
    Voyant que cela ne fonctionnait pas et m'affichait du vide, je pensais que je pouvais passer par une autre table et enregistrer les données sélectionnées dans une autre table à laquelle j'aurai fait référence dans ma requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Dim rs As DAO.Recordset
     
    Set rs = CurrentDb.OpenRecordset("Selection_Region", dbOpenTable)
    rs.AddNew
    rs.Fields("ID_Region") = Forms!Switchboard_Menu!lst_region.Column(0)
    rs.Fields("Name") = Forms!Switchboard_Menu!lst_region.Column(1)
    rs.Update
    rs.Close
    Set rs = Nothing
    Mais là encore, il ne m'affiche qu'une de mes sélections

    2/
    Lorsque je ferme mon formulaire, comment puis-je sauvegarder la sélection, si je n'utilise pas le principe de sauvegarder les données dans une autre table?

    Voilà, j'espère que j'ai été assez claire dans ce que je souhaitais faire et j'espère que quelqu'un pourra me répondre, car j'ai vu que ce problème était assez récurrent mais je n'ai pas réussi à appliquer les différentes indications des discussions à mon problème.... Donc si vous avez un conseil ou un petit coup de pouce à me donner, je suis preneuse!!!

    Merci d'avance,

    Nanouche

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Concernant l'alimentation de la table à partir de la sélection multiple, il faut parcourir la collection ItemsSelected de la zone de liste.
    Exemple de l'aide d'Access
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub AllSelectedData()
        Dim frm As Form, ctl As Control
        Dim varItm As Variant, intI As Integer
     
        Set frm = Forms!Switchboard_Menu
        Set ctl = frm!lst_region
        For Each varItm In ctl.ItemsSelected
            For intI = 0 To ctl.ColumnCount - 1
                Debug.Print ctl.Column(intI, varItm)
            Next intI
            Debug.Print
        Next varItm
    End Sub

    Si on veut faire sans la table , il y a la possibilité d'utiliser une variable globale.
    Il faudra une procédure pour sauvegarder la sélection et une fonction qui retourne la variable globale pour pouvoir l'utiliser dans une requête.
    Dans un Module de code :
    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
    Public strSelRegions As String
     
    Sub SauverSelectionRegions()
        Dim ctl As Control
        Dim varItm As Variant
     
        strSelRegions = ""
        Set ctl = Forms!Switchboard_Menu!lst_region
        ' Crée une liste sous la forme 'val1', 'val2', ... , 'valn'
        For Each varItm In ctl.ItemsSelected
             strSelRegions = strSelRegions & "'" & Ctl.Column(0, varItm) & "', "
        Next varItm
        If len(strSelRegions)>1 then strSelRegions = Left(strSelRegions, Len(strSelRegions)-2)
    End Sub
     
    Function SelectionRegions() As String
    SelectionRegions = strSelRegions
    End Function
    Exploitation dans une requête : On utilise la fonction InStr pour déterminer si la région est dans la liste sauvée.
    (Je me suis bêtement inspiré de la clause IN (liste éléments) du SQL)
    Exemple
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Region.* FROM Region
    WHERE (InStr(1, SelectionRegions() , "'" & Region.ID_Region & "'")>0)

    A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    merci pour tes réponses!!
    Je vais tester ça tout de suite! Pour le In j'y avais pensé, mais je n'avais pas l'étape précédente, donc je ne savais pas trop comment l'utiliser!
    J'espère que ça va marcher!

    A +

    Nanouche

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    c'est encore moi...
    Le code que tu m'as donné sur l'utilisation des modules fonctionnent impeccablement merci!!(J'ai juste modifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    f Len(strSelRegions) > 1 Then strSelRegions = Left(strSelRegions, Len(strSelRegions) - 2)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f Len(strSelRegions) > 1 Then strSelRegions = Left(strSelRegions, Len(strSelRegions) - 1)
    Car sinon il ne prenait jamais en compte la dernière sélection.)

    Cependant, il me reste un petit souci...
    Tout cela fonctionne très bien lorsque je change les choix dans mon formulaire qu'ensuite je fais Executer Sub/UserForm et qu'ensuite j'execute ma requête.
    Comment puis-je éxécuter mon module depuis mon formulaire. J'ai essayé en utilisant une macro et définissant la macro avec ExectuerCode et comme fonction SelectionRegions(), mais ça ne fonctionne pas. Faut-il que je place cela différemment?
    Je pense que ça doit être assez idiot, vu qu'en cherchant sur les FAQ et les formulaires, je n'ai pas trouvé de questions similaires. J'ai cherché dans l'aide d' Access aussi mais je n'ai pas abouti à un bon résultat. Peut-être ai-je fait une petite erreur??

    Si vous avez une idée de comment faire, je serai bien évidemment intéressée!! Enfin je ne continue mes recherches quand même.

    A bientôt j'espère.

    Nanouche

  5. #5
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Comment puis-je éxécuter mon module depuis mon formulaire
    J'ai crû comprendre que tu avais un bouton.
    Dans le code de l'événement "Sur Clic" du bouton tu appelle la sub SauverSelectionRegions
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub LeNomDuBouton_Click()
    SauverSelectionRegions
    ' suite du code qui ouvre le formulaire suivant
    End Sub
    Une macro ne peut pas exécuter de Sub. Donc si tu veux rester avec une macro pour gérer l'événement du bouton, tu transformes la Sub en Function.
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function SauverSelectionRegions()
        Dim ctl As Control
        Dim varItm As Variant
     
        strSelRegions = ""
        Set ctl = Forms!Switchboard_Menu!lst_region
        ' Crée une liste sous la forme 'val1', 'val2', ... , 'valn'
        For Each varItm In ctl.ItemsSelected
             strSelRegions = strSelRegions & "'" & Ctl.Column(0, varItm) & "', "
        Next varItm
        If len(strSelRegions)>1 then strSelRegions = Left(strSelRegions, Len(strSelRegions)-2)
    End Function

    Une dernière chose pour la requête.
    Si il n'y a aucune sélection et que dans ce cas on veut toutes les régions:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Region.* FROM Region
    WHERE (InStr(1, SelectionRegions() , "'" & Region.ID_Region & "'")>0 OR SelectionRegions()="")
    A+

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Merci LepZeppII!! ça marche parfaitement!!
    En fait je ne voulais pas nécessairement faire cela avec une macro, c'était juste que je ne savais pas que pour appeler la fonction il suffisait de l'écrire sans les parenthèses! J'avais essayé de la marquer mais en laissant les parenthèses et donc là j'avais un message d'erreur.
    Enfin c'est génial ça fonctionne super bien!
    Merci beaucoup!

    A+ et peut-être à une prochaine fois pas si lointaine que ça....

    Nanouche

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/07/2014, 20h10
  2. [Débutant] [C#] Récuperer dans une liste les valeurs d'une listbox à choix multiples
    Par Devlin111 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 21/03/2012, 09h35
  3. Réponses: 3
    Dernier message: 22/08/2010, 17h40
  4. Réponses: 4
    Dernier message: 02/05/2007, 13h40
  5. Choix d'un langage de programmation pour une application orientée web
    Par Mick DG dans le forum Général Conception Web
    Réponses: 10
    Dernier message: 12/07/2006, 13h45

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