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

Code VBA, sélection Multiple

1 réponse
Avatar
Gabriel Racine
Voilà,

J'ai réussi à me créer un code pour me permettre dans mon formulaire de
faire des sélections multiples en cascade. Voici un peu comment il fonctionne.

Ma première zone de liste possède comme valeurs celles de la première
colonne de ma table et lorsque je sélectionne un ou plusieurs choix, ma 2è
zone de liste prendra pour RowSource la 2è colonne de ma table ainsi que pour
condition WHERE les sélections faites dans ma première zone de liste. Jusqu'à
maintenant tout fonctionne.

Par contre, je voudrais que lorsque je sélectionne un ou plusieurs éléments
de ma 2è zone de liste, ma 3e zone de liste prenne pour RowSource la 3e
colonne de ma table et pour Conditions WHERE les sélections faites
précédemment dans ma 1ère zone de liste et celles faites dans ma 2è zone de
listes. J'ai réussi à le faire en parti, sauf qu'il ne prend en considération
que la première Valeur de ma 1ère zone de liste seulement, peu importe la
sélection que j'y ai fait. Voici à quoi ressemble mon code

Private Sub Liste0_Click() ' Lorsque je clique voici ce qui se passe

Dim Q As String


Q = "SELECT DISTINCT Colonne 2 FROM tbl_Prix WHERE (false)"
'Sélectionne la colonne Segment de la table Prix

For i = 0 To Liste0.ListCount - 1
If Liste0.Selected(i) Then
Q = Q & " OR (Colonne 1 ='" & Liste0.Column(0, i) & "')"
End If
Next i

Liste2.RowSource = Q 'La liste 2 prendra les valeurs de Q
Liste2.Requery 'La liste 2 se rafraichira sur chaque clic
MsgBox Q

End Sub

Private Sub Liste2_Click()

Dim Q As String
Dim R As String


Q = "SELECT DISTINCT Colonne 3 FROM tbl_Prix WHERE (false) "
'Sélectionne la colonne Segment de la table Prix


R = "OR (Colonne 1 ='" & Liste0.Column(0, i) & "')" 'Condition
WHERE = OR colonne Brasseur seulement les sélections faites dans la première
zone de liste


For i = 0 To Liste2.ListCount - 1
If Liste2.Selected(i) Then
Q = Q & R & " AND (Colonne 2 ='" & Liste2.Column(0, i) & "')"
End If
Next i
MsgBox Q
Liste4.RowSource = Q 'La liste 2 prendra les valeurs de Q
Liste4.Requery 'La liste 2 se rafraichira sur chaque clic

End Sub

Cordialement,

--
Gabriel Racine

1 réponse

Avatar
Gloops
Gabriel Racine a écrit, le 11/07/2007 16:36 :
Dim Q As String
Dim R As String


Q = "SELECT DISTINCT Colonne 3 FROM tbl_Prix WHERE (false) "
'Sélectionne la colonne Segment de la table Prix


R = "OR (Colonne 1 ='" & Liste0.Column(0, i) & "')" 'Cond ition
WHERE = OR colonne Brasseur seulement les sélections faites dans la première
zone de liste



Bonjour,

R est fixe, puisqu'en dehors de la boucle.

Donc, il serait plus clair de ne pas mettre de i dedans.



For i = 0 To Liste2.ListCount - 1
If Liste2.Selected(i) Then
Q = Q & R & " AND (Colonne 2 ='" & Liste2.Column(0, i) & "')"
End If
Next i
MsgBox Q
Liste4.RowSource = Q 'La liste 2 prendra les valeurs de Q
Liste4.Requery 'La liste 2 se rafraichira sur chaque clic

End Sub

Cordialement,