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 multicritère résultat vide


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 26
    Points : 9
    Points
    9
    Par défaut recherche multicritère résultat vide
    Bonjour,

    Je programme ma base de donnée et j'ai besoin d'un formulaire de recherche multicritère. J'ai donc suivi la démarche de caféine (http://cafeine.developpez.com/access...echerchemulti/) j'ai aussi téléchargé sa base pour m'aider. Le problème est que mon résultat dans ma listbox est vide enfin presque. En effet, quand je passe du mode création à formulaire mes résultats apparaissent une fraction de seconde. Ai-je un problème dans mon programme ou juste un paramètre dans les propriétés?

    voilà mon programme:
    -------------------------------------------------------------------------
    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
     
    Private Sub chkdomaine_Click()
     
    If Me.chkdomaine Then
    Me.cmbrechdomaine.Visible = False
    Else
    Me.cmbrechdomaine.Visible = True
    End If
    RefreshQuery
    End Sub
    -------------------------------------------------------------------------
    Private Sub chkintitulé_Click()
     
    If Me.chkintitulé Then
    Me.txtrechintitulé.Visible = False
    Else
    Me.txtrechintitulé.Visible = True
    End If
    RefreshQuery  
    End Sub
    -----------------------------------------------------------------------
    Private Sub chksuperviseur_Click()
     
    If Me.chksuperviseur Then
    Me.cmbrechsuperviseur.Visible = False
    Else
    Me.cmbrechsuperviseur.Visible = True
    End If
    RefreshQuery
    End Sub
    -------------------------------------------------------------------------
    Private Sub chktravauxterminés_Click()
    If Me.chktravauxterminés Then
    Me.cmbrechtravauxterminés.Visible = False
    Else
    Me.cmbrechtravauxterminés.Visible = True
    End If
    RefreshQuery
    End Sub
    -------------------------------------------------------------------------
     
    Private Sub RefreshQuery()
     Dim SQL As String
     Dim SQLWhere As String
     
     SQL = "SELECT numéro,Domaine, superviseurs, travaux terminés, Intitulé FROM Diag travaux Where Diag travaux!numéro <> 0 "
     If Not Me.chkintitulé Then
        SQL = SQL & "And Diag travaux!Intitulé like '*" & Me.txtrechintitulé & "*' "
     End If
     If Not Me.chkdomaine Then
        SQL = SQL & "And Diag travaux!Domaine = '" & Me.cmbrechdomaine & "' "
     End If
     If Not Me.chksuperviseur Then
        SQL = SQL & "And Diag travaux!superviseurs = '" & Me.cmbrechsuperviseur & "' "
     End If
     If Not Me.chktravauxterminés Then
        SQL = SQL & "And Diag travaux!travaux terminé = '" & Me.cmbrechtravauxterminés & "' "
     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
    --------------------------------------------------------------------------
    Private Sub cmbrechdomaine_BeforeUpdate(Cancel As Integer)
       RefreshQuery
    End Sub
    Private Sub cmbrechsuperviseur_BeforeUpdate(Cancel As Integer)
       RefreshQuery
    End Sub
    --------------------------------------------------------------------------
    Private Sub cmbrechtravauxterminés_BeforeUpdate(Cancel As Integer)
       RefreshQuery
    End Sub
    --------------------------------------------------------------------------
    Private Sub txtrechintitulé_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 "lbl"
                ctl.Caption = "- * - * -"
            Case "txt"
                ctl.Visible = False
                ctl.Value = ""
            Case "cmb"
                ctl.Visible = False
        End Select
    Next ctl
     
    Me.lstResults.RowSource = "SELECT numéro, Domaine, superviseurs, travaux terminés, Intitulé Type FROM Diag travaux;"
    Me.lstResults.Requery
     
    End Sub
    ---------------------------------------------------------------

    J'ai du enlever la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.lblStats.Caption = DCount("*", "Diag travaux", SQLWhere) & " / " & DCount("*", "Diag travaux")
    car elle ne fonctionne pas (je sais pas pourquoi, est-ce que c'est lié à mon autre problème?)

    En tout cas, si quelqu'un pouvait m'aider....

    Merci d'avance.

  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,

    Je n'ai pas trop bien saisi ton problème...

    Mais j'ai remarqué des erreurs dans ton SQL.
    Tu utilises des noms de champs avec des espaces !!

    Il ne faut jamais utiliser des espaces ou caractère spéciaux dans les noms de champs/tables/requêtes etc... cf l'article sur les conventions typographiques

    Pour pallier à ça, il faut placer les noms entre crochets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.lstResults.RowSource = "SELECT numéro, Domaine, superviseurs, [travaux terminés], [Intitulé Type] FROM [Diag travaux];"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.lblStats.Caption = DCount("*", "[Diag travaux]", SQLWhere) & " / " & DCount("*", "[Diag travaux]")

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 26
    Points : 9
    Points
    9
    Par défaut Solution
    Mon problème était qu'au lieu d'avoir des données dans ma zone réponse et bien je n'avais rien du tout.

    J'ai contourné mon problème en reprenant la base de caféine et en remplacant ses données par les miennes. Je ne savais pas qu'il ne fallait pas mettre d'accent et d'espace, c'est sans doute pour ça que ça ne fonctionnait pas.

    Maintenant je me demande s'il est possible de récuperer les résultats de ma listbox pour éditer un état.

    Si vous avez une idée je suis preneuse.

    Merci.

  4. #4
    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,

    Fait une recherche sur le forum, il me semble que le problème a déjà été posté.

    En gros, ça consiste à récupérer le SQL de la liste ou du sous formulaire affichant le résultat et de le placer en source de l'état à imprimer.
    Attention : pour modifier l'état avant de l'imprimer/afficher, il faut l'ouvrir en mode création. Regarde dans la FAQ ou dans le forum Contribuez ou encore en faisant une recherche. (sujet déjà traité)

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2006
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    tu vas créer un état avec les champs souhaités, puis tu vas mettre le meme code de la procédure RefreshQuery() dans le module de l'état (alt+F11) en changeant ce qui en orange par le nom du formulaire, si par exemple ton formulaire se nomme Recherche donc le changement sera :
    le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Not Me.chkintitulé Then
        SQL = SQL & "And Diag travaux!Intitulé like '*" & Me.txtrechintitulé & "*' "
    devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Not Forms!Recherche!chkintitulé Then
        SQL = SQL & "And Diag travaux!Intitulé like '*" & Forms!Recherche!txtrechintitulé & "*' "

    tu mets RefreshQuery comme évenement sur ouverture de l'état

    Enfin tu vas mettre un bouton sur le formulaire ou ouvrir ou imprimer l'état

  6. #6
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 26
    Points : 9
    Points
    9
    Par défaut édition d'un état avec recheche multi critere
    Effectivement ya déjà des réponses à ce sujet sur le forum.
    Moi j'ai utilisé celle ou il faut créer un requete puis un état en fonction de cette requete et juste ajouter cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.QueryDefs("R_Travaux").SQL = SQL
    Tout simplement et ça fonctionne trés bien. (yen a qui exportait sur exel en rajoutant plein de ligne de programme....)

    Merci de m'avoir répondu et aider.

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

Discussions similaires

  1. Problème résultat dans recherche multicritères
    Par MAMANHOU dans le forum IHM
    Réponses: 36
    Dernier message: 12/06/2010, 20h14
  2. Réponses: 1
    Dernier message: 23/12/2009, 13h21
  3. Réponses: 13
    Dernier message: 23/05/2007, 15h39
  4. Réponses: 6
    Dernier message: 06/02/2007, 15h18
  5. [LDAP] Résultat vide après recherche sur Active Directory
    Par crashyear dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 23/10/2006, 18h40

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