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 :

problème avec recherche multi-critères


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 25
    Points : 24
    Points
    24
    Par défaut problème avec recherche multi-critères
    Bonjour,

    Je me permets de vous solliciter car j'ai besoin d'aide et je suis perdu.
    Je précise que je ne suis pas informaticien, ce qui à mon avis explique grandement mes déboires...

    J'ai fait pour mon travail une base de données de suivi de fiches actions entre différents services sous ACCESS. Si j'arrive à m'en sortir dans la plupart des cas avec les fonctions de bases d'ACCESS(formulaires, requêtes, macros...) je n'ai pas le choix, pour faire une recherche multi-critere dynamique, il me faut coder en VBA.

    En fait, j'aimerais à partir de plusieurs critères définis par l'utilisateur (dont 2 zones de listes modifiables et une zone de texte) renvoyer un tableau de données avec bien évidemment comme filtre mes critères saisis.

    En reprenant un exemple sur le net, j'ai écrit ce code mais le programme bloque sur la fonction Rowsource et ça marche pas. Quelqu'un peut-il m'aider svp...je suis désespéré

    Merci d'avance

    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
    Private Sub Form_Open(Cancel As Integer)
     
    cmddomaine.Visible = False
    cmdagence.Visible = False
    txtannee.Visible = False
    End Sub
     
     
    Private Sub chkannee_Click()
        Me.txtannee.Visible = Not Me.txtannee.Visible
        Refreshquery
    End Sub
     
    Private Sub chkdomaine_Click()
        Me.cmddomaine.Visible = Not Me.cmddomaine.Visible
        Refreshquery
    End Sub
     
    Private Sub chkagence_Click()
        Me.cmdagence.Visible = Not Me.cmdagence.Visible
        Refreshquery
    End Sub
     
    Private Sub Refreshquery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT num_auto, titre_action, NOM_com, année FROM Tb_fiche_projet Where Tb_fiche_projet!num_auto <> 0 "
    If Me.chkAnnee Then
        SQL = SQL & "And Tb_fiche_projet!année like '*" & Me.txtannee & "*' "
    End If
    If Me.chkDomaine Then
        SQL = SQL & "And Tb_fiche_projet!id_domaine = '" & Me.cmddomaine & "' "
    End If
    If Me.chkAgence Then
        SQL = SQL & "And Tb_fiche_projet!id_agence = '" & Me.cmdagence & "' "
    End If
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     SQL = SQL & ";"
     
     Me.lstResults.RowSource = SQL
     Me.lstResults.Requery
    End Sub

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 085
    Points : 5 200
    Points
    5 200
    Par défaut
    Bonjour,

    Pour ma part je mets et non ou quand il n'y a qu'une table je ne mets rien du tout c'est plus simple

    D'autre part si id_domaine et id_agence sont numériques il faut enlever les '
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    Merci beaucoup pour tes conseils.

    J'ai finalement réussi à m'en sortir....(non sans peine) Voici mon code :

    Option Compare Database

    Private Sub chkannee_Click()

    If Me.chkAnnee Then
    Me.txtannee.Visible = False
    Else
    Me.txtannee.Visible = True
    End If

    RefreshQuery

    End Sub


    Private Sub chkdomaine_Click()

    If Me.chkDomaine Then
    Me.cmddomaine.Visible = False
    Else
    Me.cmddomaine.Visible = True
    End If

    RefreshQuery

    End Sub


    Private Sub chkagence_Click()

    If Me.chkAgence Then
    Me.cmdagence.Visible = False
    Else
    Me.cmdagence.Visible = True
    End If

    RefreshQuery

    End Sub


    Private Sub cmddomaine_BeforeUpdate(Cancel As Integer)

    RefreshQuery

    End Sub

    Private Sub cmdagence_BeforeUpdate(Cancel As Integer)

    RefreshQuery

    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 = -1

    Case "txt"
    ctl.Visible = False
    ctl.Value = ""

    Case "cmd"
    ctl.Visible = False

    End Select
    Next ctl

    Me.lstResults.RowSource = "SELECT num_auto, num_projet, NOM_com, num_com, EPCI, titre_action, année FROM Tb_fiche_projet;"
    Me.lstResults.Requery

    End Sub

    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String

    SQL = "SELECT num_auto, num_projet, NOM_com, num_com, EPCI, titre_action, année FROM Tb_fiche_projet Where Tb_fiche_projet!num_auto <> 0 "

    If Not Me.chkAnnee Then
    SQL = SQL & "And Tb_fiche_projet!année like '*" & Me.txtannee & "*' "
    End If
    If Not Me.chkDomaine Then
    SQL = SQL & "And Tb_fiche_projet!id_domaine = '" & Me.cmddomaine & "' "
    End If
    If Not Me.chkAgence Then
    SQL = SQL & "And Tb_fiche_projet!id_agence = '" & Me.cmdagence & "' "
    End If

    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))

    SQL = SQL & ";"

    Me.lblStats.Caption = DCount("*", "Tb_fiche_projet", SQLWhere) & " / " & DCount("*", "Tb_fiche_projet")
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery

    End Sub


    Private Sub lstResults_DblClick(Cancel As Integer)
    DoCmd.OpenForm "fm_recherche", acNormal, , "[num_auto] = " & Me.lstResults
    End Sub

    Private Sub txtannee_BeforeUpdate(Cancel As Integer)

    RefreshQuery

    End Sub


    Private Sub Commande27_Click()
    On Error GoTo Err_Commande27_Click


    DoCmd.Close

    Exit_Commande27_Click:
    Exit Sub

    Err_Commande27_Click:
    MsgBox Err.Description
    Resume Exit_Commande27_Click

    End Sub

Discussions similaires

  1. Problème avec le tutoriel Recherche Multi-critère
    Par Darki dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/08/2007, 18h50
  2. Réponses: 7
    Dernier message: 26/10/2006, 16h13
  3. problème recherche multi critère
    Par jeck dans le forum Access
    Réponses: 3
    Dernier message: 16/05/2006, 11h42
  4. problème SQL avec le tutoriel recherche multi critère
    Par qbihlmaier dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/12/2005, 20h33
  5. problème avec résultat de recherche multi-critères
    Par audrey_desgres dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 12h00

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