|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Mickaël Dessinateur industriel Inscription : décembre 2010 Messages : 61 ![]() |
Bonjour,
Je suis en train de développer une application Access dans le cadre de mon travail. Tout avance bien, cependant je me heurte à un problème, certes mineur, mais qui m'embête tout de même. Mon interface doit en fonction de diverses sélections, afficher ou masquer un certain nombre de contrôles tels que des combobox. Cela fonctionne mais, au moment ou j'appelle ma procédure qui m'affiche ou masque mes contrôles, je vois ces derniers apparaitre puis disparaitre brièvement. Comme si j'en demandais trop au programme. J'avais déjà réalisé une application similaire grâce à un Userform en vba excel et je n'ai jamais eu ce soucis. Pour moi, mis à part l'outil qui diffère, la seule différence notable est que j'utilisais des contrôles "Frame" qui contenaient l'ensemble des contrôles que je souhaitais afficher ou non. Je suppose que cela doit être plus optimisé de masquer un groupe (soit une entité) plutôt que x contrôles indépendant. J'avais donc une ligne de code: J'en viens donc à ma question de base. J'ai pas mal recherché sur Access mais je ne trouve pas de contrôles correspondant. Ou alors je n'en ai pas compris le fonctionnement (je fais références aux contrôles Cadre d'objet indépendant ou non). Y a-t-il des contrôles qui correspondent à mon besoin? D'autre part, est-ce que je me trompe en pensant qu'un tel contrôle supprimera mon problème? Si non, y voyez-vous une solution? Merci d'avance. Mickaël |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Fabrice CONSTANSIngénieur développement logiciels Inscription : avril 2005 Messages : 7 089 ![]() |
Bonjour,
Je ne pense pas que le placage de cadre change ton problème. Sur quels événements as-tu mis en place ta préocédure de masquage ? Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste MsGraph et VBA - 1e Partie 2e partie Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010 Complément :Générateur de msgbox Visitez mon Blog Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine |
|
00
|
|
|
#3 | ||
|
Nouveau Membre du Club
![]() Mickaël Dessinateur industriel Inscription : décembre 2010 Messages : 61 ![]() |
Bonjour,
Tes premiers éléments de réponse m'effraient un peu Pour le moment j'ai englobé l'ensemble dans ma procédure RefreshQuerry qui se déclenche à chaque fois qu'on clique sur une combobox.(après copié collé, je m'aperçois qu'elle commence à être importante cette procédure) Je te la joint pour que tu vois ce qu'il en est: Code :
![]() La plupart des contrôles appellent ma procédure RefreshQuerry après un évènement "Après MAJ". |
||
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Fabrice CONSTANSIngénieur développement logiciels Inscription : avril 2005 Messages : 7 089 ![]() |
Bonjour,
Tu dois tracer ton code pour voir exactement quand le clignotement se produit. Je ne vois pas de code de réaffichage de tes controles Attribx. Ps : l'opérateur de concaténation c'est le & et non le +. Si tu as des string avec du numérique il va te faire des additions.
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste MsGraph et VBA - 1e Partie 2e partie Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010 Complément :Générateur de msgbox Visitez mon Blog Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine |
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Mickaël Dessinateur industriel Inscription : décembre 2010 Messages : 61 ![]() |
Re,
Je masque les contrôle avant leur éventuelle utilisation entre les lignes 7 à 20. Et je les affiche dans la Sub "RetrieveAttrib", si besoin est, lignes 127-128. En tous cas, merci pour l'info sur les + et &. Je pensais qu'ils avaient exactement la même signification. Je vais tâcher de les corriger
|
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Fabrice CONSTANSIngénieur développement logiciels Inscription : avril 2005 Messages : 7 089 ![]() |
Personnellement je chercherais à faire l'affichage et le masquage au même moment. J'éviterai également les fonctions de domaine (Dlookup, Dcount...) et je mettrai en place une solution DAO (recordset).
Je ne mettrais pas les rowsource à vide, puisque si la combo n'est pas utilisée elle sera cachée et si elle ne l'est pas la nouvelle rowsource s'y substituera. Lorsque je veux cacher afficher, je me sert régulièrement de cette astuce. Code :
me.moncontrole.visible = (condition renvoyant True ou False) Utilise une boucle For pour parcourir tes combos au lieu de parcourir tes enregistrements. Tu pourras ainsi grace à un findfirst trouver l'enregistrement et mettre un not nomatch comme condition au visible de ta combo. Regarde le tuto sur DAO pour mettre en application cette méthode. Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste MsGraph et VBA - 1e Partie 2e partie Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010 Complément :Générateur de msgbox Visitez mon Blog Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine |
|
00
|
|
|
#7 |
|
Nouveau Membre du Club
![]() Mickaël Dessinateur industriel Inscription : décembre 2010 Messages : 61 ![]() |
Re,
Je vais réfléchir à la solution proposée. Est-ce que selon toi, mon problème pourrait venir de tout ça? Quoiqu'il en soit, il est vrai que je me suis contenté d'un Dlookup au détriment du Recorset car il génère moins de code. En gros, j'avoue l'avoir fait comme ça par fénéantise. Ta remarque sur le fait de remettre les rowsource à vide est pertinante. Je l'avais fait avant de m'occuper de masquer les cbox. Mais comme tu me l'as justement fait remarqué, je vais pouvoir alléger mon code à ce niveau. En revanche, excuse moi, mais je n'ai pas compris ton astuce. Du moins, je n'y vois pas de différence par rapport à ce que j'ai fait. (On mettra ça sur le dos de la fatigue Juste une petite note concernant le fait que je parcours mes enregistrements. En fait, l'état de mes combo dépent de sélections faites précédemment, et du contenu trouvé. Si je bouclais sur mes combobox, j'ai l'impression que ça revient au même. (en tous cas d'un point de vue logique) Est-ce meilleur d'un point de vue code? En tous cas merci pour ton aide. Cordialement, Mickaël |
|
|
00
|
|
|
#8 | ||
![]() ![]() ![]() Fabrice CONSTANSIngénieur développement logiciels Inscription : avril 2005 Messages : 7 089 ![]() |
Bonjour,
Si tu boucle sur tes combos tu n'y passe qu'une fois et c'est lors de ce passage unique que tu définis la source et si elle est visible ou non. L'astuce consiste à utiliser d'une part un findfirst pour trouver l'enregistrement (par opposition au dlookup) et de vérifier s'il existe pour afficher/cacher la combos et y mettre la source. Code :
Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste MsGraph et VBA - 1e Partie 2e partie Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010 Complément :Générateur de msgbox Visitez mon Blog Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine |
||
|
10
|
|
|
#9 |
|
Nouveau Membre du Club
![]() Mickaël Dessinateur industriel Inscription : décembre 2010 Messages : 61 ![]() |
Bonjour,
Merci pour ces explications. Je n'avais jamais vu cette manière de faire: Code :
me.controles("combo" & i).visible=not rst.nomatch ![]() Effectivement, vu comme ça, mon code sera simplifié. Et avec un peu de chance plus optimisé au niveau du raffraichissement. Dès que j'ai un moment, je vais mettre en oeuvre cette solution. Vu ce que tu m'en dit, je crois que je vais, au fur et à mesure, supprimer chaque fonctions de domaine de mon code. Je laisse pour le moment le sujet ouvert le temps de tester pour voir si cela à réellement un impact sur mon problème. En attendant, merci pour tes conseils
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com