Disparition du formulaire après application d'un filtre

Fermé
Salyanov - 14 nov. 2015 à 08:45
castours Messages postés 2955 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 31 août 2019 - 18 nov. 2015 à 21:24
Bonjour à toutes et à tous,

D'avance, je vous remercie pour l'attention que vous accorderez à ma requête.

Je travaille une base de données Access. J'ai créé un formulaire FormNC lié à une requête ReqNC. J'ai mis ce formulaire en mode Formulaire uniquement, sans ligne de séparation ni sélecteur, afin de donner une allure plus jolie à l'application.

Ce formulaire comprend de nombreux champs, dont trois sur lesquels je tiens à appliquer un filtre :
- ChampA (champ texte)
- ChampB (champ date)
- ChampC (champ booléen)

Je crée donc trois outils en haut du formulaire :
- Une zone de texte txtFiltreA
- Une liste déroulante paramétrée lisFiltreB
- Une case à cocher chkFiltreC

J'ajoute également un bouton cmdFiltre qui filtre les données reprises selon les informations encodées par l'utilisateur dans txtFiltreA, lisFiltreB et chkFiltreC.

Ensuite, je crée une macro Access pour l'événement "clic" sur cmdFiltre (bien via l'interface création de macro en Access, et non en VBA puisque je ne suis pas encore assez à l'aise en VBA, mais je possède quelques rudiments et j'essaye de progresser).

Voici la macro :

1. Si txtFiltreA Est Null Alors
2. Zone de Message : Veuillez encoder une valeur dans txtFiltreA
3. ArrêtMacro
4. Sinon si lisFiltreB Est Null Alors
5. Zone de Message : Veuillez encoder une valeur dans lisFiltreB
6. ArrêtMacro
7. Sinon
8. Appliquer Filtre : ChampA = txtFiltreA Et ChampB = lisFiltreB Et ChampC = chkFiltreC
9. Fin Si

La macro fonctionne sans souci lorsqu'il existe des lignes dans ReqNC qui correspondent au filtre : l'ensemble des données retournées par le filtre n'est pas vide. Le formulaire FormNC fonctionne alors sans problème, les calculs souhaités se déroulent sans accroche, etc.

Par contre, si aucune donnée dans ReqNC ne répond à la triple condition txtFiltreA, lisFiltreB et chkFiltreC, le résultat après appui sur le bouton cmdFiltre est... un formulaire vide, une page monochrome, sans même l'apparition des labels, des boutons, des champs, des lignes, etc. Tout disparaît et plus aucun moyen de modifier txtFiltreA, lisFiltreB et chkFiltreC... En somme, un gros bug pour l'utilisateur qui ne sait plus rien faire, si ce n'est quitter l'application.

J'ignore comment je peux supprimer ce bug. Existe-t-il une fonction en macro qui permet d'annuler la macro si le résultat d'un filtre est un ensemble vide ? Dois-je effectuer un test supplémentaire ? Pourquoi le formulaire devient une zone monochrome, au lieu de ne retourner aucune valeur mais en conservant l'affichage des labels, boutons, etc. ?

Y a-t-il une solution via l'édition de macro en Access ? Ou faut-il passer par du VBA ? Voire du VBA avec du SQL intégré ?

Je suppose que pour la plupart d'entre vous, mon erreur dans la confection de ce formulaire est manifeste...

Merci à toutes les bonnes âmes indulgentes qui voudront bien m'ouvrir les portes sur lesquelles je me cogne encore la tête, faute de lumière ! ;-)

Bonne journée,
A voir également:

3 réponses

Bonjjour,
Non ! Tout est normal. S'il n'y a aucune donnée, tu auras un formulaire monochrome comme tu dis. C'est seulement que ta requête sous-jacente n'est pas modifiable.
Les seules solutions sont:
rendre la requête modifiable si c'est possible,
ou bien ajouter une condition à tes suites de conditions, du genre :
Si Nbre Résultats de la Requête = 0 ==> Ne pas ouvrir le formulaire
Bonne suite
0
Salyanov Messages postés 3 Date d'inscription samedi 24 mai 2014 Statut Membre Dernière intervention 15 novembre 2015 1
Modifié par Salyanov le 15/11/2015 à 12:03
Bonjour,

Je vous remercie pour votre réponse.

Ouf ! la "monochromatisation" du formulaire est donc un résultat normal en Access.

Par contre, même si je comprends bien la solution que vous proposez, elle est d'ordre logique, mais pas d'ordre pratique : comment, techniquement, puis-je faire cela via l'éditeur de macro en Access ? Là se situe mon problème.

Voilà encore quatre heure que je cherche... et j'ai trouvé une autre solution via l'incorporation d'un sous-formulaire. FormNC devient le sous-formulaire d'un formulaire contenant les trois champs de recherche et le bouton cmdFiltre. Je crée donc une requête supplémentaire prenant en compte les valeurs encodées dans les trois champs ; le bouton cmdFiltre devient alors un simple outil pour actualiser le sous-formulaire.

À l'ouverture du formulaire, le sous-formulaire est "monochrome", mais les trois champs de recherches et le bouton cmdFiltre, non situés dans le sous-formulaire, restent accessibles.

Bien que fonctionnant, je trouve cette solution complexe puisqu'il faut créer deux objets supplémentaires au lieu d'effectuer simplement un test comme vous le proposez.

Cordialement.
0
Re...
Il y a très, très longtemps que je ne pratique plus les macros, aussi je ne peux pas être d'une grande aide technique, c'est pour ça que je m'en suis tenu à la logique. Il faut regarder comment tu peux écrire en macro une condition: Si A = Oui alors B , si Non(A=Oui) alors C. Le reste n'est que recherche, réflexion, et habileté.
Bonne suite.
0
castours Messages postés 2955 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 31 août 2019 217
18 nov. 2015 à 21:24
bonjour
pose ton probleme sur la section programmation vba
0