OVH Cloud OVH Cloud

Liste déroulante suivant autre liste déroulante

6 réponses
Avatar
Jacky
Bonjour à tous,

J'essaie de filtrer une liste déroulante pour éviter de lister 400 lignes
d'une sous catégorie soit 20 catégorie de 20 sous catégorie. Donc j'ai deux
listes déroulantes:

Nom:Code catégorie - Source : Produits.Code catégorie
Contenu: SELECT DISTINCT Catégories.[Code catégorie], Catégories.[Nom de
catégorie] FROM Catégories ORDER BY Catégories.[Nom de catégorie];
2 Nom:Code Sous-catégorie - Source: Produits.Code Sous-catégorie
Contenu :SELECT [Sous-catégorie].[Code Sous-catégorie],
[Sous-catégorie].[Nom Sous-catégorie], [Sous-catégorie].[Code Catégorie] FROM
[Sous-catégorie] ORDER BY [Sous-catégorie].[Nom Sous-catégorie];
----------------------------------------------------------------------------
J'ai essayé ceci

Private Sub Code_Sous_catégorie_Click()
' Affiche un message si la zone de liste modifiable Code client est vide.
Dim strMsg As String, strTitre As String
Dim intStyle As Integer
Dim stLinkCriteria As String
stLinkCriteria = [Code catégorie]

If IsNull(Me![Code catégorie]) Or Me![Code catégorie] = "" Then
strMsg = "Vous devez sélectionner une catégorie"
strTitre = "Catégorie exigée"
intStyle = vbOKOnly
MsgBox strMsg, intStyle, strTitre
Cancel = True
End If

SELECT [Sous-catégorie].[Code Sous-catégorie], [Sous-catégorie].[Nom
Sous-catégorie], [Sous-catégorie].[Code Catégorie] FROM [Sous-catégorie]
WHERE ((([Sous-catégorie].[Code Catégorie])=stLinkCriteria)) ORDER BY
[Sous-catégorie].[Nom Sous-catégorie];
End Sub
------------------------------------------------------------------------------
J'aimerais que si catégorie est nul affiche tous
Et que si une valeur alors filtre les sous catégories

6 réponses

Avatar
LiR
Bonjour,

L'idée est de créer une clause WHERE pour filtrer uniquement si la première
liste contient une valeur.
En outre, il vaut mieux utiliser l'événement AfterUpdate du contrôle
Code_catégorie plutôt que l'événement Click du contrôle Code_Sous_catégorie.

Private Sub Code_catégorie_AfterUpdate()

Dim sWHERE as String
Dim sSQL As String

If Not IsNull(Me.Code_Sous_catégorie)
sWHERE = vbCrLf & "WHERE ([Code Catégorie]=" & Me.Code_catégorie & ")"
End If

sSQL = "SELECT [Code Sous-catégorie], [Nom Sous-catégorie], [Code
Catégorie] FROM [Sous-catégorie]" & sWHERE & " ORDER BY [Nom Sous-catégorie];"

Me.Code_Sous_catégorie.RowSource = sSQL

End Sub

Tu peux mettre par défaut comme source du la liste sous catégorie la requête
non filtrée, puisqu'à priori la liste des catégories vaut Null par défaut
(sauf si elle est liée à un champ, auquel cas il faut modifier un peu le code
précédent...)


Bonjour à tous,

J'essaie de filtrer une liste déroulante pour éviter de lister 400 lignes
d'une sous catégorie soit 20 catégorie de 20 sous catégorie. Donc j'ai deux
listes déroulantes:

Nom:Code catégorie - Source : Produits.Code catégorie
Contenu: SELECT DISTINCT Catégories.[Code catégorie], Catégories.[Nom de
catégorie] FROM Catégories ORDER BY Catégories.[Nom de catégorie];
2 Nom:Code Sous-catégorie - Source: Produits.Code Sous-catégorie
Contenu :SELECT [Sous-catégorie].[Code Sous-catégorie],
[Sous-catégorie].[Nom Sous-catégorie], [Sous-catégorie].[Code Catégorie] FROM
[Sous-catégorie] ORDER BY [Sous-catégorie].[Nom Sous-catégorie];
----------------------------------------------------------------------------
J'ai essayé ceci

Private Sub Code_Sous_catégorie_Click()
' Affiche un message si la zone de liste modifiable Code client est vide.
Dim strMsg As String, strTitre As String
Dim intStyle As Integer
Dim stLinkCriteria As String
stLinkCriteria = [Code catégorie]

If IsNull(Me![Code catégorie]) Or Me![Code catégorie] = "" Then
strMsg = "Vous devez sélectionner une catégorie"
strTitre = "Catégorie exigée"
intStyle = vbOKOnly
MsgBox strMsg, intStyle, strTitre
Cancel = True
End If

SELECT [Sous-catégorie].[Code Sous-catégorie], [Sous-catégorie].[Nom
Sous-catégorie], [Sous-catégorie].[Code Catégorie] FROM [Sous-catégorie]
WHERE ((([Sous-catégorie].[Code Catégorie])=stLinkCriteria)) ORDER BY
[Sous-catégorie].[Nom Sous-catégorie];
End Sub
------------------------------------------------------------------------------
J'aimerais que si catégorie est nul affiche tous
Et que si une valeur alors filtre les sous catégories


Avatar
Jacky
Bonjour LiR,
Merçi pour ta réponse, voici la version adaptée que j'ai utilisé, mais il y
a un petit problème je ne peux pas vérifier il m'affiche erreur de
compilation END SUB il ne s'arrete pas et continue après le END SUB ???
Private Sub Code_catégorie_Dirty(Cancel As Integer)

Dim sWHERE As String
Dim sSQL As String

If Not IsNull(Me.[Code Sous catégorie]) Then
sWHERE = vbCrLf & "WHERE ([Code Catégorie]=" & Me.[Code
catégorie] & ")"
End If
sSQL = "SELECT [Sous-catégorie].[Code Sous-catégorie],
[Sous-catégorie].[Nom Sous-catégorie], [Sous-catégorie].[Code Catégorie] FROM
[Sous-catégorie] & sWHERE & ORDER BY [Nom Sous-catégorie];"
Me.[Code Sous-catégorie].RowSource = sSQL
'Source d'origine du bouton sous catégorie
'SELECT [Sous-catégorie].[Code Sous-catégorie], [Sous-catégorie].[Nom
Sous-catégorie], [Sous-catégorie].[Code Catégorie] FROM [Sous-catégorie]
ORDER BY [Sous-catégorie].[Nom Sous-catégorie];
'Exemple donné et modifié plus haut
' sSQL = "SELECT [Code Sous-catégorie], [Nom Sous-catégorie], [Code
catégorie] FROM [Sous-catégorie] & sWHERE & ORDER BY [Nom Sous-catégorie];"
' Me.Code_Sous_catégorie.RowSource = sSQL

End Sub



Bonjour,

L'idée est de créer une clause WHERE pour filtrer uniquement si la première
liste contient une valeur.
En outre, il vaut mieux utiliser l'événement AfterUpdate du contrôle
Code_catégorie plutôt que l'événement Click du contrôle Code_Sous_catégorie.

Private Sub Code_catégorie_AfterUpdate()

Dim sWHERE as String
Dim sSQL As String

If Not IsNull(Me.Code_Sous_catégorie)
sWHERE = vbCrLf & "WHERE ([Code Catégorie]=" & Me.Code_catégorie & ")"
End If

sSQL = "SELECT [Code Sous-catégorie], [Nom Sous-catégorie], [Code
Catégorie] FROM [Sous-catégorie]" & sWHERE & " ORDER BY [Nom Sous-catégorie];"

Me.Code_Sous_catégorie.RowSource = sSQL

End Sub

Tu peux mettre par défaut comme source du la liste sous catégorie la requête
non filtrée, puisqu'à priori la liste des catégories vaut Null par défaut
(sauf si elle est liée à un champ, auquel cas il faut modifier un peu le code
précédent...)


Bonjour à tous,

J'essaie de filtrer une liste déroulante pour éviter de lister 400 lignes
d'une sous catégorie soit 20 catégorie de 20 sous catégorie. Donc j'ai deux
listes déroulantes:

Nom:Code catégorie - Source : Produits.Code catégorie
Contenu: SELECT DISTINCT Catégories.[Code catégorie], Catégories.[Nom de
catégorie] FROM Catégories ORDER BY Catégories.[Nom de catégorie];
2 Nom:Code Sous-catégorie - Source: Produits.Code Sous-catégorie
Contenu :SELECT [Sous-catégorie].[Code Sous-catégorie],
[Sous-catégorie].[Nom Sous-catégorie], [Sous-catégorie].[Code Catégorie] FROM
[Sous-catégorie] ORDER BY [Sous-catégorie].[Nom Sous-catégorie];
----------------------------------------------------------------------------
J'ai essayé ceci

Private Sub Code_Sous_catégorie_Click()
' Affiche un message si la zone de liste modifiable Code client est vide.
Dim strMsg As String, strTitre As String
Dim intStyle As Integer
Dim stLinkCriteria As String
stLinkCriteria = [Code catégorie]

If IsNull(Me![Code catégorie]) Or Me![Code catégorie] = "" Then
strMsg = "Vous devez sélectionner une catégorie"
strTitre = "Catégorie exigée"
intStyle = vbOKOnly
MsgBox strMsg, intStyle, strTitre
Cancel = True
End If

SELECT [Sous-catégorie].[Code Sous-catégorie], [Sous-catégorie].[Nom
Sous-catégorie], [Sous-catégorie].[Code Catégorie] FROM [Sous-catégorie]
WHERE ((([Sous-catégorie].[Code Catégorie])=stLinkCriteria)) ORDER BY
[Sous-catégorie].[Nom Sous-catégorie];
End Sub
------------------------------------------------------------------------------
J'aimerais que si catégorie est nul affiche tous
Et que si une valeur alors filtre les sous catégories




Avatar
LiR
Je n'ai pas très bien compris...

Quel est le message d'erreur exactement?

Par ailleurs tu as :
Me.[Code Sous-catégorie]
et
Me.[Code Sous catégorie] (sans tiret)

est-ce normal?

En outre, tu as placé le texte sWHERE dans le texte SQL et non le contenu de
la chaîne sWHERE.
La syntaxe de la construction de la chaîne sSQL est du genre :
sSQL ="SELECT * FROM TABLE" & sWHERE & " ORDER BY Champ;"
(ne pas oublier l'espace avant ORDER BY)
Et non :
sSQL ="SELECT * FROM TABLE sWHERE ORDER BY Champ;"




Bonjour LiR,
Merçi pour ta réponse, voici la version adaptée que j'ai utilisé, mais il y
a un petit problème je ne peux pas vérifier il m'affiche erreur de
compilation END SUB il ne s'arrete pas et continue après le END SUB ???
Private Sub Code_catégorie_Dirty(Cancel As Integer)

Dim sWHERE As String
Dim sSQL As String

If Not IsNull(Me.[Code Sous catégorie]) Then
sWHERE = vbCrLf & "WHERE ([Code Catégorie]=" & Me.[Code
catégorie] & ")"
End If
sSQL = "SELECT [Sous-catégorie].[Code Sous-catégorie],
[Sous-catégorie].[Nom Sous-catégorie], [Sous-catégorie].[Code Catégorie] FROM
[Sous-catégorie] & sWHERE & ORDER BY [Nom Sous-catégorie];"
Me.[Code Sous-catégorie].RowSource = sSQL
'Source d'origine du bouton sous catégorie
'SELECT [Sous-catégorie].[Code Sous-catégorie], [Sous-catégorie].[Nom
Sous-catégorie], [Sous-catégorie].[Code Catégorie] FROM [Sous-catégorie]
ORDER BY [Sous-catégorie].[Nom Sous-catégorie];
'Exemple donné et modifié plus haut
' sSQL = "SELECT [Code Sous-catégorie], [Nom Sous-catégorie], [Code
catégorie] FROM [Sous-catégorie] & sWHERE & ORDER BY [Nom Sous-catégorie];"
' Me.Code_Sous_catégorie.RowSource = sSQL

End Sub



Bonjour,

L'idée est de créer une clause WHERE pour filtrer uniquement si la première
liste contient une valeur.
En outre, il vaut mieux utiliser l'événement AfterUpdate du contrôle
Code_catégorie plutôt que l'événement Click du contrôle Code_Sous_catégorie.

Private Sub Code_catégorie_AfterUpdate()

Dim sWHERE as String
Dim sSQL As String

If Not IsNull(Me.Code_Sous_catégorie)
sWHERE = vbCrLf & "WHERE ([Code Catégorie]=" & Me.Code_catégorie & ")"
End If

sSQL = "SELECT [Code Sous-catégorie], [Nom Sous-catégorie], [Code
Catégorie] FROM [Sous-catégorie]" & sWHERE & " ORDER BY [Nom Sous-catégorie];"

Me.Code_Sous_catégorie.RowSource = sSQL

End Sub

Tu peux mettre par défaut comme source du la liste sous catégorie la requête
non filtrée, puisqu'à priori la liste des catégories vaut Null par défaut
(sauf si elle est liée à un champ, auquel cas il faut modifier un peu le code
précédent...)


Bonjour à tous,

J'essaie de filtrer une liste déroulante pour éviter de lister 400 lignes
d'une sous catégorie soit 20 catégorie de 20 sous catégorie. Donc j'ai deux
listes déroulantes:

Nom:Code catégorie - Source : Produits.Code catégorie
Contenu: SELECT DISTINCT Catégories.[Code catégorie], Catégories.[Nom de
catégorie] FROM Catégories ORDER BY Catégories.[Nom de catégorie];
2 Nom:Code Sous-catégorie - Source: Produits.Code Sous-catégorie
Contenu :SELECT [Sous-catégorie].[Code Sous-catégorie],
[Sous-catégorie].[Nom Sous-catégorie], [Sous-catégorie].[Code Catégorie] FROM
[Sous-catégorie] ORDER BY [Sous-catégorie].[Nom Sous-catégorie];
----------------------------------------------------------------------------
J'ai essayé ceci

Private Sub Code_Sous_catégorie_Click()
' Affiche un message si la zone de liste modifiable Code client est vide.
Dim strMsg As String, strTitre As String
Dim intStyle As Integer
Dim stLinkCriteria As String
stLinkCriteria = [Code catégorie]

If IsNull(Me![Code catégorie]) Or Me![Code catégorie] = "" Then
strMsg = "Vous devez sélectionner une catégorie"
strTitre = "Catégorie exigée"
intStyle = vbOKOnly
MsgBox strMsg, intStyle, strTitre
Cancel = True
End If

SELECT [Sous-catégorie].[Code Sous-catégorie], [Sous-catégorie].[Nom
Sous-catégorie], [Sous-catégorie].[Code Catégorie] FROM [Sous-catégorie]
WHERE ((([Sous-catégorie].[Code Catégorie])=stLinkCriteria)) ORDER BY
[Sous-catégorie].[Nom Sous-catégorie];
End Sub
------------------------------------------------------------------------------
J'aimerais que si catégorie est nul affiche tous
Et que si une valeur alors filtre les sous catégories






Avatar
Jacky
ReSalut, j'ai du faire une fausse manip sur le dernier test j'ai corrigé le
tiret et le guillemet. J'ai du avoir un bug impossible de refermer le
formulaire j'ai vidé le code du formulaire et les cases conservaient les
propriétés évenements vide. J'ai du alors corriger manuellement , donc tout
est normal maintenant.

Comme tu me l'a indiqué j'ai placé le code dans le controle Code catégorie.
Sauf qu'il m'affiche " ERREUR DE COMPILATION seuls les commentaires peuvent
apparaitre après END SUB", J'ai peut être mal rentré quelque chose, on dirait
qu'il continu après le END SUB:

Private Sub Code_catégorie_Dirty(Cancel As Integer)

Dim sWHERE As String
Dim sSQL As String

If Not IsNull(Me.[Code Sous-catégorie]) Then
sWHERE = vbCrLf & "WHERE ([Code catégorie]=" & Me.[Code
catégorie] & ")"
End If
sSQL = "SELECT [Code Sous-catégorie], [Nom Sous-catégorie], [Code
catégorie] FROM [Sous-catégorie]" & sWHERE & "ORDER BY [Nom Sous-catégorie];"
Me.[Code Sous-catégorie].RowSource = sSQL
Exit Sub

End Sub
Avatar
LiR
A mon avis le problème n'est pas dans ces lignes mais dans le reste de ton
module...
Le Exit Sub juste avant le End Sub ne change rien et est totalement inutile.


ReSalut, j'ai du faire une fausse manip sur le dernier test j'ai corrigé le
tiret et le guillemet. J'ai du avoir un bug impossible de refermer le
formulaire j'ai vidé le code du formulaire et les cases conservaient les
propriétés évenements vide. J'ai du alors corriger manuellement , donc tout
est normal maintenant.

Comme tu me l'a indiqué j'ai placé le code dans le controle Code catégorie.
Sauf qu'il m'affiche " ERREUR DE COMPILATION seuls les commentaires peuvent
apparaitre après END SUB", J'ai peut être mal rentré quelque chose, on dirait
qu'il continu après le END SUB:

Private Sub Code_catégorie_Dirty(Cancel As Integer)

Dim sWHERE As String
Dim sSQL As String

If Not IsNull(Me.[Code Sous-catégorie]) Then
sWHERE = vbCrLf & "WHERE ([Code catégorie]=" & Me.[Code
catégorie] & ")"
End If
sSQL = "SELECT [Code Sous-catégorie], [Nom Sous-catégorie], [Code
catégorie] FROM [Sous-catégorie]" & sWHERE & "ORDER BY [Nom Sous-catégorie];"
Me.[Code Sous-catégorie].RowSource = sSQL
Exit Sub

End Sub




Avatar
Jacky
Désolé, le problème venait du formulaire avec 2 boutons Close et ta requète
il ne fermait plus. J'appel ça un Fantom, erreur incompréhensible. SOLUTION
copier le formulaire effacer l'ancien et renommer la copie en originale. TON
TRUC DE LA REQUETE MARCHE DU TONNERRE JE TE REMERCIE
ENORMEMENT....YES!!!(pour faire young)


A mon avis le problème n'est pas dans ces lignes mais dans le reste de ton
module...
Le Exit Sub juste avant le End Sub ne change rien et est totalement inutile.


ReSalut, j'ai du faire une fausse manip sur le dernier test j'ai corrigé le
tiret et le guillemet. J'ai du avoir un bug impossible de refermer le
formulaire j'ai vidé le code du formulaire et les cases conservaient les
propriétés évenements vide. J'ai du alors corriger manuellement , donc tout
est normal maintenant.

Comme tu me l'a indiqué j'ai placé le code dans le controle Code catégorie.
Sauf qu'il m'affiche " ERREUR DE COMPILATION seuls les commentaires peuvent
apparaitre après END SUB", J'ai peut être mal rentré quelque chose, on dirait
qu'il continu après le END SUB:

Private Sub Code_catégorie_Dirty(Cancel As Integer)

Dim sWHERE As String
Dim sSQL As String

If Not IsNull(Me.[Code Sous-catégorie]) Then
sWHERE = vbCrLf & "WHERE ([Code catégorie]=" & Me.[Code
catégorie] & ")"
End If
sSQL = "SELECT [Code Sous-catégorie], [Nom Sous-catégorie], [Code
catégorie] FROM [Sous-catégorie]" & sWHERE & "ORDER BY [Nom Sous-catégorie];"
Me.[Code Sous-catégorie].RowSource = sSQL
Exit Sub

End Sub