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

IHM Discussion :

requête multiple dans formulaire de recherche multi critère. [Toutes versions]


Sujet :

IHM

  1. #1
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 69
    Points : 48
    Points
    48
    Par défaut requête multiple dans formulaire de recherche multi critère.
    Bonjour, j'utilise le guide de caféine pour mettre un place un formulaire multi critère en place, j'aimerais pouvoir faire en sorte que l'on puisse faire une recherche sur le critère de l'âge, mais dans 3 cas, si l'âge est inférieur à l'âge donné par l'utilisateur dans le champ correspondant, et si l'age est égal au supérieur à l'age donné.

    Le code permettant de faire cette recherche est celui ci:

    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
    Private Sub RefreshQuery()
     Dim SQL As String
     Dim SQLWhere As String
     
     SQL = "SELECT N°CLient,Nom,Prénom,Statut,Nationalité,Localité FROM  Partenaire  Where Partenaire!N°Client <>0"
     
     
     If Not Me.chkNom Then
        SQL = SQL & "And Partenaire!Nom like '" & Me.cmbNom & "*' "
     End If
     If Not Me.chkPrénom Then
        SQL = SQL & "And Partenaire!Prénom like= '" & Me.cmbPrénom & "' "
     End If
     If Not Me.chkNationalité Then
        SQL = SQL & "And Partenaire!Nationalité like '" & Me.cmbNationalité & "' "
     End If
     If Not Me.ChkStatut Then
        SQL = SQL & "And Partenaire!Statut like '" & Me.cmbStatut & "' "
     End If
     If Not Me.chkLocalité Then
        SQL = SQL & " And Partenaire!Localité like= '" & Me.cmbLocalité & "' "
     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
    Les chk sont des champs oui/non, les cmb sont des listes déroulante et lst signifie zone de lise. Ce sont des champ indépendant.

    Je n'ai pas tout les cas de ma recherche encore la, il n'y en a qu'une partie, mais j'aimerais savoir comment je pourrais rajouter cette notion
    de supérieur, d'inférieur, ou d'égal a ce code la. je ne vois pas comment je pourrais le faire, si j'utilisais une requêtes ca irait mais la je lui dit juste ce qu'il va devoir avoir comme requête SQL au final, et puis de mettre cette requête en donnée source de la liste box.

    Ce que je cherche c'est un moyen de lui dire que si la valeur est insérer dans ce champ la, il doit allez voir dans le champ Partenaire!Age et doit sélectionner toute les valeurs inférieures à celle entrée dans le champ txtAgeInférieur.

    Il existe peut être une commande qui se placerait comme like (qui permet dans ce cas de ne pas avoir nécessairement le nom exact entre ce qu'il y a dans le champ du formulaire et dans la base de donnée) et qui me permettrais de faire cette recherche mais je ne vois pas laquelle.

    J'ai également un autre problème, j'ai deux champ pour la ville, dans le cas ou il y aurait deux adresses et je voudrais que lorsque je rentre une valeur dans un champ il teste dans les deux champ afin d'avoir l'ensemble des adresses en une seule recherche et pas devoir tester d'abord si c'est dans localité puis testé si c'est dans localité2.

    J'espère avoir été clair, merci d'avance pour l'aide que vous pourriez m'apporter.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Le plus simple serait d'avoir 2 champs :
    • un champ "Operateur" (texte ou liste déroulante) avec valeur par défaut "="
    • et un champ "Age" (texte) avec valeur par défaut à Null

    ensuite tu peux simplement modifier le code et écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if not isnull(me.age) then
       sql=sql & "and ([NomTaTable]![NomChampAge]" & me.Operateur & me.Age & ")"
    end if
    A+

  3. #3
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 69
    Points : 48
    Points
    48
    Par défaut
    Merci ca fonctionne, il me reste à trouver comment faire pour qu'il fasse ses recherches dans deux champs différents se trouvant dans la même table avec le même champ indépendant qui lui se trouve dans le formulaire.
    il faudrait que j'arrive à donner comme source au champ indépendant les valeurs des deux champs mis en une seule colonne, et que je trouve le code sql correspondant, j'avais essayé de mettre ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        SQL = SQL & "And Partenaire!Localité  like  '" & Me.cmbLocalité & "'" & "And Partenaire!Localité2  like  '" & Me.cmbLocalité & "'"
    Mais ca n'a pas l'air de fonctionner.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Je pense qu'il faut utiliser OR à la place de AND

    Voici un jeu d'enr de test pour illustrer mon propos :

    Enr, Localité, Localité2
    1, Montréal, Montréal
    2, Montréal, Longueuil
    3, Longueuil, Laval
    4, Laval, Montréal

    et Me.cmbLocalité=Montréal

    Avec ta condition actuelle tu vas ramassé seulement l'enr 1

    Je pense que tu veux plutôt obtenir 1, 2 et 4

    si oui, alors voici la syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = SQL & "And (Partenaire!Localité  like  '" & Me.cmbLocalité & "'" & " OR Partenaire!Localité2  like  '" & Me.cmbLocalité & "')"
    Petite remarque d'optimisation Like n'est pas l'oppérateur le plus performant, si tu chercher exactement une chaine ou une valeur utilse plutôt égale (=).

    Je réecriarai ton code comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = SQL & "And (Partenaire!Localité = '" & Me.cmbLocalité & "'" & " OR Partenaire!Localité2 = '" & Me.cmbLocalité & "')"
    Si c'est un nombre il faut enlever les ' autours du nom du champ.

    L'avantage de Like est que tu n'as pas à t'inquiéter de savoir si c'est un nombre ou un texte ou un booléen, access converti tout en texte pour toi.

    A+

  5. #5
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 69
    Points : 48
    Points
    48
    Par défaut
    Merci de la réponse,
    Ca a résolu une partie du problème au moins il fait une recherche, mais il ne fait la recherche que si la valeur recherchée se trouvent dans la première colonne, mais au moins maintenant il fait une recherche, au pire je peux passer par un champ tampon qui aura l'entiereté des valeurs des deux champs, ce qui ne me laisserait qu'un seul champ de recherche et le problème est résolu(avec des requêtes ajout, ou mise à jour je devrais pouvoir le faire) mais je préférerais ne pas avoir a créer de nouveau champ et de requête inutilement, ca surchargerais le programme pour rien.

    Et oui je veux bien avoir quelque chose comme tu le proposes, ces 4 possibilités la.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Avec le OR il ne trouve que si la valeur est renseignée dans la 1ère colonne, j'en suis étonné. As-tu bien mis les parenthèses ?

    Peux-tu poster le code que tu as écrit ?

    A+

  7. #7
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 69
    Points : 48
    Points
    48
    Par défaut
    En retirant la propriété, "limité a la liste"(je l'avais fait, ca a dut se remettre dans mes changements), il me trouve bien les cas se trouvant dans la deuxième colonne, je pensais qu'il n'allait pas parce qu'il ne faisait pas comme tout les autres champs, il ne me faisait pas une présélection quand je tapais, je m'explique, si je met m dans le champ il me sortait la première ville commençant par m, dans mon cas Mons, mais si ca se trouve dans la deuxième colonne, il ne me le faisait pas.
    Le code est celui que tu m'as donnés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If Not Me.chkLocalité Then
    SQL = SQL & " And (Partenaire!Localité='" & Me.cmbLocalité & "'" & " OR Partenaire!Localité2='" & Me.cmbLocalité & "')"
     End If
    En y réfléchissant, au vu que la colonne liée est la première colonne, il est logique qu'il ne le fasse pas, mais j'aimerais qu'il puisse le faire, y a t il un moyen de lier deux colonnes en même temps, afin qu'il fasse cette "présélection" dans les deux colonnes?

    Sinon j'ai un autre problème, j'ai certain champ qui possède des ', comme rue de l'épinal, je ne peux pas faire de recherche ou de traitement dessus, si je me trompe pas, on utilise le ' pour signaler la fin d'une chaîne de caractère, serait ca qui pose problème? Et comment je peux passer outre, j'avais penser utiliser la fonction replace() avant l'opération et après afin de ne plus bloquer, mettre par exemple un´a la place avant la commande Sql=sql ....,
    et un autre qui remettrait une valeur normale mais ca ne fonctionne pas, ou plutot je ne vois pas comment je pourrais mettre ca en place, il faut bien que je stocke les valeurs contenue dans le champ Nom après le travail quelque part, mais à part créer un champ temporaire pour et encore...

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Tu peux renseigner ta liste en faisant une requête Union (il faut la taper directement dans l'éditeur de requête en mode SQL).

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select [Partenaire].[Localité] form [Partenaire] as Localite
    union select [Partenaire].[Localité2] form [Partenaire] as Localite
    order by Localite;

    Tu as là un léger problème de structure de BD.

    Normalement il faudrait que tu ai :

    Table Partenaire :
    ClefPartenaire
    Autres Infos

    Table Localite :
    ClefLocalite
    Nom
    Autres Infos

    Table AssPartenaireLocalite :
    ClefPartenaire
    ClefLocalite

    Les champs en gras matérialise la clef primaire

    Comme cela tu peux présenter la liste des localités indépendament du partenaire.

    Tu peux avoir un nombre presqu'infini de localités par partenaire. Tu n'as plus besoin de testé 2 champs mais cela complique un peu l'écriture de ta requête de recherche. Un métode simple est d'accepter que si il y a plusieurs localités pour un même partenaire, ce partenaire soit affiché autant de fois qu'il y a de localité.

    A+

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Pour le problème de séparateur tu as 2 solutions :
    1. Mettre un guillement (") au lieu de l'apostrophe (') comme délimiteur de chaîne.
    2. Faire replace(MaVariable,"'","''") pour doubler les apostrophes (') quand elles sont dans MaVariable. Une double apostrophe (') signale que tu a une appostrophe et qu'elle ne doit pas être vue comme un délimiteur de chaîne.

    Personnellement je préfère la 1ère solution qui a l'avantage d'être cohérente avec le code VBA.

  10. #10
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 69
    Points : 48
    Points
    48
    Par défaut
    merci la requète union fonction meme si je l'ai un peu modifiée, il refusait de me comprendre le order by, je ne sais pas pourquoi:
    Code Sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Partenaire.Localité FROM Partenaire Union SELECT Partenaire.Localité2 From Partenaire;
    pour le problème de conception, oui et non, j'avais commencé à faire cette base comme tu le proposes, mais j'aurais du travailler avec des sous formulaire et des sous-état, le problème est que dans l'entreprise, ils ne sont pas organisé du tout, et il n'y a pas d'informaticien en permanence (je fais juste mon stage de fin d'étude), déjà qu'avec seulement deux tables le risque d'erreur que je crains de voir poindre dans leur modification de la base de donnée, si en plus je complexifie plus la gestion de la base (travail avec sous formulaire et sous état), je crains que la base ne fera pas long feu, ok c'est pas nickel ainsi, et ca m'oblige a chipoter beaucoup pour faire ce que j'aurais pu faire plus facilement en gérant mieux les relations, mais à côté de ca ca simplifie pour eux si jamais il doive modifier quelque chose. La base de donnée ne sera pas énorme en terme de qualité (1000 2000 entrée c'est pas encore énorme).
    J'ai tord de penser ainsi? Ne pas séparer convenablement risque de m'apporter de gros problèmes? Je n'ai rien trouvé l'indiquant et ca fait quelque temps que je l'utilise pour mes tests et une copie où un membre de l'entreprise rentre des informations sans rencontrer de problème.

    Je ne vois pas comment modifier le délimiteur dans ta première solution, j'ai essayé de remplacer dans la ligne Sql= slq ..., les ' par " , mais ca ne fonctionne pas.

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Pour la conception c'est à toi de voir, si tu as un nombre maximum et connu de localités tu peux très bien vivre avec. Évidement dés que tu vas vouloir dépasser ce nombre, cela peut avoir des conséquences importantes sur ta BD c'est pour cela que je te l'ai signalé.

    Mais un point important qu'une de mes profs m'a appris lorsque j'ai débuté en informatique :
    Qu'est ce qu'un BON programme informatique ?
    C'est un programme qui répond aux besoins du CLIENT !
    Donc, si tu réallises une chef-d'oeuvre de programmation et de conception mais que tu ne satisfait pas les besoins de ton client ... tu as raté ton coup :-). Ceci ne veut pas dire qu'il faut faire du travail baclé mais que parfois il faut savoir enfreindre les 'règles' de conception en étant conscient des conséquences. Conséquences qu'il faut parfois exposer au client car au final c'est lui qui va payer pour.

    Pour le replace il faut substituer 2 appostrophes ("''") à une apostrophe ("'") si tu trouves que ce n'est pas très lisible tu pourrais mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Replace(MaVariable,chr(39),chr(39) & chr(39))
    A+

  12. #12
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 69
    Points : 48
    Points
    48
    Par défaut
    bonjour, et merci pour la réponse, j'ai encore deux petit "problèmes".

    J'ai une date d'entrée et une date de sortie pour les stagiaires, j'aimerais faire une recherche en ayant comme critère qu'on se trouve entre la date d'entrée et la date de sortie (la date de sortie est rentrée manuellement par l'utilisateur à la fin de la formation du stagiaire, il se peut donc qu'elle soit vide), si cette date de sortie est vide alors tester avec la date d'aujourd'hui. Ainsi je peux voir les stagiaires en cours durant la période dont l'utilisateur a donné la date d'entrée comme paramètre. Pour la date de sortie, il va y en avoir plusieurs, la est aussi une difficulté, la date de sortie qu'access devra choisir pour son test c'est la première qui apparaîtra après la date d'entrée. La formation dure 18 mois en général, tout les stagiaires finissent en même temps normalement.

    J'ai essayé de mettre ceci mais ca ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If Not Me.chkDateEntrée Then
        SQL = SQL & " And infoStagiaire![Date d'entrée] =  ( infoStagiaire.[Date d'entrée]  < # Me.txtDateEntrée # <Now())"
         End If
    J'envoie la valeur à la fonction après la mise à jour du champ texte, mais il ne m'affiche aucun résultat, je ne vois pas comment je pourrais faire autrement, je cherche aussi comment modifier dynamiquement le now final, si il y a quelque chose dans date de sortie, alors c'est date de sortie sinon c'est now, j'avais pensé faire quelque chose comme ca avant, mais vu que l'autre problème ne fonctionne pas vraiment je ne sais pas si je raisonne bien ou pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If Not Me.chkDateEntrée Then
        SQL = SQL & " And infoStagiaire![Date d'entrée] =  ( infoStagiaire.[Date d'entrée]  < # Me.txtDateEntrée # < iif (est null(infostagiaire![Date de sortie],Now(),InfoStagiaire![Date de sortie])"
         End If
    Si j'ai bien compris la fonction iif, si la condition est vraie, alors c'est now qui sera pris, sinon ce sera le champ Date de sortie. Mais j'ai peur que la condion est trop vague, et qu'il ne trouverait pas.

    Le deuxième point que je voudrais mettre en place est une mise à jour complète des champs se trouvant dans la list box selon certain critère, si je sélectionne tout les stagiaires, ayant commencé leur stage durant tel période, et que je veux par exemple mettre la date de fin pour tous en même temps, ou cocher une case oui/non, je sais qu'il faut passer par une requête de mise à jour, mais de la j'ai deux problème.

    Le premier est comment lui dire que les enregistrements à modifier seront ceux se trouvant dans la liste box, peut être utilisé quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       DoCmd.OpenForm "Partenaire", acNormal, , "[N°Client] = " & Me.lstResults
    c'est le code que j'utilise pour ouvrir un formulaire en filtrant l'enregistrement sur lequel j'ai double cliqué, mais la ca ne reprend qu'un seul et je voudrais l'ensemble.

    Le second est que je ne sais pas comment lui dire comment envoyer tel paramètre à tel endroit, j'avais pensé mettre un msgbox, avec plusieurs possibilité et selon la possibilité choisie, afficher tel ou tel champ et lié ce champ à la requête (si je clic sur le bouton trimestriel, c'est une case oui/non qui apparaîtrait et si on clic, pour toute les personnes sélectionnée, le champ trimestriel passerait à -1 ou à 0 selon que l'on veut ou non leur envoyer).


    J'espère avoir été clair, merci d'avance

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Réponse pour la sélection des dates :

    tu peux utiliser BETWEEN comme oppérateur ou AND

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    infoStagiaire.[Date d'entrée] between Me.txtDateEntrée and Now()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    infoStagiaire.[Date d'entrée] =< Me.txtDateEntrée and infoStagiaire.[Date d'entrée] =< Now()
    On ne peut pas comme en mathématique écrire A<B<C il faut écrire A<B et B<C.

    Pour la syntaxe je t'invite à faire une requête de test dans l'éditeur de requête. Une fois que la requête donne ce que tu veux, tu affiches le SQL correspondant et cela t'évite d'avoir à deviner comment il faut écrire ce dont tu as besoin.

    Réponse à la question des dates manquantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iif(isNull([TonChampDate]),Now(),[TonChampDate])
    Pour les mises à jour
    Là j'ai vraiment pas tout suivi donc ma réponse opeut être à côté de la plaque, mais une méthode simple quand tu veux faire une mise à jour sur un paquets d'enregistrement est d'utiliser une requête Mise à Jour. Là encore je t'invite à utiliser l'éditeur de requête d'access qui te permet facilement de créer des requêtes de MAJ et de faire ensuite affiché le SQL corresponsdant.

    Juste au cas ou tu ne l'aurais pas remarqué dans l'éditeur de requête, sensiblement au milieu il y a un bouton qui te permets de choisir le type de requête que tu veux.

    Pour le filtrage des données à l'ouverture d'un formulaire :
    tu peux mettre la condition que tu veux par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "Partenaire", acNormal, , "[Nom] like """ & Me.PremiereLettre & "*"""
    va ouvrir le formulaire en affichant tous les enregistrements dont le nom commence par la première lettre passée en paramêtre.

    Là encore une solution simple est de faire une requête de sélection puis de faire afficher le SQL et de regarder la condition WHERE qui va te donner le texte que tu dois utiliser pour faire ton filtre à l'ouverture du formulaire.

    A+

  14. #14
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 69
    Points : 48
    Points
    48
    Par défaut
    désolé pour la réponse tardive j'ai eu pas mal de problème à résoudre, enfin bref, pour la sélection de date, j'ai essayé de mettre ce que tu me proposais, mais ca ne fonctionne pas, il m'affiche un message me demandant de lui donner les paramètre au lieu de me laisser taper la date, j'ai également essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      SQL = SQL & " And infoStagiaire.[Date d'entrée]= DateAdd(m,3,Me.txtDateEntrée) or DateAdd(m,-3,Me.txtDateEntrée)
    Vu qu'on n'accepte pas un stagiaire plus de 3 moi après le début de la formation, je me suis dit que je pouvais faire la requête en me basant sur ce critère mais ca ne fonctionne pas. Il me demande toujours les paramètre si ils sont bon il n'y a pas de problème mais ce n'est pas ce que je recherche à faire.

    Pour la mise à jour complète, j'ai trouvé une solution partielle, je lui dit sur le clic d'un bouton de lancer la requête quand le N°Client(clé primaire) se trouve dans la lstRésults, il ne me met à jour que le client séléctionné, mais pas l'ensemble, faire la sélection selon un critère est difficile (au point de vue que ce même critère change à chaque fois), je ne sais pas comment lui dire qu'il faut prendre tout les champs sélectionné. Peut être peut on faire comme j'ai fait pour le formulaire recherche, et sélectionné les critères selon les champ décocher

    Il me reste aussi à trouver le moyen de sélectionner une date selon un certain intervalle (ici le mieux serait peut être de faire 3 mois avant et 3 mois après), j'ai essayé aussi de stocker dans une variable temp le test, et de mettre dans la requète sql le résultat mais ca n'a rien changé, j'ai également essayé de faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      SQL = SQL & " And infoStagiaire.[Date d'entrée]= #DateAdd(m, 3, Me.txtDateEntrée)#"
    , vu que c'était une date, j'avais lu quelque part que c'était ainsi qu'on devait les entouré, mais rien n'y fait.

    Merci pour tes réponses que tu m'as déjà données, ca m'a bien aidé.

  15. #15
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Salut,

    si tu essayes de deviner la bonne syntaxe SQL et on risque d'y passer quelques années :o) surtout que je ne suis pas tout le temps sur le forum.

    Je te suggère de faire ta requête, manuellement dans l'éditeur de requête de Access. Une fois qu'elle est au point, tu fais afficher le SQL et tu l'intégres dans ton code. Cette méthode va être 100 fois plus rapide.

    Pour les dates, en access il n'est pas indispensable de les délimiter par des # mais si tu le souhaites il faut procéder ainsi:

    "#" & Format([iciTaDate],"yyyy-mm-dd") & "#"

    donc si tu mets cela dans une chaîne il faut mettre :

    ""#"" & Format([iciTaDate],""yyyy-mm-dd"") & ""#""

    A+

  16. #16
    Nouveau Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    bonjour, je travail avec VBA sur Access 2003 et je veux accéder au BD access sur lequel je travail, en fait je veux se connecter a la BD a fin de récupérer des donnes mais j'arrive pas, je c'est pas pour quoi mes requêtes ne marche pas?
    je dois me connecter en mode DAO ?
    voila j'ai essai avec tout ca mais sa marche pas, merci de votre aide
    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
    Private Sub Modifiable7_GotFocus()
    Dim oDb As Database
    Dim oRS As DAO.Recordset
    Dim strprojet As String
    Dim strSQL As String
     
    Set oDb = CurrentDb
    strSQL = "SELECT Projet.[noprojet], Projet.[projet] FROM [Projet];"
     
    Set oRS = oDb.OpenRecordset(strSQL, dbOpenDynaset)
    '_______________________________ voila pour quoi cette partie ne marche pas ( avant la ligne ?? ) 
     
     
    '** reinitialiser le contenu de modifiable7
    Me.Modifiable7.Requery
    'Set oRS = oDb.OpenRecordset(strSQL, , , dbPessimistic)
     
    If IsNull(Me.Modifiable2) = False And IsNull(Me.Modifiable4) = False Then
     
    'strSQL = "SELECT Projet.noprojet, Projet.projet FROM OEM INNER JOIN ([Client direct] INNER JOIN Projet ON [Client direct].noclientdirect=Projet.noclientdirect) ON OEM.nooem=Projet.nooem WHERE (((OEM.oem) Like Formulaies!Formulaire1!Modifiable4) Or (([Client direct].clientdirect) Like Formulaies!Formulaire1!Modifiable2));"
    'Set oRS = CurrentDb.OpenRecordset(strSQL, , , dbPessimistic)
    'strSQL = "SELECT Projet.noprojet, Projet.projet FROM Projet;"
    'Set oRS = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
    'DoCmd.RunSQL (strSQL)
     If (oRS.RecordCount) <> 0 Then
     'MsgBox strSQL
     MsgBox strSQL
      'Me.Modifiable7.Recordset.strSQL
      'Me.Modifiable7.AddItem (strSQL)
     
     
     
     End If
     
     
     
     
    '---------
    'stSql = "SELECT * FROM [Switchboard Items]"
     '   stSql = stSql & " WHERE [ItemNumber] > 0 AND [SwitchboardID]=" & Me![SwitchboardID]
    '    stSql = stSql & " ORDER BY [ItemNumber];"
    '    Set rs = CreateObject("ADODB.Recordset")
    '    rs.Open stSql, con, 1   ' 1 = adOpenKeyset
    '_____________________
     
    ' strprojet = "'" & Me!MotRecherche & "'"
    '        strSQL = "SELECT Champ1, Champ2, Champ3, [N°] FROM Table1"
    '        Set oRS = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
     '       With oRS
      '          .FindFirst "[Champ1]= " & strQuoiDonc
      '          If .NoMatch Then
    '                MsgBox "Désolé, il n'y a pas de correspondance...", vbExclamation
     '           Else
     '               strSQL = strSQL & vbCrLf & "WHERE [Champ1]= " & strQuoiDonc
    '                Me.RecordSource = strSQL
    '            End If
    '            .Close
        End If
        'Set oRS = Nothing
     
    '-------------
    End Sub

  17. #17
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 69
    Points : 48
    Points
    48
    Par défaut
    merci marot pour l'aide, j'avais essayé mais rien ne fonctionnait, j'ai "retourné" le problème dans tout les sens, et finalement j'avais abandonné, et fait un autre formulaire a coté se chargeant que de ca, une simple requête.
    Quand ca a fonctionné j'ai eu envie d'essayer de l'adapté pour l'autre formulaire, et j'ai finalement réussi, l'erreur était bête mais m'a fait tourné en rond pendant longtemps.

    Pour ton problème ABCHA, j'ai pas vraiment regardé et préfère laisser ca à des gens s'y connaissant plus que moi, mais si tu comptes avoir des réponses, le mieux est de créer un nouveau post.

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 04/03/2013, 02h20
  2. Réponses: 3
    Dernier message: 31/05/2011, 18h25
  3. Formulaire de recherche multi critères
    Par tomas dans le forum Access
    Réponses: 6
    Dernier message: 24/08/2006, 14h57
  4. Formulaire de recherche multi-critère
    Par Bolton8ox dans le forum Access
    Réponses: 1
    Dernier message: 24/07/2006, 19h40
  5. Réponses: 6
    Dernier message: 28/06/2006, 15h01

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