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

UTILISATION DE LISTE POUR CRITERE DE RECHERCHE DANS FORMULAIRE

13 réponses
Avatar
Marc
Bonjour

J'essayes de batir un formulaire avec 6 listes qui me servent a définir les
enr dans un formulaire suite a une recharche et de l'aide de R.SENEQUE j'ai
trouvé ce code que je duplique autant de fois que j'ai de listes si j'ai
tout compris....

petit soucis parfois le code bloque ici : For Each varItm1 In
Ctl1.ItemsSelected en me mettant "bloc sans with" ???! aie pb & de plus pour
ne pas obliger les personnes quant elle veuelnt tous les enr d'une liste
j'ai mis "*" dans chaque liste en début et la ça marche pas pour aide la
requete ressemble a cela :

SELECT RESULTAT PAR AXES.* FROM [RESULTAT PAR AXES] WHERE
(((CompareList([Rubrique]))=True) AND ((CompareList1([AXES]))=True));

avec une liste contenant des rubriques & l'autre des axes et un bouton MAJ
avec le code suivant :

If (Not PrepareList(Me.Name, Me.Liste1.Name)) Or (Not
PrepareList1(Me.Name, Me.Liste2.Name)) Then
MsgBox "impossible de lancer la requête"
Else
Me.DONNEES.Requery

End If




Option Compare Database
Option Explicit

Dim Frm As Form
Dim Ctl As Control
Dim varItm As Variant
Dim Frm1 As Form
Dim Ctl1 As Control
Dim varItm1 As Variant

Public Function PrepareList(FormName As String, _
ControlName As String) As Boolean
On Error GoTo Err_PrepareList
Set Frm = Forms(FormName)
Set Ctl = Frm(ControlName)
If Ctl.ItemsSelected.Count = 0 Then GoTo Err_PrepareList
PrepareList = True
Exit Function
Err_PrepareList:
PrepareList = False
End Function

Public Function CompareList(ParameterValue As Variant) As Boolean
For Each varItm In Ctl.ItemsSelected
If CStr(ParameterValue) = Ctl.ItemData(varItm) Then
CompareList = True
Exit Function
End If
Next varItm
CompareList = False
End Function

******** DUPLICATION*********

Public Function PrepareList1(FormName As String, _
ControlName As String) As Boolean
On Error GoTo Err_PrepareList1
Set Frm1 = Forms(FormName)
Set Ctl1 = Frm(ControlName)
If Ctl1.ItemsSelected.Count = 0 Then GoTo Err_PrepareList1
PrepareList1 = True
Exit Function
Err_PrepareList1:
PrepareList1 = False
End Function

Public Function CompareList1(ParameterValue1 As Variant) As Boolean
For Each varItm1 In Ctl1.ItemsSelected
If CStr(ParameterValue1) = Ctl1.ItemData(varItm1) Then
CompareList1 = True
Exit Function
End If
Next varItm1
CompareList1 = False
End Function

je recapitule pourquoi svp ça bloque et mets "bloc sans with" ?! et comme
lui faire comprendre dans ma liste que "*" et comme tous , en mettant ceci
dans la requete "comme comparelist([rubrique])" ?

Merci bcp Marc & bonne journée

10 réponses

1 2
Avatar
Thierry (ze Titi)
Bonjour Marc

2 petites choses avant de répondre. Par souci de clarté, proscris les abbréviations de ton langage, on est sur un forum, pas sur un téléphone mobile... ;-) Par ailleurs, toujours par souci de clarté, utilise la ponctuation, ça nous aidera à mieux comprendre. :o)

Dans ta requête, tu mets simplement le nom des contrôles. Je pense qu'il faut préciser le chemin complet vers lesdits contrôles, à savoir:

SELECT [RESULTAT PAR AXES].* FROM [RESULTAT PAR AXES] WHERE (((CompareList(Forms![tonFormulaire]![Rubrique]))=True) AND ((CompareList1(Forms![tonFormulaire]![AXES]))=True));


Dans ton message <470c49ac$0$21142$ du mercredi 10/10/2007 jour de Saint Ghislain, tu as pris l'initiative de nous narrer les faits suivants:
Bonjour

J'essayes de batir un formulaire avec 6 listes qui me servent a définir les
enr dans un formulaire suite a une recharche et de l'aide de R.SENEQUE j'ai
trouvé ce code que je duplique autant de fois que j'ai de listes si j'ai tout
compris....

petit soucis parfois le code bloque ici : For Each varItm1 In
Ctl1.ItemsSelected en me mettant "bloc sans with" ???! aie pb & de plus pour
ne pas obliger les personnes quant elle veuelnt tous les enr d'une liste j'ai
mis "*" dans chaque liste en début et la ça marche pas pour aide la requete
ressemble a cela :

SELECT RESULTAT PAR AXES.* FROM [RESULTAT PAR AXES] WHERE
(((CompareList([Rubrique]))=True) AND ((CompareList1([AXES]))=True));

avec une liste contenant des rubriques & l'autre des axes et un bouton MAJ
avec le code suivant :

If (Not PrepareList(Me.Name, Me.Liste1.Name)) Or (Not
PrepareList1(Me.Name, Me.Liste2.Name)) Then
MsgBox "impossible de lancer la requête"
Else
Me.DONNEES.Requery

End If




Option Compare Database
Option Explicit

Dim Frm As Form
Dim Ctl As Control
Dim varItm As Variant
Dim Frm1 As Form
Dim Ctl1 As Control
Dim varItm1 As Variant

Public Function PrepareList(FormName As String, _
ControlName As String) As Boolean
On Error GoTo Err_PrepareList
Set Frm = Forms(FormName)
Set Ctl = Frm(ControlName)
If Ctl.ItemsSelected.Count = 0 Then GoTo Err_PrepareList
PrepareList = True
Exit Function
Err_PrepareList:
PrepareList = False
End Function

Public Function CompareList(ParameterValue As Variant) As Boolean
For Each varItm In Ctl.ItemsSelected
If CStr(ParameterValue) = Ctl.ItemData(varItm) Then
CompareList = True
Exit Function
End If
Next varItm
CompareList = False
End Function

******** DUPLICATION*********

Public Function PrepareList1(FormName As String, _
ControlName As String) As Boolean
On Error GoTo Err_PrepareList1
Set Frm1 = Forms(FormName)
Set Ctl1 = Frm(ControlName)
If Ctl1.ItemsSelected.Count = 0 Then GoTo Err_PrepareList1
PrepareList1 = True
Exit Function
Err_PrepareList1:
PrepareList1 = False
End Function

Public Function CompareList1(ParameterValue1 As Variant) As Boolean
For Each varItm1 In Ctl1.ItemsSelected
If CStr(ParameterValue1) = Ctl1.ItemData(varItm1) Then
CompareList1 = True
Exit Function
End If
Next varItm1
CompareList1 = False
End Function

je recapitule pourquoi svp ça bloque et mets "bloc sans with" ?! et comme lui
faire comprendre dans ma liste que "*" et comme tous , en mettant ceci dans
la requete "comme comparelist([rubrique])" ?

Merci bcp Marc & bonne journée


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info

Avatar
Marc
Merci Thierry

ça fonctionne pas :( a ce niveau : If CStr(ParameterValue) =
Ctl.ItemData(varItm) Then (il met utilisation incorrect de Null) merci de
votre aide

ps : promis je m'achetes un Bescherelle :)
Marc



"Thierry (ze Titi)" a écrit dans le
message de news:
Bonjour Marc

2 petites choses avant de répondre. Par souci de clarté, proscris les
abbréviations de ton langage, on est sur un forum, pas sur un téléphone
mobile... ;-) Par ailleurs, toujours par souci de clarté, utilise la
ponctuation, ça nous aidera à mieux comprendre. :o)

Dans ta requête, tu mets simplement le nom des contrôles. Je pense qu'il
faut préciser le chemin complet vers lesdits contrôles, à savoir:

SELECT [RESULTAT PAR AXES].* FROM [RESULTAT PAR AXES] WHERE
(((CompareList(Forms![tonFormulaire]![Rubrique]))=True) AND
((CompareList1(Forms![tonFormulaire]![AXES]))=True));


Dans ton message <470c49ac$0$21142$ du mercredi
10/10/2007 jour de Saint Ghislain, tu as pris l'initiative de nous narrer
les faits suivants:
Bonjour

J'essayes de batir un formulaire avec 6 listes qui me servent a définir
les
enr dans un formulaire suite a une recharche et de l'aide de R.SENEQUE
j'ai
trouvé ce code que je duplique autant de fois que j'ai de listes si j'ai
tout
compris....

petit soucis parfois le code bloque ici : For Each varItm1 In
Ctl1.ItemsSelected en me mettant "bloc sans with" ???! aie pb & de plus
pour
ne pas obliger les personnes quant elle veuelnt tous les enr d'une liste
j'ai
mis "*" dans chaque liste en début et la ça marche pas pour aide la
requete
ressemble a cela :

SELECT RESULTAT PAR AXES.* FROM [RESULTAT PAR AXES] WHERE
(((CompareList([Rubrique]))=True) AND ((CompareList1([AXES]))=True));

avec une liste contenant des rubriques & l'autre des axes et un bouton
MAJ
avec le code suivant :

If (Not PrepareList(Me.Name, Me.Liste1.Name)) Or (Not
PrepareList1(Me.Name, Me.Liste2.Name)) Then
MsgBox "impossible de lancer la requête"
Else
Me.DONNEES.Requery

End If




Option Compare Database
Option Explicit

Dim Frm As Form
Dim Ctl As Control
Dim varItm As Variant
Dim Frm1 As Form
Dim Ctl1 As Control
Dim varItm1 As Variant

Public Function PrepareList(FormName As String, _
ControlName As String) As Boolean
On Error GoTo Err_PrepareList
Set Frm = Forms(FormName)
Set Ctl = Frm(ControlName)
If Ctl.ItemsSelected.Count = 0 Then GoTo Err_PrepareList
PrepareList = True
Exit Function
Err_PrepareList:
PrepareList = False
End Function

Public Function CompareList(ParameterValue As Variant) As Boolean
For Each varItm In Ctl.ItemsSelected
If CStr(ParameterValue) = Ctl.ItemData(varItm) Then
CompareList = True
Exit Function
End If
Next varItm
CompareList = False
End Function

******** DUPLICATION*********

Public Function PrepareList1(FormName As String, _
ControlName As String) As Boolean
On Error GoTo Err_PrepareList1
Set Frm1 = Forms(FormName)
Set Ctl1 = Frm(ControlName)
If Ctl1.ItemsSelected.Count = 0 Then GoTo Err_PrepareList1
PrepareList1 = True
Exit Function
Err_PrepareList1:
PrepareList1 = False
End Function

Public Function CompareList1(ParameterValue1 As Variant) As Boolean
For Each varItm1 In Ctl1.ItemsSelected
If CStr(ParameterValue1) = Ctl1.ItemData(varItm1) Then
CompareList1 = True
Exit Function
End If
Next varItm1
CompareList1 = False
End Function

je recapitule pourquoi svp ça bloque et mets "bloc sans with" ?! et comme
lui
faire comprendre dans ma liste que "*" et comme tous , en mettant ceci
dans
la requete "comme comparelist([rubrique])" ?

Merci bcp Marc & bonne journée


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info





Avatar
Thierry (ze Titi)
Tu pourrais donner le lien où tu as trouvé le code, s'il te plaît ?

--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info
Avatar
Thierry (ze Titi)
.../...
Oublie le post précédent, j'ai trouvé sur le site de Raymond.

Le problème doit venir du fait que tu lances le code alors qu'il peut ne rien y avoir de sélectionné dans l'une des listes, voire les deux...
En fait, tu dois remplacer le Or par un And avant le lancement de la requête:

If (Not PrepareList(Me.Name, Me.Liste1.Name)) And (Not PrepareList1(Me.Name, Me.Liste2.Name)) Then
MsgBox "impossible de lancer la requête"
Else
Me.DONNEES.Requery
End If

--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info
Avatar
Marc
Merci Thierry

j'essaye mais le or me permettais justement de ne selectionner qu'une liste
& non plusiseurs non ?

Marc
"Thierry (ze Titi)" a écrit dans le
message de news:
.../...
Oublie le post précédent, j'ai trouvé sur le site de Raymond.

Le problème doit venir du fait que tu lances le code alors qu'il peut ne
rien y avoir de sélectionné dans l'une des listes, voire les deux...
En fait, tu dois remplacer le Or par un And avant le lancement de la
requête:

If (Not PrepareList(Me.Name, Me.Liste1.Name)) And (Not
PrepareList1(Me.Name, Me.Liste2.Name)) Then
MsgBox "impossible de lancer la requête"
Else
Me.DONNEES.Requery
End If

--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info




Avatar
Thierry (ze Titi)
Sur ce point, d'accord. Mais dans ce cas, c'est ta requête qu'il faut
que tu revoies puisque tu fais appel à tes deux listes...

Dans ton message <470e15f9$0$12462$ du jeudi
11/10/2007 jour de Saint Firmin, tu as pris l'initiative de nous narrer
les faits suivants:
Merci Thierry

j'essaye mais le or me permettais justement de ne selectionner qu'une liste &
non plusiseurs non ?

Marc
"Thierry (ze Titi)" a écrit dans le message
de news:
.../...
Oublie le post précédent, j'ai trouvé sur le site de Raymond.

Le problème doit venir du fait que tu lances le code alors qu'il peut ne
rien y avoir de sélectionné dans l'une des listes, voire les deux...
En fait, tu dois remplacer le Or par un And avant le lancement de la
requête:

If (Not PrepareList(Me.Name, Me.Liste1.Name)) And (Not
PrepareList1(Me.Name, Me.Liste2.Name)) Then
MsgBox "impossible de lancer la requête"
Else
Me.DONNEES.Requery
End If

-- Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info





--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info


Avatar
Marc
Donc je mets le and ici : If (Not PrepareList(Me.Name, Me.Liste1.Name)) And
(Not PrepareList1(Me.Name, Me.Liste2.Name)) Then

et mets un or dans ma requete :
SELECT RESULTAT PAR AXES.* FROM [RESULTAT PAR AXES] WHERE
(((CompareList([Rubrique]))=True) or ((CompareList1([AXES]))=True));



j'ai compris non .?:))
Merci encore



"Thierry (ze Titi)" a écrit dans le
message de news:
Sur ce point, d'accord. Mais dans ce cas, c'est ta requête qu'il faut que
tu revoies puisque tu fais appel à tes deux listes...

Dans ton message <470e15f9$0$12462$ du jeudi
11/10/2007 jour de Saint Firmin, tu as pris l'initiative de nous narrer
les faits suivants:
Merci Thierry

j'essaye mais le or me permettais justement de ne selectionner qu'une
liste & non plusiseurs non ?

Marc
"Thierry (ze Titi)" a écrit dans le
message de news:
.../...
Oublie le post précédent, j'ai trouvé sur le site de Raymond.

Le problème doit venir du fait que tu lances le code alors qu'il peut ne
rien y avoir de sélectionné dans l'une des listes, voire les deux...
En fait, tu dois remplacer le Or par un And avant le lancement de la
requête:

If (Not PrepareList(Me.Name, Me.Liste1.Name)) And (Not
PrepareList1(Me.Name, Me.Liste2.Name)) Then
MsgBox "impossible de lancer la requête"
Else
Me.DONNEES.Requery
End If

-- Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info





--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






Avatar
Thierry (ze Titi)
Eh non, c'est plus compliqué que ça.

A la limite, si tu laisses le Or dans ta fonction, il faut inclure dans
CompareList que ta liste peut ne pas être remplie, ça doit donner

Public Function CompareList(ParameterValue As Variant) As Boolean
If Ctl.ItemsSelected.Count=0 Then
CompareListúlse
Exit Function
End If
For Each varItm In Ctl.ItemsSelected
If CStr(ParameterValue) = Ctl.ItemData(varItm) Then
CompareList = True
Exit Function
End If
Next varItm
CompareList = False
End Function

Bien sûr, le changement est à répercuter dans toutes les fonctions
CompareList...
A tester, je ne suis pas absolument certain de mon coup...

Dans ton message <470e2559$0$17285$ du jeudi
11/10/2007 jour de Saint Firmin, tu as pris l'initiative de nous narrer
les faits suivants:
Donc je mets le and ici : If (Not PrepareList(Me.Name, Me.Liste1.Name)) And
(Not PrepareList1(Me.Name, Me.Liste2.Name)) Then

et mets un or dans ma requete :
SELECT RESULTAT PAR AXES.* FROM [RESULTAT PAR AXES] WHERE
(((CompareList([Rubrique]))=True) or ((CompareList1([AXES]))=True));



j'ai compris non .?:))
Merci encore



"Thierry (ze Titi)" a écrit dans le message
de news:
Sur ce point, d'accord. Mais dans ce cas, c'est ta requête qu'il faut que
tu revoies puisque tu fais appel à tes deux listes...

Dans ton message <470e15f9$0$12462$ du jeudi
11/10/2007 jour de Saint Firmin, tu as pris l'initiative de nous narrer les
faits suivants:
Merci Thierry

j'essaye mais le or me permettais justement de ne selectionner qu'une
liste & non plusiseurs non ?

Marc
"Thierry (ze Titi)" a écrit dans le
message de news:
.../...
Oublie le post précédent, j'ai trouvé sur le site de Raymond.

Le problème doit venir du fait que tu lances le code alors qu'il peut ne
rien y avoir de sélectionné dans l'une des listes, voire les deux...
En fait, tu dois remplacer le Or par un And avant le lancement de la
requête:

If (Not PrepareList(Me.Name, Me.Liste1.Name)) And (Not
PrepareList1(Me.Name, Me.Liste2.Name)) Then
MsgBox "impossible de lancer la requête"
Else
Me.DONNEES.Requery
End If

-- Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info





-- Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info





--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info




Avatar
Marc
pffff moi qui pensais faire un truc tout "bête" avec 6 zones de liste je
selectionne mes criteres & hopp le résultat s'affiche !!!!:))

merci encore

"Thierry (ze Titi)" a écrit dans le
message de news:
Eh non, c'est plus compliqué que ça.

A la limite, si tu laisses le Or dans ta fonction, il faut inclure dans
CompareList que ta liste peut ne pas être remplie, ça doit donner

Public Function CompareList(ParameterValue As Variant) As Boolean
If Ctl.ItemsSelected.Count=0 Then
CompareListúlse
Exit Function
End If
For Each varItm In Ctl.ItemsSelected
If CStr(ParameterValue) = Ctl.ItemData(varItm) Then
CompareList = True
Exit Function
End If
Next varItm
CompareList = False
End Function

Bien sûr, le changement est à répercuter dans toutes les fonctions
CompareList...
A tester, je ne suis pas absolument certain de mon coup...

Dans ton message <470e2559$0$17285$ du jeudi
11/10/2007 jour de Saint Firmin, tu as pris l'initiative de nous narrer
les faits suivants:
Donc je mets le and ici : If (Not PrepareList(Me.Name, Me.Liste1.Name))
And (Not PrepareList1(Me.Name, Me.Liste2.Name)) Then

et mets un or dans ma requete :
SELECT RESULTAT PAR AXES.* FROM [RESULTAT PAR AXES] WHERE
(((CompareList([Rubrique]))=True) or ((CompareList1([AXES]))=True));



j'ai compris non .?:))
Merci encore



"Thierry (ze Titi)" a écrit dans le
message de news:
Sur ce point, d'accord. Mais dans ce cas, c'est ta requête qu'il faut
que tu revoies puisque tu fais appel à tes deux listes...

Dans ton message <470e15f9$0$12462$ du jeudi
11/10/2007 jour de Saint Firmin, tu as pris l'initiative de nous narrer
les faits suivants:
Merci Thierry

j'essaye mais le or me permettais justement de ne selectionner qu'une
liste & non plusiseurs non ?

Marc
"Thierry (ze Titi)" a écrit dans le
message de news:
.../...
Oublie le post précédent, j'ai trouvé sur le site de Raymond.

Le problème doit venir du fait que tu lances le code alors qu'il peut
ne rien y avoir de sélectionné dans l'une des listes, voire les
deux...
En fait, tu dois remplacer le Or par un And avant le lancement de la
requête:

If (Not PrepareList(Me.Name, Me.Liste1.Name)) And (Not
PrepareList1(Me.Name, Me.Liste2.Name)) Then
MsgBox "impossible de lancer la requête"
Else
Me.DONNEES.Requery
End If

-- Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info





-- Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info





--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info








Avatar
Marc
ça parait simple en image :)

http://www.cijoint.fr/cij41633208128346.jpg

Marc
"Marc" a écrit dans le message de news:
470e2e51$0$24295$
pffff moi qui pensais faire un truc tout "bête" avec 6 zones de liste je
selectionne mes criteres & hopp le résultat s'affiche !!!!:))

merci encore

"Thierry (ze Titi)" a écrit dans le
message de news:
Eh non, c'est plus compliqué que ça.

A la limite, si tu laisses le Or dans ta fonction, il faut inclure dans
CompareList que ta liste peut ne pas être remplie, ça doit donner

Public Function CompareList(ParameterValue As Variant) As Boolean
If Ctl.ItemsSelected.Count=0 Then
CompareListúlse
Exit Function
End If
For Each varItm In Ctl.ItemsSelected
If CStr(ParameterValue) = Ctl.ItemData(varItm) Then
CompareList = True
Exit Function
End If
Next varItm
CompareList = False
End Function

Bien sûr, le changement est à répercuter dans toutes les fonctions
CompareList...
A tester, je ne suis pas absolument certain de mon coup...

Dans ton message <470e2559$0$17285$ du jeudi
11/10/2007 jour de Saint Firmin, tu as pris l'initiative de nous narrer
les faits suivants:
Donc je mets le and ici : If (Not PrepareList(Me.Name, Me.Liste1.Name))
And (Not PrepareList1(Me.Name, Me.Liste2.Name)) Then

et mets un or dans ma requete :
SELECT RESULTAT PAR AXES.* FROM [RESULTAT PAR AXES] WHERE
(((CompareList([Rubrique]))=True) or ((CompareList1([AXES]))=True));



j'ai compris non .?:))
Merci encore



"Thierry (ze Titi)" a écrit dans le
message de news:
Sur ce point, d'accord. Mais dans ce cas, c'est ta requête qu'il faut
que tu revoies puisque tu fais appel à tes deux listes...

Dans ton message <470e15f9$0$12462$ du jeudi
11/10/2007 jour de Saint Firmin, tu as pris l'initiative de nous narrer
les faits suivants:
Merci Thierry

j'essaye mais le or me permettais justement de ne selectionner qu'une
liste & non plusiseurs non ?

Marc
"Thierry (ze Titi)" a écrit dans le
message de news:
.../...
Oublie le post précédent, j'ai trouvé sur le site de Raymond.

Le problème doit venir du fait que tu lances le code alors qu'il peut
ne rien y avoir de sélectionné dans l'une des listes, voire les
deux...
En fait, tu dois remplacer le Or par un And avant le lancement de la
requête:

If (Not PrepareList(Me.Name, Me.Liste1.Name)) And (Not
PrepareList1(Me.Name, Me.Liste2.Name)) Then
MsgBox "impossible de lancer la requête"
Else
Me.DONNEES.Requery
End If

-- Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info





-- Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info





--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info












1 2