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

Access Discussion :

plusieurs critères dans champ form -> trie données pour é


Sujet :

Access

  1. #1
    Membre actif Avatar de moicats
    Inscrit en
    Mars 2006
    Messages
    299
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 299
    Points : 200
    Points
    200
    Par défaut plusieurs critères dans champ form -> trie données pour é
    Bonjour,

    Je souhaite afficher une liste d'information dans un état en fonction de critères précédement saisi par l'utilisateur.

    Je part d'une table d'information dont un des champs est "service".
    Je donne la possibilité à l'utilisateur de créer une liste des informations en fonction du ou des services qu'il souhaite, le tout à l'aide d'un formulaire.

    Dans l'état en source j'ai ecrit une requéte incluant comme critére de choix de service: le champ du formulaire comprenant le choix de l'utilisateur.
    Lorsque l'utilisateur choisi un seul service ça marche trés bien, mais s'il souhaite en selectionner plusieur la requete ne comprend pas : "service1" ou "service2".

    y a t'il une formulation specifique, ou bien une méthode pour que ça fonctionne.

    merci d'avance pour votre aide.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Sans entrer dans le détail, la clause WHERE de ta requète doit être

    [moChampService]=Service1 or [monChampService]=Service2

    mais pour t'en dire plus il faudrait que tu mettes le code de ta requète de sélection et il va sans doute falloir faire un peu de VBA pour y arriver.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre actif Avatar de moicats
    Inscrit en
    Mars 2006
    Messages
    299
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 299
    Points : 200
    Points
    200
    Par défaut
    oui effectivement, c'est ce que je viens de constater aussi, mais le problème est que "service1" et "service2" ne sont pas écrit en dur dans la requéte de l'état, ils sont nommés de façon aléatoire par l'utilisateur.

    en fait j'ai un formulaire où il choisi les services dont il desire la liste (un ou plusieurs services).

    ensuite il valide, et je veux afficher la liste des infos de la table correspondant aux services selectionnés.

    je suis en train d'essayer d'écrire la requete dans un code vba, pour l'appliquer à la source de l'état.

    mais je débute et j'ai encore un peu de mal à trouver les bonne commandes.
    de plus je ne sais pas si cela peu fonctionner.

    pensez vous que cela puisse être une solution?

  4. #4
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    slt,

    il faut faire pointer la requête vers les contrôles du formulaire

    tu fais bouton droit dans la zone <critères>, puis <Créé> et tu vas chercher la zone du formulaire

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Arkham46, si j'ai compris que ses champs étaient dans une liste donc il n'y a pas de zone de saisie associé mais un seul champ liste avec les noms des champs donc je ne pense pas que ta solution puisse s'appliquer.

    A part cela, moicats, je te conseille de regarder le param Where ou Filter de DoCmd.OpenReport.

    Il est assez facile de générer une string condition et de la passer en paramêtre au moment de l'ouverture.

    Donc, tu fais un rapport complet qui affiche toutes les données sans distinction puis au moment de l'ouverture tu utilise Where ou Filter pour réduire à ce dont tu as besoin. Ca simplfie grandement le développement.

    Personnelement je préfère Where.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Citation Envoyé par marot_r
    Arkham46, si j'ai compris que ses champs étaient dans une liste donc il n'y a pas de zone de saisie associé mais un seul champ liste avec les noms des champs donc je ne pense pas que ta solution puisse s'appliquer.

    A part cela, moicats, je te conseille de regarder le param Where ou Filter de DoCmd.OpenReport.

    Il est assez facile de générer une string condition et de la passer en paramêtre au moment de l'ouverture.

    Donc, tu fais un rapport complet qui affiche toutes les données sans distinction puis au moment de l'ouverture tu utilise Where ou Filter pour réduire à ce dont tu as besoin. Ca simplfie grandement le développement.

    Personnelement je préfère Where.

    A+
    J'ai rien compris!

  7. #7
    Membre actif Avatar de moicats
    Inscrit en
    Mars 2006
    Messages
    299
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 299
    Points : 200
    Points
    200
    Par défaut
    bonjour,

    merci pour les réponses, effectivement en mettant la conditionde trie dans DoCmd.OpenReport paramétre Where ça fonctionne.

    je n'ai qu'a composer la condition en fonction des désires de l'utilisateur, et ça fonctionne bien sur une requete ecrite dans l'état.

    mais j'ai un autre souci qui se présente: Les Doublons d'informations
    en effet ma requete se porte sur 2 tables et si je fait une requete simple appelant toutes les infos j'en ai certaine en double.

    j'ai essayé avec "Group BY" (dans la requete de l'état) mais du coup je suis obligé de supprimer certain champs qui me servaient à trier et du coup ça ne marche plus.

    avez vous une idée pour permettre de faire le trie et eviter les doublon en plus?
    merci d'avance pour votre aide.

  8. #8
    Membre actif Avatar de moicats
    Inscrit en
    Mars 2006
    Messages
    299
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 299
    Points : 200
    Points
    200
    Par défaut
    rebonjour,

    peut etre faut-il que je crée ma requete dans vba et que j'ouvre ensuite l'état.

    C'est un domaine que je ne maitrise pas du tout, je ne sais pas si c'est faisable, mais avec la requete en vba je pourrait plus facilement la conditionné aux exigences de l'utilisateur, enfin je pense.

    ensuite faut il encore que j'ouvre l'état en fonction de ces données.

    là sur ce point je suis vraiment perdu, je fait donc appelle aux grandes connaissances que peut regrouper un tel forum pour m'aider dans ma quete de solutions.

    merci d'avance pour votre aide à tous.

  9. #9
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Tu n'est pas obligé de supprimer les champs pour lesquels tu utilises des critères mais simplement ne pas les afficher.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  10. #10
    Membre actif Avatar de moicats
    Inscrit en
    Mars 2006
    Messages
    299
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 299
    Points : 200
    Points
    200
    Par défaut
    bonjour,
    je pense ne pas avoir été tres claire dans mes explications, donc je vais essayer de m'exprimer mieux et de façon plus precise.

    j'ai une base de donnée, avec 2 tables:
    une d'informations sur les entreprises = Fournisseur
    une autre attachant ses entreprises à différents service =Fournisseur par service

    j'ai un état qui donne une liste d'entreprise avec leur adresse = Etiquette test.
    je souhaite que l'utilisateur puisse choisir lui même le contenue de cette liste
    pour ça j'ai créé un formulaire = choix etiquette , sur lequel l'utilisateur à l'aide de case à coché selectionne les services dont ils veut voir les entreprises.

    voici la derniere version de mes codes:
    dans la donnée source de l'état:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT Fournisseurs.Nom, Fournisseurs.Adresse, Fournisseurs.[Code postal], Fournisseurs.Commune
    FROM Fournisseurs LEFT JOIN [Fournisseur par service] ON Fournisseurs.Référence = [Fournisseur par service].Référence
    WHERE (((Fournisseurs.principal) Is Not Null Or (Fournisseurs.principal) Is Null) AND (([Fournisseur par service].SERVICE) Is Not Null Or ([Fournisseur par service].SERVICE) Is Null) AND (([Fournisseur par service].RUBRIQUE) Is Not Null Or ([Fournisseur par service].RUBRIQUE) Is Null) AND (([Fournisseur par service].Homologation) Is Not Null Or ([Fournisseur par service].Homologation) Is Null))
    GROUP BY Fournisseurs.Nom, Fournisseurs.Adresse, Fournisseurs.[Code postal], Fournisseurs.Commune
    ORDER BY Fournisseurs.Nom;
    j'ai du utiliser un Group BY pour éviter les doublons d'entreprises lié à plusieur services.
    j'ai rajouté un fonction Where (null et pas null) sur les critére dont j'ai besoin pour le trie mais que je ne veux pas regroupé, sans cela je ne trouvais plus les champs pour le trie.

    dans la macro lié au bouton de validation des choix:
    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
    Private Sub valid_Click()
    'initialisation variable
    services = ""
     
    'verif trie par service
    If Me![serv].Value = False Then
     services = "SERVICE=""aci"" Or SERVICE=""col"" Or SERVICE=""dev"" Or SERVICE=""elv"" Or SERVICE=""saq"""
    Else
     'verif si aci selectionné
     If Me![serv_aci].Value = True Then
      services = "SERVICE=""aci"""
     End If
     'verif si col selectionné
     If Me![serv_col].Value = True Then
       If services = "" Then
        services = "SERVICE=""col"""
       Else
        services = services & "or SERVICE=""col"""
       End If
     End If
    End If
     
     
    'ouverture de l'état
    On Error GoTo Err_valid_Click
     
        Dim stDocName As String
        Dim stLinkCriteria As String
     
        stDocName = "ETIQUETTE TEST"
        DoCmd.OpenReport stDocName, acPreview, , services
     
    Exit_valid_Click:
        Exit Sub
     
    Err_valid_Click:
        MsgBox Err.Description
        Resume Exit_valid_Click
     
    End Sub
    actuellement le trie par la macro ne fonctionne plus il m'ouvre une boite de dialogue : "services:"
    avant que je fasse le regroupement cela fonctionnait.

    comment faire? ai-je fait une erreur?
    il doit surement y avoir une solution, mais là j'avoue que j'ai essayé tout ce que je connaissais (je sais c'est pas grand chose)

    merci de votre aide. j'espere avoir été plus claire dans ma demande.

  11. #11
    Membre actif Avatar de moicats
    Inscrit en
    Mars 2006
    Messages
    299
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 299
    Points : 200
    Points
    200
    Par défaut
    Bonjour,

    Je me permet de relancer la discution sur mon problème car j'aimerais vraiment savoir où j'ai fait une erreur.

    Peut être que ce fonctionnement n'est pas possible sous access, je souhaiterais que quelqu'un m'éclaire un peu sur le sujet. Si ce n'est pas réalisable, je voudrais éviter de perdre trop de temps sur ce problème.

    Si vous n'avez pas bien compris quelque chose dans ma demande n'ésitez pas à poser des questions.

    Merci d'avance de votre attention et surtout de vos réponses.

  12. #12
    Membre actif Avatar de moicats
    Inscrit en
    Mars 2006
    Messages
    299
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 299
    Points : 200
    Points
    200
    Par défaut
    Salut,

    Pour ceux que cela interesse, j'ai trouvé une solution à mon problème.

    En fait j'ai remis une requéte sans regroupement dans mon état:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT Fournisseurs.Nom, Fournisseurs.Adresse, Fournisseurs.[Code postal], Fournisseurs.Commune, Fournisseurs.principal, [Fournisseur par service].SERVICE, [Fournisseur par service].RUBRIQUE, [Fournisseur par service].Homologation
    FROM Fournisseurs LEFT JOIN [Fournisseur par service] ON Fournisseurs.Référence = [Fournisseur par service].Référence
    ORDER BY Fournisseurs.Nom;
    Je n'ai rien changé à la macro lié au bouton d'ouverture de l'état (voir plus haut).

    Et là en apparence ça fonctionne l'utilisateur selectionne les services désirés sur son formulaire à l'aide de case à cocher et la liste des entreprises liées à ces services s'affiche.

    Mais certains apparaissaient en double (car rattachés à plusieur services de l'entreprise).

    Alors pour eviter ce problème directement dans l'état j'ai fait un "trier et grouper" par le nom de l'entreprise avec un entête de groupe.
    J'ai mis mes champs dans l'entête du groupe et j'ai réduis un maximum la taille de mon détail (où je n'ai rien mis) pour concerver ma mise en page.

    Et visiblement ça marche

    Pour cette solution je ME remercie beaucoup, pour une débutante je trouve ça pas trop mal.

  13. #13
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Citation Envoyé par moicats
    Pour cette solution je ME remercie beaucoup, pour une débutante je trouve ça pas trop mal. :bravo:
    Felicitation, rien de tel pour acquérir de l'espérience ;-).

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. Critère dans champ calculé dans requête
    Par jakonil dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 24/05/2019, 15h13
  2. Recherche de plusieurs critères dans un recordset
    Par Mariboo dans le forum Access
    Réponses: 13
    Dernier message: 21/05/2017, 12h50
  3. Réponses: 2
    Dernier message: 23/05/2009, 12h54
  4. Envoyer plusieurs critères dans une requête ?
    Par olivierc25 dans le forum Access
    Réponses: 4
    Dernier message: 20/03/2007, 15h13
  5. [MySQL] plusieurs bouton dans 1 form
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/02/2006, 09h40

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