Access
Résolu
Turbus
Messages postés
72
Date d'inscription
Statut
Membre
Dernière intervention
-
Turbus Messages postés 72 Date d'inscription Statut Membre Dernière intervention -
Turbus Messages postés 72 Date d'inscription Statut Membre Dernière intervention -
5 réponses
Il me semble qu'il faut que sélectionne tes plages de données avec or argent bronze et tu fais clique droit créer une liste déroulante
Bonjour,
Suite au commentaire ci-dessus, si la formule est Ok, je vous suggère d'utiliser l'opérateur "Or" à la place de "And". En effet la signification de l'opérateur et (and) sous Access est différence de celle en français courant.
Dans ce cas de figure, Access cherche les médailles qui sont simultanément en or, en argent et en bronze, d'où l'absence de résultat.
L'opérateur "Or"(ou) effectuera lui la recherche en prenant les médailles qui sont ou en or, ou en argent ou en bronze.
Bonne soirée,
Suite au commentaire ci-dessus, si la formule est Ok, je vous suggère d'utiliser l'opérateur "Or" à la place de "And". En effet la signification de l'opérateur et (and) sous Access est différence de celle en français courant.
Dans ce cas de figure, Access cherche les médailles qui sont simultanément en or, en argent et en bronze, d'où l'absence de résultat.
L'opérateur "Or"(ou) effectuera lui la recherche en prenant les médailles qui sont ou en or, ou en argent ou en bronze.
Bonne soirée,
Repartons depuis le début dans ce cas. Si j'ai bien compris vous travaillez sur un formulaire contenant la-dite liste et vous souhaitez voir s'afficher les résultats de quel manière ? Dans un sous-formulaire inclue dans le formulaire parent, dans un autre formulaire/état ou simplement effectuer une requête et l'afficher en "brut" ?
Si vous aviez possibilité de zipper votre base de données et de la mettre sur http://www.cijoint.fr/ cela faciliterait mes recherches.
Si vous aviez possibilité de zipper votre base de données et de la mettre sur http://www.cijoint.fr/ cela faciliterait mes recherches.
J'ai plusieurs liste déroulante qui me permettent de trier les résultats et les afficher dans une zone de liste.
Les fichiers avec l'extension .accdb ne peuvent pas être déposés sur http://www.cijoint.fr/
Voici un autre lien ; [url=https://www.luanagames.com/index.fr.html]Projet.accdb[/url]
Il s'agit du formulaire "Consultation par JO" (pour faire apparaitre des résultats il faut sélectionner l'année 2010)
Merci de votre aide.
Les fichiers avec l'extension .accdb ne peuvent pas être déposés sur http://www.cijoint.fr/
Voici un autre lien ; [url=https://www.luanagames.com/index.fr.html]Projet.accdb[/url]
Il s'agit du formulaire "Consultation par JO" (pour faire apparaitre des résultats il faut sélectionner l'année 2010)
Merci de votre aide.
Bonsoir,
Je suis parvenu a trouvé une solution (peu élégante je l'avoue) à votre problème.
Dans le formulaire "Consultation par JO" en mode création, ouvrez le contenu de votre contrôle "Liste10" puis basculez en affichage SQL.
Copiez-collez l'instruction suivante :
SELECT Résultats.Jeux, Athlètes.[Nom Athlète ], Sports.Sport, Médaille.Médaille, Résultats.Athlète, Résultats.Sport
FROM Médaille INNER JOIN ((Athlètes INNER JOIN Résultats ON Athlètes.IdAthlète = Résultats.Athlète) INNER JOIN Sports ON Résultats.Sport = Sports.IdSport) ON Médaille.IdMédaille = Résultats.Médaille
GROUP BY Résultats.Jeux, Athlètes.[Nom Athlète ], Sports.Sport, Médaille.Médaille, Résultats.Athlète, Résultats.Sport, Résultats.Médaille
HAVING (((Résultats.Jeux)=[Formulaires]![Consultation par JO]![Modifiable2]) AND ((Résultats.Médaille)=IIf([Formulaires]![Consultation par JO]![Modifiable12]=8,1,[Formulaires]![Consultation par JO]![Modifiable12]))) OR (((Résultats.Jeux)=[Formulaires]![Consultation par JO]![Modifiable2]) AND ((Résultats.Médaille)=IIf([Formulaires]![Consultation par JO]![Modifiable12]=8,2,[Formulaires]![Consultation par JO]![Modifiable12]))) OR (((Résultats.Jeux)=[Formulaires]![Consultation par JO]![Modifiable2]) AND ((Résultats.Médaille)=IIf([Formulaires]![Consultation par JO]![Modifiable12]=8,3,[Formulaires]![Consultation par JO]![Modifiable12])));
Enregistrez le tout et cn'hésitez pas à repasser en affichage "création de requete" pour visualiser le fonctionnement de la requête.
Cette solution n'est pas optimale mais fonctionne. N'hésitez pas à me suggérer une meilleure solution.
Bonne soirée,
Je suis parvenu a trouvé une solution (peu élégante je l'avoue) à votre problème.
Dans le formulaire "Consultation par JO" en mode création, ouvrez le contenu de votre contrôle "Liste10" puis basculez en affichage SQL.
Copiez-collez l'instruction suivante :
SELECT Résultats.Jeux, Athlètes.[Nom Athlète ], Sports.Sport, Médaille.Médaille, Résultats.Athlète, Résultats.Sport
FROM Médaille INNER JOIN ((Athlètes INNER JOIN Résultats ON Athlètes.IdAthlète = Résultats.Athlète) INNER JOIN Sports ON Résultats.Sport = Sports.IdSport) ON Médaille.IdMédaille = Résultats.Médaille
GROUP BY Résultats.Jeux, Athlètes.[Nom Athlète ], Sports.Sport, Médaille.Médaille, Résultats.Athlète, Résultats.Sport, Résultats.Médaille
HAVING (((Résultats.Jeux)=[Formulaires]![Consultation par JO]![Modifiable2]) AND ((Résultats.Médaille)=IIf([Formulaires]![Consultation par JO]![Modifiable12]=8,1,[Formulaires]![Consultation par JO]![Modifiable12]))) OR (((Résultats.Jeux)=[Formulaires]![Consultation par JO]![Modifiable2]) AND ((Résultats.Médaille)=IIf([Formulaires]![Consultation par JO]![Modifiable12]=8,2,[Formulaires]![Consultation par JO]![Modifiable12]))) OR (((Résultats.Jeux)=[Formulaires]![Consultation par JO]![Modifiable2]) AND ((Résultats.Médaille)=IIf([Formulaires]![Consultation par JO]![Modifiable12]=8,3,[Formulaires]![Consultation par JO]![Modifiable12])));
Enregistrez le tout et cn'hésitez pas à repasser en affichage "création de requete" pour visualiser le fonctionnement de la requête.
Cette solution n'est pas optimale mais fonctionne. N'hésitez pas à me suggérer une meilleure solution.
Bonne soirée,
Bonjour,
Merci pour votre solution celle-ci fonctionne !
Mais, je ne peux pas, par exemple, créer une liste déroulante avec comme information "Tous les pays" ? Ce serait beaucoup trop de travail à écrire un critère pour chaque pays.. Et si je souhaiterai créer un pays, via le formulaire "Ajouter un nouveau pays", celui-ci ne serai pas mis à jour dans la requête..
Je vais essayer de chercher une autre solution. Si vous avez une autre idée, je suis preneur.
Merci.
Bonne journée.
Merci pour votre solution celle-ci fonctionne !
Mais, je ne peux pas, par exemple, créer une liste déroulante avec comme information "Tous les pays" ? Ce serait beaucoup trop de travail à écrire un critère pour chaque pays.. Et si je souhaiterai créer un pays, via le formulaire "Ajouter un nouveau pays", celui-ci ne serai pas mis à jour dans la requête..
Je vais essayer de chercher une autre solution. Si vous avez une autre idée, je suis preneur.
Merci.
Bonne journée.
J'ai trouvé ceci :
https://www.developpez.net/forums/d1014562/logiciels/microsoft-office/access/requetes-sql/filtre-zone-liste/
SI j'ai bien compris, il faut crée une requête union qui va faire apparaitre "Tous" en haut de la liste déroulante. (Chose que j'ai faite)
Ensuite il faut en quelques sorte lui dire en VBA que lorsque l'on sélectionne 'Tous' il affiche tous les résultats ?
https://www.developpez.net/forums/d1014562/logiciels/microsoft-office/access/requetes-sql/filtre-zone-liste/
SI j'ai bien compris, il faut crée une requête union qui va faire apparaitre "Tous" en haut de la liste déroulante. (Chose que j'ai faite)
Ensuite il faut en quelques sorte lui dire en VBA que lorsque l'on sélectionne 'Tous' il affiche tous les résultats ?
Bonjour,
Oui l'une des solutions serait d'introduire la requête SQL directement en VBA. Toutefois, (après avoir survolée le post je l'avoue) la requête Union ne me semble pas adaptée car, comme dans l'instruction que je vous ai transmis cette nuit, vous devriez gérer toutes les possibilités manuellement... Ce qui fait que nous nous retrouvons au point de départ.
Si vous n'avez pas trouver de solution d'ici là, je me pencherai à nouveau sur votre base ce soir.
Bonne recherche,
Oui l'une des solutions serait d'introduire la requête SQL directement en VBA. Toutefois, (après avoir survolée le post je l'avoue) la requête Union ne me semble pas adaptée car, comme dans l'instruction que je vous ai transmis cette nuit, vous devriez gérer toutes les possibilités manuellement... Ce qui fait que nous nous retrouvons au point de départ.
Si vous n'avez pas trouver de solution d'ici là, je me pencherai à nouveau sur votre base ce soir.
Bonne recherche,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai trouvé !
J'ai remodifié la structure de votre formulaire pour le rendre plus parlant (à mes yeux) en basant toutes vos listes sur les désignations plutôt que sur la valeur de la clé primaire (c'est ainsi plus lisible dans les formules que j'ai utilisé).
J'ai ensuite ajouté un sport à la liste des sports que j'ai intitulé "(Tous les sports)" Pour le trouver en haut de la liste.
Enfin, j'ai utilisé la formule suivante, par exemple pour les médailles, pour la zone de critère :
VraiFaux([Formulaires]![Consultation par JO]![Modifiable12]="Toutes médailles";[Médaille].[Médaille];[Formulaires]![Consultation par JO]![Modifiable12])
Je vous donne également l'instruction SQL de la requête car j'ai apporté quelques modifications à la structure de votre requête :
SELECT Athlètes.[Nom Athlète ], Sports.Sport, Médaille.Médaille, Jeux.[Année JO]
FROM (Athlètes INNER JOIN (Jeux INNER JOIN (Médaille INNER JOIN Résultats ON Médaille.IdMédaille = Résultats.Médaille) ON Jeux.IdJO = Résultats.Jeux) ON Athlètes.IdAthlète = Résultats.Athlète) INNER JOIN Sports ON Résultats.Sport = Sports.IdSport
WHERE (((Sports.Sport)=IIf([Formulaires]![Consultation par JO]![Modifiable28]="(Tous les sports)",[Sports].[Sport],[Formulaires]![Consultation par JO]![Modifiable28])) AND ((Médaille.Médaille)=IIf([Formulaires]![Consultation par JO]![Modifiable12]="Toutes médailles",[Médaille].[Médaille],[Formulaires]![Consultation par JO]![Modifiable12])) AND ((Jeux.[Année JO])=[Formulaires]![Consultation par JO]![Modifiable2]))
GROUP BY Athlètes.[Nom Athlète ], Sports.Sport, Médaille.Médaille, Jeux.[Année JO];
Un dernier conseil d'ordre général, utilisez des noms de champs représentatifs lorsque vous concevez vos formulaires car j'ai eu un peu de mal à m'y retrouvé entre le champ "Modifiable2" et "Modifiable 28". De plus la maintenance est plus aisée lorsque les noms sont significatifs.
Si cela ne fonctionne pas je peux vous mettre le fichier à jour sur cijoint.
Bonne soirée,
J'ai remodifié la structure de votre formulaire pour le rendre plus parlant (à mes yeux) en basant toutes vos listes sur les désignations plutôt que sur la valeur de la clé primaire (c'est ainsi plus lisible dans les formules que j'ai utilisé).
J'ai ensuite ajouté un sport à la liste des sports que j'ai intitulé "(Tous les sports)" Pour le trouver en haut de la liste.
Enfin, j'ai utilisé la formule suivante, par exemple pour les médailles, pour la zone de critère :
VraiFaux([Formulaires]![Consultation par JO]![Modifiable12]="Toutes médailles";[Médaille].[Médaille];[Formulaires]![Consultation par JO]![Modifiable12])
Je vous donne également l'instruction SQL de la requête car j'ai apporté quelques modifications à la structure de votre requête :
SELECT Athlètes.[Nom Athlète ], Sports.Sport, Médaille.Médaille, Jeux.[Année JO]
FROM (Athlètes INNER JOIN (Jeux INNER JOIN (Médaille INNER JOIN Résultats ON Médaille.IdMédaille = Résultats.Médaille) ON Jeux.IdJO = Résultats.Jeux) ON Athlètes.IdAthlète = Résultats.Athlète) INNER JOIN Sports ON Résultats.Sport = Sports.IdSport
WHERE (((Sports.Sport)=IIf([Formulaires]![Consultation par JO]![Modifiable28]="(Tous les sports)",[Sports].[Sport],[Formulaires]![Consultation par JO]![Modifiable28])) AND ((Médaille.Médaille)=IIf([Formulaires]![Consultation par JO]![Modifiable12]="Toutes médailles",[Médaille].[Médaille],[Formulaires]![Consultation par JO]![Modifiable12])) AND ((Jeux.[Année JO])=[Formulaires]![Consultation par JO]![Modifiable2]))
GROUP BY Athlètes.[Nom Athlète ], Sports.Sport, Médaille.Médaille, Jeux.[Année JO];
Un dernier conseil d'ordre général, utilisez des noms de champs représentatifs lorsque vous concevez vos formulaires car j'ai eu un peu de mal à m'y retrouvé entre le champ "Modifiable2" et "Modifiable 28". De plus la maintenance est plus aisée lorsque les noms sont significatifs.
Si cela ne fonctionne pas je peux vous mettre le fichier à jour sur cijoint.
Bonne soirée,
Bonjour
Je viens d'essayer mais ça ne fonctionne pas, rien ne s'affiche. Il doit y avoir une incohérence de nom quelques part.
Oui si c'est possible, j'aimerai bien la base de donnée sur laquelle vous avez apportez des modifications comme ça je peux voir les modifications que vous avez faites pour rendre le formulaire "plus parlant". Et aussi voir pourquoi ça ne fonctionne pas chez moi.
Merci et bonne soirée.
Je viens d'essayer mais ça ne fonctionne pas, rien ne s'affiche. Il doit y avoir une incohérence de nom quelques part.
Oui si c'est possible, j'aimerai bien la base de donnée sur laquelle vous avez apportez des modifications comme ça je peux voir les modifications que vous avez faites pour rendre le formulaire "plus parlant". Et aussi voir pourquoi ça ne fonctionne pas chez moi.
Merci et bonne soirée.
R_croisement_médaille est la requête qui contient les résulatsqui sont affichés dans votre zone de résultat, c'est donc ce que vous cherchez à faire.
J'ai comme habitude de mettre ce type de requête directement accessible afin de pouvoir les modifier plus rapidement. Ce n'est pas une obligation, vous auriez pu créer la reqûete directement dans le formulaire.
Si vous voulez la faire disparaitre, faites d'abord un copier de l'instruction SQL, supprimez là puis retourner dans votre formulaire en mode création et modifiez la source de donnée de votre contrôle affichant la liste de résultat. Basculez en affichage SQL et coller l'instruction. Enregistrez et çà devrait marcher.
J'ai comme habitude de mettre ce type de requête directement accessible afin de pouvoir les modifier plus rapidement. Ce n'est pas une obligation, vous auriez pu créer la reqûete directement dans le formulaire.
Si vous voulez la faire disparaitre, faites d'abord un copier de l'instruction SQL, supprimez là puis retourner dans votre formulaire en mode création et modifiez la source de donnée de votre contrôle affichant la liste de résultat. Basculez en affichage SQL et coller l'instruction. Enregistrez et çà devrait marcher.
D'accord, j'ai compris. C'est juste que je ne faisais jamais "enregistrer sous" pour les requêtes. J'ai pour habitude de créer directement la requête et de la "laisser" dans le formulaire. (si on peut appelé ça une habitude puisque c'est la première base de données que je fait)
Par contre, j'ai coller l'instruction SQL et ça ne fonctionne toujours pas. J'ai vérifié les noms des différents champs et cela semble correct..
Par contre, j'ai coller l'instruction SQL et ça ne fonctionne toujours pas. J'ai vérifié les noms des différents champs et cela semble correct..
J'ai déjà fait ma liste déroulante (avec comme données "Toutes les médailles", "Or", "Argent", "Bronze"), et lorsque que sélectionne "Or" ça m'affiche les bons résultats (pareil pour Argent et Bronze).
Mon problème c'est lorsque je clique sur "Toutes les médailles", j'aimerai que ça m'affiche les résultats des médailles d'or ET d'argent ET de bronze.
If (Zone de liste déroulante) = "<<Toutes médailles>>" Then
(liste de résultats) ="Or" And "Argent" And "Bronze"
End Ifit
mais sans résultats..