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 :

Critère de sélection [AC-2007]


Sujet :

Access

  1. #1
    Membre habitué

    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2014
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2014
    Messages : 373
    Points : 150
    Points
    150
    Billets dans le blog
    1
    Par défaut Critère de sélection
    Bonjour le Forum
    Bonnes fêtes à tous
    Je reviens vers vous car j'ai un soucis dans le critère de sélection à l'aide d'un champ de sélection dans un formulaire.
    Je m'explique: j'ai créée une table Depense avec 4 champs qui sont Date_Jour - Mois - Benef et montant.
    Le but est de vouloir effectuer une sélection des dépense dans le Champ Mois.
    Pour ce faire, j'ai créée le champs CboMois dans le formulaire Selection avec lequel je choisis le mois considéré. Dans ce formulaire j'ai placé le sous-formulaire Selection_Depense qui renvoie les données sélectionnées.
    Mon soucis est lorsque je sélectionne le mois de Janvier soit le 1 le résultat me donne le mois 1 et le mois 11. Il en est de même pour le 2 qui renvoie 2 et 12. Mais si je sélectionne le 11 ou le 12, la sélectionne s'opère bien sans renvoyer le 1 ou le 2.
    La sélection s'effectue très bien avec les autres mois soit 3-4-5 Etc.
    J'ai essayé tous les formats Texte Numérique simple ou en passant par une table spécifique Mois, mais rien n'y fait.
    Si quelqu'un à une idée du phénomène pour éclairer ma lanterne, je l'en remercie d'avance.
    J'ai créée un petit fichier d'exemple que je tiens à votre disposition.
    Cordialement
    Passer de bonnes fêtes de fin d'année

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 760
    Points : 14 795
    Points
    14 795
    Par défaut
    Bonjour,
    peux-tu montrer le code que tu utilises pour la sélection ?
    A mon avis, d'après ce que tu décris, tu dois utiliser LIKE pour comparer les résultats car LIKE 1* te renvoie 1, 10 et 11 ; LIKE *2 te renvoie 2 et 12.

    Essaie déjà de remplacer LIKE par =

  3. #3
    Membre habitué

    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2014
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2014
    Messages : 373
    Points : 150
    Points
    150
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    Bonjour,
    peux-tu montrer le code que tu utilises pour la sélection ?
    A mon avis, d'après ce que tu décris, tu dois utiliser LIKE pour comparer les résultats car LIKE 1* te renvoie 1, 10 et 11 ; LIKE *2 te renvoie 2 et 12.

    Essaie déjà de remplacer LIKE par =
    Bonjour tee_grandbois
    Merci pour ta réponse rapide.
    j'ai solutionné mon problème, mais je n'ai pas compris le phénomène du 1 et 11 et du 2 et 12. Je vais te joindre le fichier en question.
    La solution que j'ai trouvée est dans le format du champ Mois, au lieu de travailler avec les chiffres 1 - 2 etc des Mois, je fonctionne avec les lettres, soit janvier, février etc et tout fonctionne.
    Je voudrais néanmoins comprendre.
    Je me dépatouille pas trop mal, mais ne suis pas un expert.
    Merci et passe une bonne fin d'année.
    Cordialement
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 760
    Points : 14 795
    Points
    14 795
    Par défaut
    Bonsoir,
    tu n'as pas remplacé LIKE (COMME en français) par = comme je te l'ai suggéré, c'est pour cela que tu avais tous les mois finissant par 1 et par 2 dans la requête Select_depense :
    pour avoir les mois finissant par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Comme "*" & [Formulaires]![Selection]![CboMois]
    pour avoir le mois sélectionné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = [Formulaires]![Selection]![CboMois]
    tu pouvais aussi utiliser la propriété Champs pères / Champs fils du sous-formulaire ( dans ce cas il faut enlever l'instruction de sélection sur le mois dans la requête Select_Depense.
    Pièce jointe 230870
    D'autre part je ne comprend pas pourquoi tu n'utilises pas directement le mois de ton champ Date_Jour car Mois([Date_Jour]) = [Mois]. Tu peux même l'appeler Mois si tu veux. Ce qui fait que ton champs Mois de ta table devient inutile.
    L'inconvénient de ne pas utiliser LIKE, c'est que ton sous-formulaire sera vide à l'ouverture, ce qui n'est pas le cas actuellement.
    Autre chose, tu fais un regroupement de tous les champs dans la requête du sous-formulaire : à mon avis il faut faire une somme des montants.

  5. #5
    Membre habitué

    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2014
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2014
    Messages : 373
    Points : 150
    Points
    150
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    Bonsoir,
    tu n'as pas remplacé LIKE (COMME en français) par = comme je te l'ai suggéré, c'est pour cela que tu avais tous les mois finissant par 1 et par 2 dans la requête Select_depense :
    pour avoir les mois finissant par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Comme "*" & [Formulaires]![Selection]![CboMois]
    pour avoir le mois sélectionné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = [Formulaires]![Selection]![CboMois]
    tu pouvais aussi utiliser la propriété Champs pères / Champs fils du sous-formulaire ( dans ce cas il faut enlever l'instruction de sélection sur le mois dans la requête Select_Depense.
    Pièce jointe 230870
    D'autre part je ne comprend pas pourquoi tu n'utilises pas directement le mois de ton champ Date_Jour car Mois([Date_Jour]) = [Mois]. Tu peux même l'appeler Mois si tu veux. Ce qui fait que ton champs Mois de ta table devient inutile.
    L'inconvénient de ne pas utiliser LIKE, c'est que ton sous-formulaire sera vide à l'ouverture, ce qui n'est pas le cas actuellement.
    Autre chose, tu fais un regroupement de tous les champs dans la requête du sous-formulaire : à mon avis il faut faire une somme des montants.
    Re tee_grandbois
    Merci pour tes éclaircissements, j'en prends bonnes notes.
    J'utilisais la fonction critères de sélections multiples et une personne sur le forum m'avais glisser cette formule comme"*" & formulaire...... que j'avais trouvée intéressante. Mais le problème est que mon savoir est quand même limité par rapport à des experts comme vous. De ce fait je bloque quelques peu sur des histoires futiles et je ne maîtrise pas les subtilités d'access.
    En ce qui concerne l'utilisation du regroupement c'est pour ne pas avoir une donnée vide dans le résultat. Il y a peut être une autre façon de faire, mais je ne la connais pas.
    Pour ce qui concerne le sous formulaire, je veux qu'apparaissent toutes les données à l'ouverture du formulaire de sélection. C'est pourquoi je ne veux pas faire de somme de montants. Je fais ce calcul après sélection.
    le fichier que j'ai joins ne représente qu'un champ de Sélection Mois, mais dans mon vrai fichier j'ai au total 7 champs de critères de sélection. J'ai essayé le signe = au lieu de Comme"*" et effectivement cela rend le sous formulaire vide de toutes données et c'est ce que je ne veux pas, et effectivement le tri se fait correctement sur le chiffre sélectionner.
    Je vais étudier ton raisonnement, et cela m'apporte un savoir supplémentaire et je t'en remercie encore.
    Je pense que tu as solutionner mon soucis
    Je te souhaite une bonne année 2017.
    Cordialement
    En ce qui concerne l'utilisation de Père et Fils, je l'utilisais dans d'autres formulaire.

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 760
    Points : 14 795
    Points
    14 795
    Par défaut
    Pour ce qui concerne le sous formulaire, je veux qu'apparaissent toutes les données à l'ouverture du formulaire de sélection.
    dans ce cas tu peux laisser Like mais tu dois formater ton champ avec "00" : dans la requête Select_Depense renommer le contrôle Mois en Mois_depense et modifier celle de la zone de liste comme ceci :
    Pièce jointe 230893

  7. #7
    Membre habitué

    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2014
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2014
    Messages : 373
    Points : 150
    Points
    150
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    dans ce cas tu peux laisser Like mais tu dois formater ton champ avec "00" : dans la requête Select_Depense renommer le contrôle Mois en Mois_depense et modifier celle de la zone de liste comme ceci :
    Pièce jointe 230893
    Re
    Tu es vraiment génial de t'occuper de moi de la sorte. Cela fait plaisir d'avoir des Pro sur lesquels nous pouvons compter.
    ceci dit je prends notes que j'enregistre immédiatement pour un prochain fichier car j'ai déjà modifié tous les mois chiffrés en alphanumérique et je ne veux pas tout recommencer dans l'immédiat. Je le ferai, probablement dans les jours à venir.
    J'ai compris le sens de renommer le champs Mois en Mois_XXX de sorte qu'access face la différence avec son écriture Mois Année et Date. je pense que j'ai juste dans cette réflexion !
    J'ai apporté tes modifications dans ce bout de fichier et tout fonctionne à merveille.
    Tu es un bon prof et moi un bon élève.
    C'est ce genre de subtilité que je maîtrise mal. J'ai appris access et Excel sur le tas.
    Cordialement

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 760
    Points : 14 795
    Points
    14 795
    Par défaut
    J'ai compris le sens de renommer le champs Mois en Mois_XXX de sorte qu'access face la différence avec son écriture Mois Année et Date.
    Ce n'est pas çà. Quand on utilise un champ dans une expression on ne peut pas l'utiliser comme Alias car cela crée un référence circulaire (un peu comme dans Excel).
    Deux question : J'ai remarqué dans le formatage que tu m'es Format([Mois],"00") à quoi correspond [mois] et pourquoi une ,(virgule) et non pas ; (point virgule) comme normalement utilisé pour Format ?
    [mois] est le champ de la table Depense.
    Le point-virgule est utilisée dans l'environnement de la langue régionale (le Français) alors que la virgule est utilisée dans l'environnement VBA et SQL car Access est un produit développé par une entreprise américaine.
    Si tu visualises le champ [mois] de la requête dans QBE (Query by Example) qui est l'interface graphique de création de requêtes d'Access tu vois ceci :
    Pièce jointe 230900
    Si tu visualises la requête en mode SQL (toujours depuis l'interface QBE) tu as ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Depense.Date_Jour, Format([Mois],"00") AS Mois_depense, Depense.benef, Depense.Montant
    FROM Depense
    GROUP BY Depense.Date_Jour, Format([Mois],"00"), Depense.benef, Depense.Montant
    HAVING (((Format([Mois],"00")) Like "*" & [Formulaires]![Selection]![CboMois]));
    le Comme "*" a été traduit en Like "*", le point virgule a été transformé en virgule.
    Excel aussi utilise les formules de la langue régionale, mais normalement dans le VBA d'Excel c'est toujours l'US qui prime.

  9. #9
    Membre habitué

    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2014
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2014
    Messages : 373
    Points : 150
    Points
    150
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    Ce n'est pas çà. Quand on utilise un champ dans une expression on ne peut pas l'utiliser comme Alias car cela crée un référence circulaire (un peu comme dans Excel).

    [mois] est le champ de la table Depense.
    Le point-virgule est utilisée dans l'environnement de la langue régionale (le Français) alors que la virgule est utilisée dans l'environnement VBA et SQL car Access est un produit développé par une entreprise américaine.
    Si tu visualises le champ [mois] de la requête dans QBE (Query by Example) qui est l'interface graphique de création de requêtes d'Access tu vois ceci :
    Pièce jointe 230900
    Si tu visualises la requête en mode SQL (toujours depuis l'interface QBE) tu as ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Depense.Date_Jour, Format([Mois],"00") AS Mois_depense, Depense.benef, Depense.Montant
    FROM Depense
    GROUP BY Depense.Date_Jour, Format([Mois],"00"), Depense.benef, Depense.Montant
    HAVING (((Format([Mois],"00")) Like "*" & [Formulaires]![Selection]![CboMois]));
    le Comme "*" a été traduit en Like "*", le point virgule a été transformé en virgule.
    Excel aussi utilise les formules de la langue régionale, mais normalement dans le VBA d'Excel c'est toujours l'US qui prime.
    Re
    Merci encore pour ces explications. mille excuse pour la référence circulaire.
    Je pense que je peux mettre cette discussion comme résolue.
    Mille excuses, mais je pense que cela t'as fait plaisir de venir en aide à un novice.
    Je réitère mes meilleur voeux pour 2017
    Cordialement

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

Discussions similaires

  1. [MySQL] Erreur lors d'une récupération de données avec critère de sélection
    Par Squalthor dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 08/11/2006, 11h28
  2. Requête avec date comme critère de sélection
    Par deep-diver dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/09/2006, 11h40
  3. Réponses: 7
    Dernier message: 27/07/2006, 17h20
  4. Réponses: 5
    Dernier message: 06/07/2006, 11h40
  5. Réponses: 3
    Dernier message: 16/06/2006, 16h17

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