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

VBA Access Discussion :

Recherche filtre et tri. . .


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2007
    Messages : 88
    Points : 72
    Points
    72
    Par défaut Recherche filtre et tri. . .
    Bonjour !

    Voilà j'ai adapté la recherche multi critère du tutorial et sa marche pas trop mal :p

    Maintenant j'aimerais l'améliorer en ajoutant du tri. Ca n'aurait pas du être très compliqué avoir après fait le tuto' mais malheureusement ça ne marche pas et je ne comprend pas pourquoi.

    J'ai ajouté 2 boutons (accessoirement des boutons radios dans un groupe d'options). Donc lorsque je valide l'un des deux, j'ai rajouté un ORDER BY ... Le problème c'est que ça ne marche pas lorsque je laisse le WHERE... Je vous montre :

    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
     
    Private Sub RefreshQuery()
    ...
    ...
    ...
    SQL = "SELECT *  FROM fichier_client WHERE fichier_client!Cle <> 0 "
    ...
    ...
    ...
    If grptri.Value = 2 Then
        SQL = "SELECT *  FROM fichier_client ORDER BY fichier_client.[NOM / PRENOM] "
    End If
     
    If grptri.Value = 1 Then
        SQL = SQL & " ORDER BY fichier_client.[CODE POSTAL / VILLE] "
    End If
    Vous pouvez voir là que j'ai testé deux techniques. L'un ou il n'y a pas de WHERE et l'autre où il y est. Et seulement la première marche....

    Merci pour tout

  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,

    Qu'est fichier_client!Cle ?

    Quand tu dis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ça ne marche pas lorsque je laisse le WHERE
    le tri ne se fait pas ?

    Peut être qu'il n'y a pas de données correspondantes à fichier_client!Cle <> 0

  3. #3
    Membre éprouvé Avatar de jean-paul lepetit
    Inscrit en
    Février 2005
    Messages
    842
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Février 2005
    Messages : 842
    Points : 919
    Points
    919
    Par défaut
    Salut,

    quel est ton message d'erreur ?

  4. #4
    Membre régulier
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2007
    Messages : 88
    Points : 72
    Points
    72
    Par défaut
    fichier_client c'est ma table. Je précise que ça marche très bien pour ce qui concerne les filtres. Je vous donne le code complet de refreshquery peut-être :p

    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
     
    Private Sub RefreshQuery()
     
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT *  FROM fichier_client WHERE fichier_client!Cle <> 0 "
     
    If Not Me.chkNom Then
        SQL = SQL & "AND fichier_client.[NOM / PRENOM] LIKE '*" & Me.txtNom & "*' "
    End If
    If Not Me.chkVille Then
        SQL = SQL & "AND fichier_client.[CODE POSTAL / VILLE] = '" & Me.cmbville & "' "
    End If
    If Not Me.chkEtat Then
        SQL = SQL & "AND fichier_client.ETAT = '" & Me.cmbEtat & "' "
    End If
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.lblStats.Caption = DCount("*", "fichier_client", SQLWhere) & " / " & DCount("*", "fichier_client")
     
    If grptri.Value = 2 Then
        SQL = "SELECT *  FROM fichier_client ORDER BY fichier_client.[NOM / PRENOM] "
    End If
    If grptri.Value = 1 Then
        SQL = SQL & " ORDER BY fichier_client.[CODE POSTAL / VILLE] "
    End If
     
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
     
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQL = "SELECT *  FROM fichier_client WHERE fichier_client!Cle <> 0 "
    Cette ligne sert à afficher - par défaut - tous les enregistrements. Lorsque j'envoie la commande SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT *  FROM fichier_client WHERE fichier_client!Cle <> 0 ORDER BY fichier_client.[CODE POSTAL / VILLE]
    Ca ne marche pas.
    Par contre ceci marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT *  FROM fichier_client ORDER BY fichier_client.[CODE POSTAL / VILLE]

    Quant à mon erreur, eh bien c'est juste que j'ai pas d'enregistrements d'afficher dans ma zone de liste alors qu'avec l'autre ça s'affiche et en plus ça trie

  5. #5
    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
    Si je suis ton code :

    SQL, dans le cas où grptri = 1, vaut :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *  FROM fichier_client WHERE fichier_client!Cle <> 0;ORDER BY fichier_client.[CODE POSTAL / VILLE]

    Il y a comme qui dirait un ; au milieu de ta chaine SQL

  6. #6
    Membre régulier
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2007
    Messages : 88
    Points : 72
    Points
    72
    Par défaut
    Erf... effectivement mais c'est pas ça le problème... en tout cas c'est pas le premier :p Puisqu'avant j'étais pas dans cet ordre là, j'avais placé les test avant cette ligne :
    Et après j'ai changé pour voir... Par ailleurs là j'ai encore modifier l'ordre. J'ai mis le ORDER BY avant le WHERE. Je remet tout le 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    Private Sub RefreshQuery()
     
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT *  FROM fichier_client "
     
    If grptri.Value = 2 Then
        SQL = SQL & "ORDER BY fichier_client.[NOM / PRENOM] "
    End If
    If grptri.Value = 1 Then
        SQL = SQL & "ORDER BY fichier_client.[CODE POSTAL / VILLE] "
    End If
     
    SQL = SQL & "WHERE fichier_client!Cle <> 0 "
     
    If Not Me.chkNom Then
        SQL = SQL & "AND fichier_client.[NOM / PRENOM] LIKE '*" & Me.txtNom & "*' "
    End If
    If Not Me.chkVille Then
        SQL = SQL & "AND fichier_client.[CODE POSTAL / VILLE] = '" & Me.cmbville & "' "
    End If
    If Not Me.chkEtat Then
        SQL = SQL & "AND fichier_client.ETAT = '" & Me.cmbEtat & "' "
    End If
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    ' Affichage des nombres d'enregistrements affichés/total
    Me.lblStats.Caption = DCount("*", "fichier_client", SQLWhere) & " / " & DCount("*", "fichier_client")
     
     
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
     
    End Sub
    Merci de m'aidé en tout cas

  7. #7
    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
    L'ordre des clauses SQL est :
    SELECT
    FROM
    [WHERE... ]
    [GROUP BY... ]
    [HAVING... ]
    [ORDER BY...]

  8. #8
    Membre régulier
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2007
    Messages : 88
    Points : 72
    Points
    72
    Par défaut
    Ok, je le saurai maintenant. Mais j'ai toujours un problème et cette fois ça me sors une erreur qui est

    Erreur de syntaxe (opérateur absent) dans l'expression 'fichier_client!Cle <> 0 ORDER BY fichier_client![NOM / PRENOM]
    Et donc la requête SQL devait être celle là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT *  FROM fichier_client WHERE fichier_client!Cle <> 0 ORDER BY fichier_client.[CODE POSTAL / VILLE]
    Je ne comprend pas l'erreur.

  9. #9
    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
    Je vais revenir la dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT *  FROM fichier_client WHERE fichier_client!Cle <> 0 "
    Cette ligne sert à afficher - par défaut - tous les enregistrements. Lorsque j'envoie la commande SQL
    Si c'est pour afficher tous les enregistrements : pourquoi mettre une clause WHERE ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *  FROM fichier_client
    Suffit amplement.

  10. #10
    Membre régulier
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2007
    Messages : 88
    Points : 72
    Points
    72
    Par défaut
    Vi lol, mais en fait c'est pour pouvoir utiliser la suite du code :p C'est Charles A. qui l'a dit ! Je te renvoie à son tutorial

    http://cafeine.developpez.com/access...echerchemulti/

    "
    * Création du SQL de résultat

    Comme vu précédemment nous traitons cette mise à jour par la sub suivante :

    Le code commence par poser la variable String "SQL"

    SELECT CodMedia, Titre, Auteur, Famille, Type La requête affichera ainsi les cinq champs nommés
    FROM Medias sur la table Medias
    WHERE Medias!CodMedia <> 0 avec le critère CodMedia (clé de la table) différent de zéro



    L'utilisation de cette Instruction Where est ici sans intérêt pour les résultats mais permet de mettre dans la chaine "SQL" le Where
    Mais sinon c'est sur qu'il ne sert à rien !

  11. #11
    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


    Pour connaitre la valeur exact de SQL fait (à l'endroit le plus approprié)
    Et affiche la fenêtre de débogage pour voir ce qui s'affiche.

  12. #12
    Membre régulier
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2007
    Messages : 88
    Points : 72
    Points
    72
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT *  FROM fichier_client WHERE fichier_client!Cle <> 0 ORDER BY fichier_client.[CODE POSTAL / VILLE] ;
    Y'a ça, et c'est ce que je recherche ! Mais ça ne me donne pas le résultat escompté. Je voudrais que ça affiche tous les enregistrements trié par CODE POSTAL / VILLE. Et là pour le coup j'ai une erreur.

  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
    A tout hasard, as tu essayé de remplacer :
    par
    ??

    Parce que là : je n'ai pas être plus les yeux en face des trous

  14. #14
    Membre régulier
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2007
    Messages : 88
    Points : 72
    Points
    72
    Par défaut
    Oui... Et ça ne change rien :'( Mes filtres marchent, mais pas les tris !

    Ce que je comprend vraiment pas c'est pourquoi une requête qui marche sous le forme SELECT ... FORM ... WHERE ... ne marche pas sous la forme SELECT ... FORME ... WHERE ... ORDER BY ...

  15. #15
    Membre régulier
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2007
    Messages : 88
    Points : 72
    Points
    72
    Par défaut
    Bon ! J'ai persisté et finalement j'ai trouvé
    En fait le problème se situait au niveau du SQLWhere où on recherche justement le mot "WHERE" dans SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
    J'ai donc commencé par mettre cette ligne de code suivi par le Caption du label (affichage du nombre d'enregistrements) et c'est seulement après que j'ai ajouté le ORDER BY.

    Ce qui donne donc pour le RefreshQuery :

    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
     
    Private Sub RefreshQuery()
     
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT *  FROM fichier_client WHERE fichier_client!Cle <> 0 "
     
    If Not Me.chkNom Then
        SQL = SQL & "AND fichier_client.[NOM / PRENOM] LIKE '*" & Me.txtNom & "*' "
    End If
    If Not Me.chkVille Then
        SQL = SQL & "AND fichier_client.[CODE POSTAL / VILLE] = '" & Me.cmbville & "' "
    End If
    If Not Me.chkEtat Then
        SQL = SQL & "AND fichier_client.ETAT = '" & Me.cmbEtat & "' "
    End If
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    ' Affichage des nombres d'enregistrements affichés/total
    Me.lblStats.Caption = DCount("*", "fichier_client", SQLWhere) & " / " & DCount("*", "fichier_client")
     
    If grptri.Value = 1 Then
        SQL = SQL & "ORDER BY fichier_client.[CODE POSTAL / VILLE] "
    End If
    If grptri.Value = 2 Then
        SQL = SQL & "ORDER BY fichier_client.[NOM / PRENOM] "
    End If
    If grptri.Value = 3 Then
        SQL = SQL & "ORDER BY fichier_client.CLE "
    End If
    If grptri.Value = 4 Then
        SQL = SQL & "ORDER BY fichier_client.ETAT "
    End If
     
    SQL = SQL & ";"
     
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
     
    End Sub
    Voilà merci quand même pour l'aide apporter, sa m'a permis de mieux chercher

    ++++

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/05/2007, 23h12
  2. formulaire pour recherche filtrée
    Par Shyboy dans le forum Web
    Réponses: 5
    Dernier message: 06/07/2006, 03h58
  3. [Performances]Filtre et tri en relation avec DB
    Par stoukou dans le forum Général Java
    Réponses: 6
    Dernier message: 19/09/2005, 12h46
  4. Recherche filtrée sur site
    Par freud dans le forum ASP
    Réponses: 2
    Dernier message: 19/07/2005, 10h40
  5. recherche filtre flou gaussien
    Par gimlithedwarf dans le forum Langage
    Réponses: 4
    Dernier message: 01/08/2002, 23h32

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