MAJ comobo box dans un formulaire Access

MAJ comobo box dans un formulaire Access - VB/VBA/VBS - Programmation

Marsh Posté le 07-02-2005 à 15:49:29    

Bonjour,
 
J'ai crée un forms sous Access, qui édite une table d'une base de données et ajoute des enregistrements.
J'ai 2 combox box (entre autres): dans la première l'utilisateur choisit dans une list une chaine de caractere (UN, DEUX ou TROIS par exemple).
Je voudrais mettre à jour la combo box numéro 2 suivant la string choisie dans la combo box 1. J'ai trouvé une solution : écrire le code VB suivant :
 
Private Sub member1_GotFocus()
Dim FirstComboBoxValue As String
FirstComboBoxValue = FirstComboBox.Value
SecondComboBox.RowSource = "SELECT dbo_perfiscal.id, dbo_perfiscal.membre1, dbo_perfiscal.pre_accessor FROM dbo_perfiscal WHERE (((dbo_perfiscal.pre_accessor) = """ & FirstComboBoxValue & """ ))ORDER BY dbo_perfiscal.membre1"
End Sub
 
Cela marche bien, le problème c'est que cela met à jour les autres enregistrements aussi. Je pensais que le code s'exécutait sur le record en cours, mais non cela impacte tous les autres records .... Est-ce normal ? Quelle est la solution ? Je crois que je pourrais essayer d'utiliser l'Expression Builder' disponible dans VB mais je ne sais pas trop m'en servir.
 
 
Merci de votre aide.
KilKenny

Reply

Marsh Posté le 07-02-2005 à 15:49:29   

Reply

Marsh Posté le 07-02-2005 à 15:58:43    

Quand tu modifies le RowSource d'un contrôle, ça va le modifier pour tous les enregistrements...

Reply

Marsh Posté le 07-02-2005 à 16:05:50    

ah OK merci pour ta réponse.
comment je fais donc pour modifier le row source de l'enregistrement courant ?
 
Merci

Reply

Marsh Posté le 07-02-2005 à 16:06:43    

Tu fais comme t'as fait, sauf que quand tu passes à un autre enregistrement, tu remet à zéro le RowSource

Reply

Marsh Posté le 07-02-2005 à 16:10:44    

Excuse moi je ne saisis pas. Je remets à zéro le row source de quel enregistrement ? et si je le mets à 0, il ne le fait pas pour tous les enregistrements ?
(Je ne vois pas bien ce que tu me conseille de faire en fait ...)
Merci pour ton aide (précieuse et rapide, c'est cool de ta part.

Reply

Marsh Posté le 07-02-2005 à 16:11:52    

J'veux dire le Rowsource de ta deuxième combobox, tu la remet comme elle devrait être au début

Reply

Marsh Posté le 07-02-2005 à 16:21:25    

Ouah je suis largué, peut-être aussi que je me suis mal exprimé au début.
J'ai un enregistrement n.
Combox1 = UN     Combox2=List affichée avec param UN
enregistrement n+1:
Combox1 = DEUX   Combox2=List affichée avec param DEUX
 
Et bien quand je clique sur la combo2 du record n+1 et bien cela change la valeur du n aussi. Donc quand tu dis : mettre à 0 le Rowsource de la deuxième combobox (n ou n+1 ?) et comment est ce que je fais cela (string vide?). Quel va être l'incidence.
 
Merci de ta patience.

Reply

Marsh Posté le 07-02-2005 à 16:26:20    

Ah ok je vois. Il faut effectivement mettre une string vide quand tu passes à la suite. En fait, quand tu passes à un autre enregistrement, le rowsourcene change pas, donc dans l'enregistrement n+1, combobox2 aura un rowsourcequi sera pas en rapport avec combobox1. Donc dès que tu passes à un autre enregistrement, faut changer le rowsource.

Reply

Marsh Posté le 07-02-2005 à 16:33:57    

oui mais l'utilisateur pourra cliquer où il veut (sur tous les records possibles, pas forcément sur n+1, mais sur n-4 aussi ...). Donc j'ai l'impression que ca devient compliquer, ou alors je ne vois pas bien ce que tu essayes de m'expliquer ... C'est pas possible de changer  
uniquement l'enregistrement courant dans un formulaire access ?

Reply

Marsh Posté le 07-02-2005 à 16:38:29    

En fait, dès que tu change d'enregistrement, tu exécutes la fonction member1_GotFocus, donc celle qui met le bon RowSource

Reply

Marsh Posté le 07-02-2005 à 16:38:29   

Reply

Marsh Posté le 07-02-2005 à 16:42:08    

oui c'est super embetant, car pour moi le row source dépend de ce qu'il a dans ma combo1 et c'est vraiment bizarre comme comportement de mettre à jour tous les enregistrements, je vois pas du tout comment m'en sortir. Ce n'est pas possible dans un formulaire Access d'utiliser un code comme Combobox.rowsource (relatif a l'enregistrement courant ?). Sinon quel est le moyen de modifier seulement l'enregistrement courant ?
 
Merci de ton aide.

Reply

Marsh Posté le 07-02-2005 à 16:46:46    

Sinon essaye de faire ça :
 
On va dire que ton formulaire s'appelle FormPouet.
 
Enregistre ta requête, et met ça dedans :

SELECT dbo_perfiscal.id, dbo_perfiscal.membre1, dbo_perfiscal.pre_accessor FROM dbo_perfiscal WHERE (((dbo_perfiscal.pre_accessor) = Forms![FormPouet]![FirstComboBoxValue]))ORDER BY dbo_perfiscal.membre1"


 
Ensuite tu la met en RowSource de ta ComboBox. Déjà regarde si ça marche. Sinon met dans l'évenement qui va bien (je sais plus lequel, quand on change d'enregistrement), fait un combobox2.requery()

Reply

Marsh Posté le 07-02-2005 à 17:16:50    

Bon j'ai essayé. C'est pareil. (je ne vois pas ce que dois faire le requery).
Je t'explique le comportement que je viens de voir en fait.
Je pensais que les autres enregistrement étaient modifiés mais mon collègue m'a suggeré autre chose. En fait quand je regarde le résultat dans la table, les autres records n'ont pas été modifiés (il garde la veleur initiale). Ce qui se passe en fait c'est que, dans le formulaire, la combo devient vide (je pensais qu'elle était modifié). Elle devient vide car ne pouvant afficher la valeur, elle affiche blanc. Il faudrait que je trouve un autre type de combox box (genre combo box avec des propriétés différentes (qui permette d'afficher une valeur qui ne soit pas dans sa liste ...)), est-ce que tu me suis ?
 
Nicolas

Reply

Marsh Posté le 07-02-2005 à 18:24:58    

D'où la solution que je t'ai proposé ;) En faisant un requery, ça remet à jour la combobox 2

Reply

Marsh Posté le 07-02-2005 à 18:37:15    

D'accord je comprendre à comprendre ton raisonnement, je vais essayer de trouver l'évènement qui va bien ... (change ?).
Merci;

Reply

Marsh Posté le 07-02-2005 à 18:39:42    

je ne vois pas .... J'ai le code suivant :
 
Private Sub member1_GotFocus()
Dim FirstAccessorValue As String
FirstAccessorValue = FirstAccessor.Value
member1.RowSource = "SELECT dbo_perfiscal.id, dbo_perfiscal.membre1, dbo_perfiscal.pre_accessor FROM dbo_perfiscal WHERE dbo_perfiscal.pre_accessor = """ & Forms![JCF Partners Reports Maintenance]!FirstAccessor.Value & """ ORDER BY dbo_perfiscal.membre1"
End Sub
 
Private Sub member1_Click()
member1.Requery
End Sub
 
 
 
Je vais essayer d'autres évènements ....

Reply

Marsh Posté le 07-02-2005 à 18:41:03    

Pour la requête, enregistre-la en temps que requête stockée (donc tu va dans le truc requête, tu va en mode SQL et tu inscrit la requête. Ensuite tu la met en RowSource, puis dans l'évenèment après changement d'enregistrement, tu met ton requery.

Reply

Marsh Posté le 07-02-2005 à 18:45:38    

j'ai essayé afterupdate, change, click, c'est pas ça ... je cherche

Reply

Marsh Posté le 07-02-2005 à 18:54:40    

j'étudie aussi la fonction Private Sub member1_NotInList(NewData As String, Response As Integer)
 
Si la donnée n'est pas dans la liste ...
Mais il ne passe même pas dedans, je comprends pas tout ...

Reply

Marsh Posté le 07-02-2005 à 19:03:48    

Bon je dois partir. Je te remercie bcp pour ton aide. Je continue demain matin à chercher.
Bonnne soirée.
Nicolas

Reply

Marsh Posté le 07-02-2005 à 19:04:04    

Ok :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed