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 :

Requête via listbox multi-critères --> Possible sans VBA ?


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 140
    Par défaut Requête via listbox multi-critères --> Possible sans VBA ?
    Bonjour,

    Je découvre Access 2010 après avoir bidouillé sur 97 et 2003 et je découvre que les Zones de liste peuvent être multi-sélection. Et là je me dis que çà serait bien de pouvoir faire des requêtes de sélection en fonction des sélections multiples faites dans une Zone de liste. Cependant j'ai un doute sur la possibilité sans passer par VBA. Est ce possible svp ?

    Exemple :
    J'ai une table contenant la liste des départements, une autre la liste des communes.
    J'ai un formulaire ayant comme source la table des communes (à coté des communes il y a le champs "id département") et contentant une zone de liste des départements.
    A ce jour, via une requette, si je sélectionne par exemple le département 62, cela m'affiche la liste de toutes les communes du Pas de Calais.
    Mais si je sélectionne à la fois le 62 et le 59, cela ne m'affiche pas toutes les communes de ces deux départements.

    Si ce n'est possible directement, ce qui limite l'intérêt des Zone de sélection multiple, y a t'il une astuce sans VBA pour le faire svp ?

    J'ai essayé avec la fonction "In" dans la requête mais çà ne fonctionne pas.

    Merci d'avance pour vos éclaircissements.
    Bon we.

  2. #2
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 962
    Par défaut
    Bonsoir,
    Il n'est pas possible d'utiliser la collection ItemSelected sans passer par VBA. Mais le code est assez simple et peut s'exécuter sur clic d'un bouton, par exemple :
    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
    Dim ctl As Control
    Dim varItm As Variant
    Dim stSQL As String
     
    Set ctl = Me.Liste0 ' Liste des départements
     
     If ctl.ItemsSelected.Count > 0 Then
        stSQL = "SELECT * FROM COMMUNES WHERE [id département] In ("
    End If
    ' Pour lire la sélection multiple
       For Each varItm In ctl.ItemsSelected
            Me.Liste2.AddItem (ctl.ItemData(varItm))
            stSQL = stSQL & "'" & ctl.ItemData(varItm) & "',"
     
       Next varItm
     
    ' Pour enlever la dernière virgule de la boucle et terminer l'instruction
    stSQL = Left(stSQL, Len(stSQL) - 1) & ");"
     
    ' Pour exécuter le code
    DoCmd.RunSQL stSQL
    ' ou pour charger le source d'un formulaire
    Me.RecordSource = stSQL

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 140
    Par défaut
    Merci tee_grandbois Par contre peux tu me dire exactement où je mets quoi dans ma bdd stp ? Je dois suivre une formation en VBA sous access mais je ne sais encore quand (peut-être plusieurs mois) et j'ai besoin d'avancer sur ce point là de recherche.

    J'aimerais appliquer cette recherche multi-sélection à plusieurs formulaire donc je vais donner un exemple :

    J'ai un formulaire "GeocommuneForm" lié à la requête "GeocommuneReq".
    Le formulaire a deux listes à multisélection "RegionFiltre" et "DepartementFiltre" qui ont chacune deux colonnes, la première est la clé de la table "RegionTabl" et la seconde la clé de la table "DepartementTabl".

    Le but est lorsque je sélectionne plusieurs régions et/ou plusieurs département, le formulaire m'affiche les communes correspondantes à toutes ces sélections.

    Je pense qu'avec cette exemple, je pourrais l'appliquer ensuite à l'ensemble de mes formulaire, ben je l'espère

  4. #4
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 962
    Par défaut
    Bonsoir,
    je te propose ce code qui te permet d'afficher les régions ou les départements sélectionnés.
    Tu as 2 listes à choix multiple : RegionFiltre et DepartementFiltre et un bouton btSelection, tu dois mettre le code dans l'évènement click de ton formulaire GeoCommuneForm :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Private Sub btSelection_Click()
     
    Dim ctlReg As Control
    Dim ctlDep As Control
    Dim varItm As Variant
    Dim stSQL As String
     
    On Error GoTo hd_err
    ' Déclaration des objets liste à sélection multiple
    Set ctlReg = Me.RegionFiltre
    Set ctlDep = Me.DepartementFiltre
     
    ' Si au moins une sélection effectuée
    If ctlReg.ItemsSelected.Count + ctlDep.ItemsSelected.Count > 0 Then
        stSQL = "SELECT * FROM GeoCommuneReq WHERE "
    End If
     
    ' Lecture de la sélection Régions
    If ctlReg.ItemsSelected.Count > 0 Then
        stSQL = stSQL & "([N°Region] In ("
     
        For Each varItm In ctlReg.ItemsSelected
            stSQL = stSQL & ctlReg.ItemData(varItm) & ","
        Next varItm
     
    ' Pour enlever la dernière virgule
        stSQL = Left(stSQL, Len(stSQL) - 1) & "))"
    End If
     
    ' Départements
     
    If ctlDep.ItemsSelected.Count > 0 Then
    ' Si au moins une région est sélectionnée
        If ctlReg.ItemsSelected.Count > 0 Then
            stSQL = stSQL & " OR "
        End If
        stSQL = stSQL & "([N°Dept] In ("
     
    ' Lecture de la sélection des département
            For Each varItm In ctlDep.ItemsSelected
                stSQL = stSQL & "'" & ctlDep.ItemData(varItm) & "',"
            Next varItm
     
    ' Pour enlever la dernière virgule
            stSQL = Left(stSQL, Len(stSQL) - 1) & "))"
    End If
     
    ' Fin d'instruction SQL et chargement des données sélectionnées
    If ctlReg.ItemsSelected.Count + ctlDep.ItemsSelected.Count > 0 Then
        stSQL = stSQL & ";"
        Me.RecordSource = stSQL
    End If
     
    Exit Sub
    hd_err:
    MsgBox "Erreur :" & Err.Number & " - " & Err.Description
    Resume Next
     
    End Sub
    Dans cet exemple, l'identifiant de Région est numérique et celui de Département est de type Texte (les valeurs sont donc entre ' '). On pourrait aussi proposer de choisir 'OR' ou 'AND' à l'aide d'une case à cocher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        If ctlReg.ItemsSelected.Count > 0 Then
            stSQL = stSQL & iif(Me.boAnd=True," AND "," OR ")
        End If
    Mais dans ce cas, il faut noter que si on choisit "AND" cela risque de ne pas fonctionner correctement car un département ne peut appartenir qu'à une seule région et inversement, une région ne contient que certains départements.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 140
    Par défaut
    Bonjour tee_grandbois,

    Désolé pour le retard, j'ai été occupé totalement à autre chose mais me revoilà sur ce projet de base Access. Je tenais tout d'abord te remercier pour ton aide.

    Cependant, j'ai un souci avec le code. J'ai en surbrillance ".RegionFiltre" et le message "Erreur de compilation : Membre de méthode ou de données introuvable".

    Je n'ai peut-être pas expliqué correctement comment était ma base de test et, du coup, le code ne correspond peut-être pas Ou bien j'ai oublié quelque chose. C'est pourquoi je joins à ce message une partie de ma base de test et la copie écran du message d'erreur.

    Sur le coup, j'avais l'impression qu'il s'agissait d'un problème du nom de ma zone de liste mais apparemment ce n'est pas çà. Je n'ai pas trouvé d'où cela venait.

    Si tu as le temps de regarder, j'en serais content

    J'aime bien regarder un bout de base Access, Excel, etc qui marche pour voir comment çà fonctionne et essayer de l'adapter à mes besoins. Mais encore faut il que la base fonctionne . Donc si tu as le temps de regarder, ensuite je pourrais décortiquer tout çà pour l'adapter à l'ensemble de mes formulaires.

    Bien à toi.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2009
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 276
    Par défaut
    Bonjour Jérôme,

    Citation Envoyé par Jerome_Hej Voir le message

    Cependant, j'ai un souci avec le code. J'ai en surbrillance ".RegionFiltre" et le message "Erreur de compilation : Membre de méthode ou de données introuvable".


    Sur le coup, j'avais l'impression qu'il s'agissait d'un problème du nom de ma zone de liste mais apparemment ce n'est pas çà. Je n'ai pas trouvé d'où cela venait.
    Ton problème vient bien des noms de tes zones de listes ==> il y a un espace devant RegionFiltre et DepartementFiltre.
    Supprime-le et tu n'auras plus le message d'erreur VBA.
    En revanche, il faut approfondir un peu pour que le département sélectionné soit le seul affiché avec ta région sélectionnée.

    Salutations

Discussions similaires

  1. [AC-2010] Requête pour l'insertion d'une valeur ? (sans VBA)
    Par fantazio77 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/10/2013, 17h48
  2. [AC-2010] Requête via listbox multi-critères sans VBA --> Possible via macro?
    Par Greg12345 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/11/2011, 20h20
  3. Réponses: 3
    Dernier message: 30/10/2011, 20h33
  4. [MySQL] Requête avec WHERE multi-critères
    Par flashnet dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/04/2010, 15h42
  5. Modification critére requête via formulaire
    Par frevale dans le forum Access
    Réponses: 1
    Dernier message: 02/11/2005, 21h30

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