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 :

Probleme avec formulaire recherche multi criteres


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Probleme avec formulaire recherche multi criteres
    Bonjour,
    Je rencontre des difficultés avec le code VB sur ma base access avec cette fonction de recherche multicriteres. En bref, mes champs de listes déroulantes ne se réinitialisent pas, il y a également un soucis sur le fonctionnement des boutons qui affichent (ou pas) les combobox.
    De plus, le résultat de la lstbox ne s'actualise pas selon les filtres choisis
    Bref, aprés avoir vérifié, et revérifié, et rerevérifié le code, je ne trouve franchement pas le soucis...
    Ci dessous le code de ma base access:

    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
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT [ID_affaire], [Programme], [Data item], [Document number], Service, Statut FROM [Synthese affaires et items] WHERE [ID_affaire] Is Not Null "
     
    If Not Me.chkaff Then
    SQL = SQL & "And [Synthese affaires et items]!Programme ='" & Me.Cmbrechaff & "' "
    End If
     
    If Not Me.chkdoc Then
    SQL = SQL & "And [Synthese affaires et items]![Document number] ='" & Me.Cmbrechdoc & "' "
    End If
     
    If Not Me.chkitem Then
    SQL = SQL & "And [Synthese affaires et items]![Data item] ='" & Me.Cmbrechitem & "' "
    End If
     
    If Not Me.chksce Then
    SQL = SQL & "And [Synthese affaires et items]!Service ='" & Me.Cmbrechsce & "' "
    End If
     
    If Not Me.chkstatut Then
    SQL = SQL & "And [Synthese affaires et items]!Statut ='" & Me.Cmbrechstatut & "' "
    End If
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where") - Len("Where") + 1))
    SQL = SQL & ";"
     
    Me.lblStats.Caption = DCount("*", "[Synthese affaires et items]", SQLWhere) & "/" & DCount("*", "[Synthese affaires et items]")
    Me.lstresults.RowSource = SQL
    Me.lstresults.Requery
     
    End Sub
     
    Private Sub Form_Load()
    Dim ctl As Control
     
    For Each ctl In Me.Controls
    Select Case Left(ctl.Name, 3)
     
    Case "chk"
    ctl.Value = 0
     
    Case "lbl"
    ctl.Caption = "-*-*-"
     
    Case "Cmb"
    ctl.Visible = False
     
    End Select
    Next ctl
     
    Me.lstresults.RowSource = "SELECT [ID_affaire], [Programme], [Data item], [Document number], Service, Statut FROM [Synthese affaires et items] ;"
    Me.lstresults.Requery
    End Sub
    S'il vous faut d'autres infos, faites le moi savoir.
    Merci!

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 063
    Points : 24 668
    Points
    24 668
    Par défaut
    Bonjour,
    • mes champs de listes déroulantes ne se réinitialisent pas,
    • il y a également un soucis sur le fonctionnement des boutons qui affichent (ou pas) les combobox.
    • le résultat de la lstbox ne s'actualise pas selon les filtres choisis

    Trois problèmes donc !

    Ton code de réinitialisation des listes n'est pas fourni.
    Les codes d'affichage non plus.

    Pour le troisième il y a un tuto sur le débogage des requetes en VBA.
    En gros tu mets un point d'arrêt sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.lstresults.RowSource = SQL
    Et dans la fenêtre d'exécution tu lances cette commande.
    Il va te donner une ligne à copier dans une requete vierge et que tu posteras.

    Bref pas de mode divination sur developpez.com comme tu le vois.
    Cordialement,

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour loufab,
    Je joins le code complet:
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    Option Compare Database
    Option Explicit
     
    Private Sub chkaff_Click()
    If Me.chkaff Then
    Me.Cmbrechaff.Visible = True
    Else
    Me.Cmbrechaff.Visible = False
    End If
    RefreshQuery
    End Sub
     
    Private Sub chkdoc_Click()
    If Me.chkdoc Then
    Me.Cmbrechdoc.Visible = True
    Else
    Me.Cmbrechdoc.Visible = False
    End If
    RefreshQuery
    End Sub
     
    Private Sub chkitem_Click()
    If Me.chkitem Then
    Me.Cmbrechitem.Visible = True
    Else
    Me.Cmbrechitem.Visible = False
    End If
    RefreshQuery
    End Sub
     
    Private Sub chksce_Click()
    If Me.chksce Then
    Me.Cmbrechsce.Visible = True
    Else
    Me.Cmbrechsce.Visible = False
    End If
    RefreshQuery
    End Sub
     
    Private Sub chkstatut_Click()
    If Me.chkstatut Then
    Me.Cmbrechstatut.Visible = True
    Else
    Me.Cmbrechstatut.Visible = False
    End If
    RefreshQuery
    End Sub
     
    Private Sub Cmbrechaff_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub Cmbrechdoc_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub Cmbrechitem_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub Cmbrechsce_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub Cmbrechstatut_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT [ID_affaire], [Programme], [Data item], [Document number], Service, Statut FROM [Synthese affaires et items] WHERE [ID_affaire] Is Not Null "
     
    If Not Me.chkaff Then
    SQL = SQL & "And [Synthese affaires et items]!Programme ='" & Me.Cmbrechaff & "' "
    End If
     
    If Not Me.chkdoc Then
    SQL = SQL & "And [Synthese affaires et items]![Document number] ='" & Me.Cmbrechdoc & "' "
    End If
     
    If Not Me.chkitem Then
    SQL = SQL & "And [Synthese affaires et items]![Data item] ='" & Me.Cmbrechitem & "' "
    End If
     
    If Not Me.chksce Then
    SQL = SQL & "And [Synthese affaires et items]!Service ='" & Me.Cmbrechsce & "' "
    End If
     
    If Not Me.chkstatut Then
    SQL = SQL & "And [Synthese affaires et items]!Statut ='" & Me.Cmbrechstatut & "' "
    End If
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where") - Len("Where") + 1))
    SQL = SQL & ";"
     
    Me.lblStats.Caption = DCount("*", "[Synthese affaires et items]", SQLWhere) & "/" & DCount("*", "[Synthese affaires et items]")
    Me.lstresults.RowSource = SQL
    Me.lstresults.Requery
     
    End Sub
     
    Private Sub Form_Load()
    Dim ctl As Control
     
    For Each ctl In Me.Controls
    Select Case Left(ctl.Name, 3)
     
    Case "chk"
    ctl.Value = 0
     
    Case "lbl"
    ctl.Caption = "-*-*-"
     
    Case "Cmb"
    ctl.Visible = False
     
    End Select
    Next ctl
     
    Me.lstresults.RowSource = "SELECT [ID_affaire], [Programme], [Data item], [Document number], Service, Statut FROM [Synthese affaires et items] ;"
    Me.lstresults.Requery
    End Sub
    J'ai déja fait ce genre de base avec ce formulaire de recherche, qui fonctionne ailleurs, j'avais "copié" le code en l'adaptant a la nouvelle bdd mais visiblement, y'a un loup!
    Si tu as besoin de la bdd complete, je peux aussi l'envoyer.
    Merci de l'interet que tu portes a mon probleme

    Edit:voici le code généré par le point d'arret:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [ID_affaire], [Programme], [Data item], [Document number], Service, Statut FROM [Synthese affaires et items] WHERE [ID_affaire] Is Not Null And [Synthese affaires et items]![Document number] ='' And [Synthese affaires et items]![Data item] ='' And [Synthese affaires et items]!Service ='' And [Synthese affaires et items]!Statut ='' ;

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 063
    Points : 24 668
    Points
    24 668
    Par défaut
    Bonjour,

    Donc pour vérifier la requête tu dois la copier dans un objet et voir ce quelle renvoie.

    Attention à ce que les WHERE avec ' ' soit bien de type texte.

    Ensuite il y a un truc qui me chiffonne c'est le refresh positionné sur un Before. Pourquoi Avant la modification de la valeur ?

    Enfin, vérifier que tous les contrôles sont bien liés à leur procédure événementielle. Lorsqu'on fait une copie de code ce n'est pas fait automatiquement.

    cordialement,

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par loufab Voir le message
    Bonjour,

    Donc pour vérifier la requête tu dois la copier dans un objet et voir ce quelle renvoie.

    Attention à ce que les WHERE avec ' ' soit bien de type texte.

    Ensuite il y a un truc qui me chiffonne c'est le refresh positionné sur un Before. Pourquoi Avant la modification de la valeur ?

    Enfin, vérifier que tous les contrôles sont bien liés à leur procédure événementielle. Lorsqu'on fait une copie de code ce n'est pas fait automatiquement.

    cordialement,
    Bon, va falloir que je te précise que je ne suis pas super calé en la matiere et j'ai besoin d'éclaircissements!

    Donc pour vérifier la requête tu dois la copier dans un objet et voir ce quelle renvoie.
    Ce qui veut dire? Un objet, un module VBA?

    Attention à ce que les WHERE avec ' ' soit bien de type texte.
    Les WHERE désignent une valeur non nulle d'un champ numauto, donc un chiffre, non?

    Enfin, vérifier que tous les contrôles sont bien liés à leur procédure événementielle. Lorsqu'on fait une copie de code ce n'est pas fait automatiquement.
    J'avais fini par les coder manuellement afin d'éviter ce genre de probleme!

    Ensuite il y a un truc qui me chiffonne c'est le refresh positionné sur un Before. Pourquoi Avant la modification de la valeur ?
    Il me semble que c'est pour que le "tri dynamique" soit effectif, selon le choix d'un filtre, le 2e proposera un résultat en rapport avec le 1er choix et ainsi de suite.

    Je joins ma bdd a ce message, ce sera peut etre plus clair pour toi
    Fichiers attachés Fichiers attachés

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 063
    Points : 24 668
    Points
    24 668
    Par défaut
    J'ai rapidement jeté un oeil sur ton appli.

    1) Un objet Requete évidemment, tu devrais franchement lire le tuto sur le débogage des requetes en VBA.

    2) Si c'est du numérique dans le Where alors il ne faut pas de cote, ce séparateur est pour le texte uniquement.

    3) OK

    4) il faut mettre les refresh sur afterupdate, le before ne contient pas encore la valeur. Et il faut que tu contrôles si il y a une donnée sélectionnée en plus du clic sur le bouton.

    5) coté Saint-Martin ou Blagnac ?

  7. #7
    Candidat au Club
    Inscrit en
    Octobre 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Sinon, bah, je m'en sors pas plus

    Edit 16h28 : J'ai fait des corrections en me basant sur un formulaire identique (qui fonctionne), je pense que des espaces entre expressions font toute la différence

Discussions similaires

  1. [AC-2003] Probleme Formulaire recherche multi critere
    Par Ardiden31 dans le forum VBA Access
    Réponses: 18
    Dernier message: 15/08/2019, 11h18
  2. probleme avec formulaire recherch
    Par dalleau974 dans le forum IHM
    Réponses: 1
    Dernier message: 11/10/2013, 15h03
  3. [formulaire] recherche multi critere multi table
    Par luz_negra dans le forum IHM
    Réponses: 21
    Dernier message: 28/11/2007, 00h22
  4. [Formulaire]Recherche Multi Critere
    Par sumtech dans le forum IHM
    Réponses: 5
    Dernier message: 18/04/2007, 16h40
  5. [formulaire] recherche multi criteres
    Par Treuze dans le forum IHM
    Réponses: 3
    Dernier message: 10/01/2006, 10h36

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