Filtre d'une table avec Access et VB

Résolu
Bonjour,

Je suis débutant sur Access. (j'utilise Office 2007)
J'ai une table avec trois champs : identifiant_mot(autonumber), mot (text), occurence_mot(nombre d'apparition du mot : un nombre entier)

J'aimerais créer un programme? une requete? un rapport(form)? pour m'afficher la liste des mots dont l'occurence est comprise entre X et Y (qui sont des entiers variables).

De préférence, X et Y serait à choisir dans des combobox (choix préétabli de valeurs : 1/5/10/15/20/50/100/200/500).
A chaque actualisation de sélection des valeurs X et/ou Y. La feuille s'actualise et affiche le résultat.

Je crois que c'est assez simple à faire : le problème, c'est que je ne sais pas comment :(

De l'aide serait le bienvenu.

Merci d'avance pour vos réponses.

5 réponses

Résumé de la discussion

La discussion porte sur la mise en place d'un affichage dynamique des mots dont l'occurence se situe entre deux valeurs X et Y, choisies dans deux combobox préconfigurées, avec mise à jour à chaque changement. La solution recommandée consiste à utiliser deux listes déroulantes pour X et Y, puis un sous-formulaire affichant les résultats et à rafraîchir ce sous-formulaire à chaque modification. Pour faire communiquer les valeurs, on affecte variable = nom_objet.value et on construit une requête SQL stockée dans une variable, que l'on assigne ensuite au RowSource/RecordSource du sous-formulaire. En pratique, le sous-formulaire se rafraîchit via FormName.SubformName.RowSource = strSql et FormName.SubformName.Requery, étape nouvelle qui permet d'afficher immédiatement les résultats adaptés aux choix utilisateur sélectionnés.

Bobot (l’IA à votre service)
  1. Bonjour philip,

    Il s'agit d'une requête de ce type :
    SELECT mot FROM [table] WHERE occurence_mot > X AND occurence_mot < Y


    Il faut l'adapter selon le code SQL d'Access.
    1. Bonjour synopsis8,

      Oui merci, mais en fait, j'aurais voulu savoir concrètement comment faire ceci sur Access. Comment attribuer une variable à une selection dans une combobox/listbox et à chaque évènement de sélection d'une valeur : afficher les résultats dans un rapport ou formulaire.
      Ma question ne portait pas vraiment sur la syntaxe SQL mais sur la manière dont les différents élements code SQL /interface Access/code VB fonctionne ensemble.

      En pratique, dans une combobox, comment fait-on pour déterminer les valeurs affichées dans la combobox et les lier à X et Y dans Access.

      Merci d'avance
      1. Modérateur
        Salut,

        il te faut deux listes dans lesquelles tu choisiras tes valeurs, et un sous-formulaire qui affiche les résultats.

        Ensuite, à chaque modification dans la liste (choix d'une valeur), tu iras 'rafraichir' ton sous-formulaire.

        Pour attribuer une sélection d'un objet à une variable, tu fais : variable = nom_objet.value
        Pour changer le source d'un sous-formulaire, tu fais nom_du_sous_formulaire.rowsource (ou .recordsource) = variable (dans variable, tu vas trouver une requête SQL que tu auras fabriquée avec les résultats de tes saisies.
        1. Bonjour et merci pour ta réponse,

          j'ai réussi à afficher une liste de valeurs pré-choisies dans les combo_box : l'une pour choisir la valeur X, l'autre pour choisir la valeur Y.

          Par contre, je n'arrive pas à : lancer un événement à partir du code. J'ai créé un événement qui fonctionne :

          Même un simple (cfr code juste en dessous) ne fonctionne pas quand je clique sur le bouton.

          Private Sub Command11_Click()

          MsgBox "ok"

          End Sub

          J'imagine que c'est une faute de syntaxe ou un truc tout bête à cocher mais je ne sais pas quoi.

          Merci de ton aide.
          1. Modérateur
            Si ton bouton s'appelle Command11, alors tu dois avoir un affichage quand tu cliques dessus.
          2. Bonjour blux,

            J'ai écrit la requete suivante :
            SELECT [LISTE MOTS].[count_mots], [LISTE MOTS].[nom_mots]
            FROM [LISTE MOTS]
            WHERE [count_mots] BETWEEN count_min and count_max;

            lorsque je la lance avec "RUN" dans le bandeau de Access. On me demande successivement de rentrer les valeurs de count_min et count_max.
            Par contre, je n'arrive pas à relier count_min et count_max aux valeurs affichés dans les combobox.

            Comment dois-je faire pour bien appeler : count_min = Combo11.value et count_max = combo12.value ?

            Merci de ton aide
          3. Modérateur
            Il faut que tu crées ta requête avec du VBA qui sera appelé lorsque tu appuies sur un bouton, ensuite tu la mettras en source de ton sous-formulaire...

            Dim StrSql as string 
            StrSql = "SELECT [LISTE MOTS].[count_mots], [LISTE MOTS].[nom_mots] FROM [LISTE MOTS] 
            WHERE [count_mots] BETWEEN " & combo11.value & " AND " + combo12.value 
            sous_form.recordsource = StrSql
          4. Rebonjour,

            Pour le code, c'est bon, j'ai bien compris la manière de s'y prendre. En gros : à chaque fois, on réécrit la requete selon la valeur des variables choisies et on la relance.

            Par contre, je n'arrive toujours pas à faire fonctionner correctement la chose. :(

            Ma requete "Query1" est :
            SELECT LISTE.age, LISTE.Prénom
            FROM LISTE
            WHERE (((LISTE.age) Between 5 And 15))
            ORDER BY LISTE.age, LISTE.Prénom;

            (elle fonctionne quand je clique sur RUN)

            je crée un bouton, je vais dans view code :
            et j'écris :

            Private Sub Command9_Click()

            Dim StrSql As String
            StrSql = "SELECT [LISTE MOTS].[count_mots], [LISTE MOTS].[nom_mots] FROM [LISTE MOTS] WHERE [count_mots] BETWEEN 1 AND 35;"
            Query1.RecordSource = StrSql
            DoCmd.OpenQuery "Query1"

            End Sub

            J'essaie de faire fonctioner en form view en cliquant sur Command9 : et Access me répond Object Required + Bug
            Ou si je le fais fonctionner en cliquand sur le bouton lecture à partir du code : il y a une fenetre qui s'ouvre et qui me demande de selectionner une macro. (qui n'existe pas, puisque je n'en ai pas)

            Merci pour ton aide et Bonne journée :)
          5. Est-ce que cela vient des modules, classes de modules? ce sont des notions que je ne maitrise pas du tout.
        2. dim sql as string
          sql="SELECT mot FROM [table] WHERE occurence_mot >' " & X & " 'AND occurence_mot <'" & Y & " ' "
          me!(nom de sous-formulaire).form.recordsource=sql
          me!(nom de sous-formulaire.requery