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 la fonction recherche multicritère dans un formulaire


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Problème avec la fonction recherche multicritère dans un formulaire
    Bonjour à tous,
    Débutant un peu dans access et le VBA et m'étant aidé d'un tutoriel pour réaliser le projet demandé, je recontre quelques problèmes au niveau de la fonction recherche de mon formulaire.

    Je vous explique un peu ma base de données.
    Elle est constituée d'une seule table comprenant le nom, prénom, mot de passe, identifiant ainsi que les droits de différents utilisateurs.

    J'ai créé un formulaire auto repertoriant ces données puis j'ai créé un formulaire en mode création pour tout créer à la main j'ai donc créé 3 textbox avec 3 checkbox (une pour nom, une pour prénom, une pr identifiant) permettant de selectionner mon ou mes critères de recherche en entrant les données dans les textbox.

    Les données sont cherchées dans ma liste positionnées sous ces textbox et étant représentée comme un tableau ac toutes les données utilisateurs.


    LE PROBLEME:

    Quand je selectionne une checkbox, la textbox apparait mais apres avoir entré un nom à recherché, rien n'apparait dans la liste (en gros il trouve rien)

    Je vous link donc mon code car j'ai surement du faire des erreurs vu que je débute

    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
    Option Compare Database
     
    Private Sub chknom_Click()
     
    If Me.chknom Then
        Me.txtrechnom.Visible = False
    Else
        Me.txtrechnom.Visible = True
    End If
     
    RefreshQuery
     
    End Sub
     
    Private Sub chkprenom_Click()
     
    If Me.chkprenom Then
        Me.txtrechprenom.Visible = False
    Else
        Me.txtrechprenom.Visible = True
    End If
     
    RefreshQuery
     
    End Sub
     
    Private Sub chknum_Click()
     
    If Me.chknum Then
        Me.txtrechnum.Visible = False
    Else
        Me.txtrechnum.Visible = True
    End If
     
    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 "cmb"
                ctl.Visible = False
     
        End Select
    Next ctl
     
     
    Me.listresults1.RowSource = "SELECT Utilisateurs.Nom, Utilisateurs.Prenom, Utilisateurs.NumSegula, Utilisateurs.[Mot de passe] FROM Utilisateurs;"
    Me.listresults1.Requery
     
    End Sub
     
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    'SQL = "SELECT Nom, Prenom, NumSegula FROM Utilisateurs Where Utilisateurs!Nom <> 0 "
    SQL = "SELECT Nom, Prenom, NumSegula FROM Utilisateurs Where Utilisateurs!Nom <> IsEmpty() "
     
    If Not Me.chknom Then
        SQL = SQL & "And Utilisateurs!Nom like '*" & Me.txtrechnom & "*' "
    End If
     
    If Not Me.chkprenom Then
        SQL = SQL & "And Utilisateurs!Prenom like '*" & Me.txtrechprenom & "*' "
    End If
     
    If Not Me.chknum Then
        SQL = SQL & "And Utilisateurs!NumSegula like '*" & Me.txtrechnum & "*' "
    End If
     
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.listresults1.RowSource = SQL
    Me.listresults1.Requery
     
     
    End Sub
     
    Private Sub listResults1_DblClick(Cancel As Integer)
     
    'DoCmd.OpenForm "AutoUtilisateurs", acNormal, , "[Nom] = " & Me.listresults1
    DoCmd.OpenForm "AutoUtilisateurs", , "[Nom] = " & Me.listresults1
     
    End Sub
     
    Private Sub txtrechnom_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    End Sub
     
    Private Sub txtrechprenom_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    End Sub
     
    Private Sub txtrechnum_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    End Sub
    Merci d'avance de l'attention que vous porterez à mon post!

    EDIT: En relisant mon code je pense qu'il y a peut être une erreur sur cette ligne mais rien de sur et je vois pas ce que je peux mettre d'autre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT Nom, Prenom, NumSegula FROM Utilisateurs Where Utilisateurs!Nom <> IsEmpty() "
    EDIT2: Une erreur vient d'apparaitre, je vous link en piece jointe le message d'erreur
    Images attachées Images attachées  

  2. #2
    Membre habitué Avatar de berti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 239
    Points : 175
    Points
    175
    Par défaut
    attention sur ton code. Pour implanter du SQL, une requête est considérée comme une chaine de caractère tu ne peux pas en plus inclure du code VB dans la requête SQL à moins de faire de la concaténation de chaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT Nom, Prenom, NumSegula FROM Utilisateurs Where Nom is null;"
    imaginons que tu veuilles afficher toutes les personnes dont le numSegula est égale à 1 (sachant que je ne connais pas ta base et qu'on récupère le numSegula via une checkbox. la requête serait comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    numSegula = me![segula].column(0)
     
    SQL = "SELECT Nom, Prenom, NumSegula FROM Utilisateurs Where NumSegula = " & numSegula & " ORDER BY Nom;"
    par exemple

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci bc maintenant tout marche, ton message m'a mis la puce à l'oreil, apparemment l'erreur était dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT Nom, Prenom, NumSegula FROM Utilisateurs Where Utilisateurs!Nom <> IsEmpty() "
    Il fallait rempalcer <>IsEmpty par is not null


    Ben maintenant j'ai une derniere question avant de vous laisser tranquille!
    Quand je fais ma recherche en double cliquant sur la liste des données de mon formulaire, une fenêtre apparait me demandant de rentrer le nom de la personne.
    Ne pourrais-je pas faire en sorte que qd je double clic sur la ligne comprenant le nom, prénom, ...ca m'ouvre automatiquement ma forme (permettant de modifier des données) sans avoir besoin d'entrer le nom?

    Je suppose qu'il faut modifier qqch dans cette ligne mais quoi ca c'est la question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.OpenForm "AutoUtilisateurs", acNormal, , "[Nom] = " & Me.listresults1
    Je vous relink mon code modifié depuis tout à l'heure:

    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
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    Option Compare Database
     
    Private Sub chknom_Click()
     
    If Me.chknom Then
        Me.txtrechnom.Visible = False
    Else
        Me.txtrechnom.Visible = True
    End If
     
    RefreshQuery
     
    End Sub
     
    Private Sub chkprenom_Click()
     
    If Me.chkprenom Then
        Me.txtrechprenom.Visible = False
    Else
        Me.txtrechprenom.Visible = True
    End If
     
    RefreshQuery
     
    End Sub
     
    Private Sub chknum_Click()
     
    If Me.chknum Then
        Me.txtrechnum.Visible = False
    Else
        Me.txtrechnum.Visible = True
    End If
     
    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 "cmb"
                ctl.Visible = False
     
        End Select
    Next ctl
     
     
    Me.listresults1.RowSource = "SELECT Utilisateurs.Nom, Utilisateurs.Prenom, Utilisateurs.NumSegula, Utilisateurs.[Mot de passe] FROM Utilisateurs;"
    Me.listresults1.Requery
     
    End Sub
     
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT Nom, Prenom, NumSegula FROM Utilisateurs Where Utilisateurs!Nom is not null "
     
    If Not Me.chknom Then
        SQL = SQL & "And Utilisateurs!Nom like '*" & Me.txtrechnom & "*' "
    End If
     
    If Not Me.chkprenom Then
        SQL = SQL & "And Utilisateurs!Prenom like '*" & Me.txtrechprenom & "*' "
    End If
     
    If Not Me.chknum Then
        SQL = SQL & "And Utilisateurs!NumSegula like '*" & Me.txtrechnum & "*' "
    End If
     
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.listresults1.RowSource = SQL
    Me.listresults1.Requery
     
     
    End Sub
     
    Private Sub listResults1_DblClick(Cancel As Integer)
     
    'Controle d'erreur
    On Error GoTo Err_listResults1_DblClick
     
    DoCmd.OpenForm "AutoUtilisateurs", acNormal, , "[Nom] = " & Me.listresults1
     
    Exit_listResults1_DblClick:
      Exit Sub 'Ou Exit Function
     
    'Liste des différentes erreurs se produisant
     
    Err_listResults1_DblClick:
       Select Case Err.Number
          Case 2501
             'OK, erreur 'normale', ne rien faire
          Case 3075
     
          Case Else
             MsgBox "L'erreur " & Err.Number & ", " & err_description & " s'est produite. Merci de faire une copie d'écran et de prévenir le support technique.", vbExclamation
       End Select
     
     
    End Sub
     
    Private Sub txtrechnom_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    End Sub
     
    Private Sub txtrechprenom_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    End Sub
     
    Private Sub txtrechnum_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    End Sub
    Private Sub Quitter_Click()
    On Error GoTo Err_Quitter_Click
     
     
        DoCmd.Quit
     
    Exit_Quitter_Click:
        Exit Sub
     
    Err_Quitter_Click:
        MsgBox Err.Description
        Resume Exit_Quitter_Click
     
    End Sub

Discussions similaires

  1. Problème avec une fonction "recherche de pics"
    Par gantix dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 09/07/2014, 17h57
  2. [A-03] recherche multicritère dans un formulaire
    Par caro2552 dans le forum IHM
    Réponses: 5
    Dernier message: 26/10/2008, 14h35
  3. Problème avec la fonction rechercher sur le forum
    Par tornade69 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 3
    Dernier message: 27/09/2008, 01h31
  4. Réponses: 2
    Dernier message: 24/09/2008, 19h14
  5. Problème avec la fonction rechdom dans un état
    Par ustilago dans le forum IHM
    Réponses: 4
    Dernier message: 30/08/2006, 16h06

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