Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

liaison zone de liste vers zone de texte

14 réponses
Avatar
ALF
bonjour,
j'essaye de pouvoir faire apparaitre une selection multiple issu d une zone
de liste sur une zone de texte..le resultat fait apparaitre la 1ere selection
de la liste mais pas les autres...
avez vous une idee??...
Voici la procedure installée sur propriete/evenement/Apres mise a jour:

Private Sub ZLISTE_DR_AfterUpdate()
Dim varI As Variant
Dim strFiltre As String

strFiltre = ""
If Me.[ZLISTE DR].ItemsSelected.Count = 0 Then
MsgBox "Aucun client n'a été sélectionné"
Else
For Each varI In Me![ZLISTE DR].ItemsSelected
If strFiltre <> "" Then strFiltre = strFiltre & "OR"
strFiltre = strFiltre & "[DR]='" & Me![ZLISTE DR].ItemData(varI) & "'"
Next varI
Me.ZTAMPON = Me.[ZLISTE DR].Column(0, Me.[ZLISTE DR].ListIndex)
Me.ZLISTE_US.Requery
End If

End Sub

ZLISTE DR =zone de liste ZTAMPON= zone de texte

MERCI.
--
ALF

4 réponses

1 2
Avatar
ALF
Bonjour,

Merci pour toutes ces explications qui me seront trés utiles à l'avenir...
un petit detail subsiste...à savoir que dans le cas ou si je ne clique rien
dans ZLISTE DR, ZLISTE US affichera tousles items..tu m'avais dit de mettre
en commentaire dans la Form load() leligne suivante:
Me.[ZLISTE US].RowSource = ""...aparemment cela ne marche pas dans ce
cas..par contre,cela marche si l'on met:
Me.[ZLISTE US].RowSource = Me.[ZLISTE US].Tag

Merci.

--
ALF



Bonsoir,

1 - Le SQL impose de préfixer les champs du nom de la table/requête
source (comme [FILTRE DR].US) dans le seul cas où l'origine du champ est
ambigü, c'est à dire qu'il peut provenir de plusieurs tables/requêtes
présentes dans la requête.
Sinon, cela n'est pas nécessaire ce qui est ton cas d'après tes posts.

2 - Le ; est la marque de fin d'une instruction SQL dans 95% des cas.
Comme je teste sa présence pour construire le SQL de la LISTE US et que
je n'ai pas fait de test d'absence (pour faire vite), son absence
génererait une erreur. (Mais on peut toujours améliorer).

3 - La propriété Tag (Remarque en french) permet de stocker une valeur
(dans ton cas, le SQL initial de LISTE US), car si je ne passe pas par
là, au clic suivant sur LISTE DR, le SQL de LISTE US que je récupèrerai
contiendrait une clause WHERE (suite au 1er clic sur LISTE DR) et donc
le traitement pour l'éliminer serait fastidieux. En fait la propriété
Tag peut être utilisée comme un genre de 'mémoire'.

4 - Sélectionner tous les éléments de la liste LISTE DR reviendrait à ne
rien filtrer (comme te l'a déjà indiqué Pierre(3Stone)). Donc si tu ne
cliques rien dans LISTE DR, LISTE US Affichera tous les items si tu mets
en commentaire dans la Form_Load() la ligne
Me.[LISTE US].RowSource = ""
Maintenant, si tu veux, quand tu déselectionnes les items de LISTE DR,
afficher tous les items dans Liste US, il te suffit de mettre avant la
MsgBox:
Me![LISTE US].RowSource = Me![LISTE US].Tag
Me![LISTE US].Requery

Je t'avais proposé Me![LISTE US].RowSource = "" car quand plus d'item
sélectionné dans LISTE DR, LISTE US n'affiche rien.

Bonjour,
c'est parfait cela marche mais il faut cependant faire Select [FILTRE
DR].DR, [FILTRE DR].US From[FILTRE DR]; 'au lieu de Select DR, US From[FILTRE
DR]; sinon cela ne marche pas...
un grand MERCI, Eric, pour ton savoir faire...
pour satisfaire ma curiosité,peux tu m'expliquer
1) à quoi sert ce ;final à la fin du sql et pourquoi est ce si important??
2)à quoi sert la fonction Tag??que je ne connais pas..

Merci encore pour tout...


ALF




Bonjour,

Oui, j'avais, par copier-coller, fait une erreur. Il s'agit bien de
LISTE_DR_AfterUpdate()

Reprenons au début.

1- Supprimes le critere (DR = [Formulaires]![CHOIX DR]![ZTAMPON]) dans
ta requête Filtre DR et le tri s'il y en a un.

2 - A Propriete/Donnée/Contenu de ta liste ZLISTE US, mets :
Select DR, US From [Filtre DR]; '(très imporant le ; final)
puisque ta requête n'a que 2 champs.
Onglet Format de ZLISTE US, propriété Largeur des colonnes :
ne met rien pour afficher les 2 colonnes.

3 - Sur l'évènement Chargement du formulaire:
Private Sub Form_Load()
Me.[LISTE US].Tag = Me.[LISTE US].RowSource
' si on veut LISTE US vide au 1er affichage
Me.[LISTE US].RowSource = ""
End Sub

4 - Sur l'évènement Après Mise à jour de ZLISTE DR
Private Sub LISTE_DR_AfterUpdate()
Dim varI As Variant
Dim strFiltre As String
strFiltre = ""
If Me![LISTE DR].ItemsSelected.Count = 0 Then
Me![LISTE US].RowSource = ""
MsgBox "Aucun client n'a été sélectionné"
Else
For Each varI In Me![LISTE DR].ItemsSelected
If strFiltre <> "" Then strFiltre = strFiltre & " OR "
strFiltre = strFiltre & "[DR]='" & Me![LISTE
DR].ItemData(varI) & "'"
Next varI
Me.ZNTAMPON = strFiltre
strSQL = Left(Me![LISTE US].Tag, InStr(Me![LISTE US].Tag, ";") - 1)
strSQL = strSQL & " Where " & ZNTAMPON
Me![LISTE US].RowSource = strSQL
Me![LISTE US].Requery
End If
End Sub

Ca devrait marcher. On peut améliorer par la suite.


re,
cela ne marche toujours pas,ZLISTE US reste vide...
est ce bien sur AFTER UPDATE () de ZLISTE US qu'il faut modifier la
procedure ou bien est ce sur ZLISTE DR?? De toute facon j'ai essaye les deux
pour le meme resultat...
je precise que la requete FILTRE DR(source de ZLISTE US) a un critere sur le
champs DR = [Formulaires]![CHOIX DR]![ZTAMPON] mais que la
propriete/donnees/contenu =FILTRE DR
je peux eventuellement si c'est possible de faire parvenir ma base de donnee
qui n'est pas lourde pour que tu puisse mieux voir le probleme...
Merci..


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr






Avatar
Eric
re,

Tu me surprends là, car au chargement du formulaire, le RowSource de
zListeUS est un Select DR, US From ... donc si on ne modifie pas son
RowSource au moment du chargement, elle ne sera pas vide.

Bonjour,

tu m'avais dit de mettre
en commentaire dans la Form load() leligne suivante:
Me.[ZLISTE US].RowSource = ""...aparemment cela ne marche pas dans ce
cas..par contre,cela marche si l'on met:
Me.[ZLISTE US].RowSource = Me.[ZLISTE US].Tag

Merci.



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
ALF
re,
je confirme cela: au chargement ZLISTE US arrive avec tous ses elements
selectionnes,c'est bien cela que je recherchais...
si je selectionne alors 1 element dans ZLISTE DR j'aurais sa correspondance
dans ZLISTE US...Et si je deselectionne tout sur ZLISTE DR j'aurais alors
tout les elements de US selectionnes...
ces resultats sont obtenus avec ceci dans Form Load():

Private Sub Form_Load()
Me.ZLISTE_US.Tag = Me.ZLISTE_US.RowSource
End Sub

Et ceci dans ZLISTE_DR_AfterUpdate():

Private Sub ZLISTE_DR_AfterUpdate()

Dim varI As Variant
Dim strFiltre As String

strFiltre = ""
If Me.[ZLISTE DR].ItemsSelected.Count = 0 Then
Me.ZLISTE_US.RowSource = Me.ZLISTE_US.Tag
Me.ZLISTE_US.Requery
MsgBox "Aucun client n'a été sélectionné"
Else
For Each varI In Me![ZLISTE DR].ItemsSelected
If strFiltre <> "" Then strFiltre = strFiltre & " OR "
strFiltre = strFiltre & "[DR]='" & Me![ZLISTE DR].ItemData(varI) & "'"
Next varI
Me.ZTAMPON = strFiltre
strSQL = Left(Me.ZLISTE_US.Tag, InStr(Me.ZLISTE_US.Tag, ";") - 1)
strSQL = strSQL & " WHERE " & ZTAMPON
Me.ZLISTE_US.RowSource = strSQL
Me![ZLISTE US].Requery
End If
End Sub

Merci.
--
ALF



re,

Tu me surprends là, car au chargement du formulaire, le RowSource de
zListeUS est un Select DR, US From ... donc si on ne modifie pas son
RowSource au moment du chargement, elle ne sera pas vide.

Bonjour,

tu m'avais dit de mettre
en commentaire dans la Form load() leligne suivante:
Me.[ZLISTE US].RowSource = ""...aparemment cela ne marche pas dans ce
cas..par contre,cela marche si l'on met:
Me.[ZLISTE US].RowSource = Me.[ZLISTE US].Tag

Merci.



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Eric
re,
On est bien d'accord.

Sur le post précédent, tu disais :
"par contre,cela marche si l'on met:
Me.[ZLISTE US].RowSource = Me.[ZLISTE US].Tag"
dans le Form_Load()

Pour la routine sur le After_Update, c'est ce que je te disais au point
4 "Maintenant ... ..."

L'essentiel est que ça fonctionne.

re,
je confirme cela: au chargement ZLISTE US arrive avec tous ses elements
selectionnes,c'est bien cela que je recherchais...
si je selectionne alors 1 element dans ZLISTE DR j'aurais sa correspondance
dans ZLISTE US...Et si je deselectionne tout sur ZLISTE DR j'aurais alors
tout les elements de US selectionnes...
ces resultats sont obtenus avec ceci dans Form Load():

Private Sub Form_Load()
Me.ZLISTE_US.Tag = Me.ZLISTE_US.RowSource
End Sub

Et ceci dans ZLISTE_DR_AfterUpdate():

Private Sub ZLISTE_DR_AfterUpdate()

Dim varI As Variant
Dim strFiltre As String

strFiltre = ""
If Me.[ZLISTE DR].ItemsSelected.Count = 0 Then
Me.ZLISTE_US.RowSource = Me.ZLISTE_US.Tag
Me.ZLISTE_US.Requery
MsgBox "Aucun client n'a été sélectionné"
Else
...
End If
End Sub

Merci.


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

1 2