|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : novembre 2010 Messages : 105 ![]() |
Bonsoir,
J'ai ajouter un bouton "Trier" à un des champs de mon formulaire. Le rôle de ce bouton est de trier les enregistrements courant (pas forcément tous donc, car je peux faire une sélection) en fonction d'une liste déroulante appelée "Degré". Cette liste contient 3 valeurs: "Faible", "Moyen" et "Fort". Quand j'appuie sur le bouton "Trier", ce code vba s'active: Code :
Début de solution: j'ai créée une table secondaire "TblTriDegré" qui comporte 2 champs: "Degré" et "Importance". J'y ai attribué une importance de 1 à "Faible", 2 à "Moyen" et 3 à "Fort". Lorsque je fais un appel de RecordSource j'écris donc le code suivant pour pouvoir bénéficier du tri par "Importance" (qui est bon donc): Code :
Me.RecordSource = "SELECT * FROM TblTriDegré LEFT JOIN [MaTable] ON TblTriDegré.[Degré] = [MaTable].[Degré] ORDER BY TblTriDegré.Importance;" Merci d'avance |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() |
Bonjour,
Dans ce cas, tu n'utilises pas tes appels : Code :
avec les conditions Where et Order By après chaque sélection... et tout cela représenté par des boutons idoines AZet ZA. Argy
__________________
Ils comptent sur vous... Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment. Web Site ‡ @Mail Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007 Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010 MDB Viewer : Visionneuse Access v4.0 |
||
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2010 Messages : 105 ![]() |
Le problème c'est que j'aimerais effectuer ce tri sur les enregistrements courant, et pas forcément tous les enregistrements donc, car j'ai ajouté des fonctions de sélection d'enregistrements dans mon formulaire.
C'est impossible donc?! |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() |
Bien oui, j'ai bien compris...
Tu redéfinis ta clause SELECT à chaque fois et tu réaffectes ton RecotdSource à chaque fois aussi. C'est ainsi que je procède... Tu créés dynamiquement ta requête qui est la source de ton formulaire et tu invoques un Requery chaque fois qu'une selection ou un tri est appelé. Argy
__________________
Ils comptent sur vous... Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment. Web Site ‡ @Mail Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007 Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010 MDB Viewer : Visionneuse Access v4.0 |
|
|
00
|
|
|
#5 | ||
|
Nouveau Membre du Club
![]() Inscription : novembre 2010 Messages : 105 ![]() |
Nié
![]() Je dois être bête mais j'avoue que je ne comprends pas là. Prenons un exemple: [MaTable] contient les champs [Degré] et [Nom] et j'ai ces enregistrements: [Degré] : Fort , Faible, Moyen, Faible [Nom] : abb , bba , aba , aaa Je souhaiterais que le tri sur [Degré] grâce à mon bouton "Tri" se fasse comme ça: Fort, Moyen, Faible. Donc ici, le code pour avoir ce tri serait: Code :
Me.RecordSource = "SELECT * FROM TblTriDegré LEFT JOIN [MaTable] ON TblTriDegré.[Degré] = [MaTable].[Degré] ORDER BY TblTriDegré.Importance;" Le code ne marche plus, il me renverra tous les enregistrement, pas seulement ceux dont le [Degré] est "Faible" Faut il que dans la "Private Sub BoutonTri_Click()" je prévois tous les cas de sélection? Par exemple: Code :
Comment dois-je procéder du coup? Dsl de ne pas comprendre. |
||
|
|
00
|
|
|
#6 | ||||
![]() ![]() ![]() |
Déjà, ta table contenant les dégrés doit être pourvue d'une clé primaire avec une valeur numérique correspondant à chacun des degrés
Code :
Un Update s'impose donc... Il sera alors aisé de trier sinon Fort et Faible vont se heurter par leur lettre F et l'ordre de tri sera systématiquement Faible, Fort et Moyen puisque : Une fois cela fait, tu créés une requête que tu nommes en conséquence de ce que représente ton formulaire. Code :
SELECT * FROM TblTriDegré LEFT JOIN [MaTable] ON TblTriDegré.[Degré] = [MaTable].[Degré] ORDER BY TblTriDegré.IDImportance;" Chaque fois que tu fais une sélection, je ne sais pas comment est construit ton formulaire, tu reconstruits la requête sur la base de la première avec les nouveau élements de condition WHERE... Voici un exemple : Code :
__________________
Ils comptent sur vous... Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment. Web Site ‡ @Mail Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007 Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010 MDB Viewer : Visionneuse Access v4.0 |
||||
|
|
00
|
|
|
#7 | ||
|
Nouveau Membre du Club
![]() Inscription : novembre 2010 Messages : 105 ![]() |
Oh boy!!
C'est définitively de trop haut niveau pour moi. Mais tu m'as donné une idée plus simple par contre Argyronet: J'ajoute un champ numérique à ma table que je met à jour par un update comme ça: Code :
Merci bcp Argyronet (j'essaierais quand même ton idée si jamais, mais ça n'a vraiment pas l'air de mon niveau |
||
|
|
00
|
|
|
#8 |
![]() ![]() ![]() |
Oui, il y a une erreur dans ton SET...
SET quoi ? Il faut spécifier le nom du champ. Code :
UPDATE MaTable SET ChampNumDegrée = 3 WHERE Degré = 'Fort'
__________________
Ils comptent sur vous... Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment. Web Site ‡ @Mail Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007 Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010 MDB Viewer : Visionneuse Access v4.0 |
|
|
00
|
|
|
#9 | ||
|
Nouveau Membre du Club
![]() Inscription : novembre 2010 Messages : 105 ![]() |
Re, Argyronet
J'ai finalement trouvé encore plus facile: j'ai ajouté la zone de texte correspondant au champ Tri (numérique) de MaTable et je l'ai rendu invisible + ce code: Code :
|
||
|
|
00
|
|
|
#10 | ||
![]() ![]() ![]() |
Non, il y a encore plus simple mais cela dépend comment tu as construit ta liste - elle doit avoir 2 colonne avec des Largeurs colonnes 0cm;2cm et bindé sur la Colonne 1 où les champs ChampNumDegrée et Degrée sont dans la source :
Code :
SELECT ChampNumDegrée, Degrée FROM MaTable ORDER BY ChampNumDegrée
Code :
Non, alors le plus simple est le mieux Argy
__________________
Ils comptent sur vous... Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment. Web Site ‡ @Mail Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007 Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010 MDB Viewer : Visionneuse Access v4.0 |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com