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

Sélection multiple en critère de requête

9 réponses
Avatar
chertiti
Bonjour,
j'ai suivi la procédure décrite ici
http://officesystemaccess.seneque.net/ex_selection_multiple.htm
Malheureusement, je n'y connais rien en VBA, j'ai du faire une erreur mais
je ne vois pas où (j'ai pourtant fait des copier/coller :-)
Quand j'ouvre mon formulaire j'ai "variable objet ou variable bloc With non
définie", puis quand je vais sur débogage la ligne suivante est surlignée en
jaune : For Each varItm In Ctl.ItemsSelected.
Merci pour vos lumières
Etienne

9 réponses

Avatar
Gilbert
Bonjour,

Pour profiter des lumières des contributeurs de ce forum, encore faudrait-il
que tu leur fournisses l'ampoule à allumer.
En clair le code VBA complet de la procédure et pas seulement la ligne où se
produit l'erreur.

--
Cordialement,

Gilbert


"chertiti" a écrit dans le message de
news:
Bonjour,
j'ai suivi la procédure décrite ici
http://officesystemaccess.seneque.net/ex_selection_multiple.htm
Malheureusement, je n'y connais rien en VBA, j'ai du faire une erreur mais
je ne vois pas où (j'ai pourtant fait des copier/coller :-)
Quand j'ouvre mon formulaire j'ai "variable objet ou variable bloc With


non
définie", puis quand je vais sur débogage la ligne suivante est surlignée


en
jaune : For Each varItm In Ctl.ItemsSelected.
Merci pour vos lumières
Etienne


Avatar
chertiti
... oups désolé

J'ai donc une table avec deux champs « numéro » et « noms », elle se nomme
Clients.
J'ai créé une requête qui se nomme Requête1 (sans condition, elle affiche
simplement les données de la table Clients.
J'ai créé un formulaire (nom : formulaire1).
J'y ai créé un zone de liste (nom : Liste1) et dans contenu j'ai marqué
(copié :-) : « SELECT Clients.* FROM Clients WHERE CompareList([numéro]) =
True; », et j'ai mis « simple » dans selection multiple.
Le formulaire contient un bouton (nom : Commande0) avec sur clic une
[procédure évenementielle] :

Private Sub Commande0_Click()
If Not PrepareList(Me.Name, Me.Liste1.Name) Then
MsgBox "impossible de lancer la requête"
Else
DoCmd.OpenQuery "requête1"
End If
End Sub

J'ai créé un module (nom : Module1) :

Option Compare Database
Option Explicit
Dim Frm As Form
Dim Ctl As Control
Dim varItm 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

Voilà pour les ampoules.

Je précise également que je travail sur ACCESS 2002 en format de fichier
ACCESS2000.

Encore Merci
Cordialement

"Gilbert" a écrit :

Bonjour,

Pour profiter des lumières des contributeurs de ce forum, encore faudrait-il
que tu leur fournisses l'ampoule à allumer.
En clair le code VBA complet de la procédure et pas seulement la ligne où se
produit l'erreur.

--
Cordialement,

Gilbert


"chertiti" a écrit dans le message de
news:
> Bonjour,
> j'ai suivi la procédure décrite ici
> http://officesystemaccess.seneque.net/ex_selection_multiple.htm
> Malheureusement, je n'y connais rien en VBA, j'ai du faire une erreur mais
> je ne vois pas où (j'ai pourtant fait des copier/coller :-)
> Quand j'ouvre mon formulaire j'ai "variable objet ou variable bloc With
non
> définie", puis quand je vais sur débogage la ligne suivante est surlignée
en
> jaune : For Each varItm In Ctl.ItemsSelected.
> Merci pour vos lumières
> Etienne





Avatar
Gilbert
Bonjour,

N'as-tu pas exécuté la requête sans que le formulaire soit ouvert?
Dans ce cas le contrôle du formulaire n'est pas défini, ce qui provoque
l'erreur.

--
Cordialement,

Gilbert


"chertiti" a écrit dans le message de
news:
... oups désolé

J'ai donc une table avec deux champs « numéro » et « noms », elle se nomme
Clients.
J'ai créé une requête qui se nomme Requête1 (sans condition, elle affiche
simplement les données de la table Clients.
J'ai créé un formulaire (nom : formulaire1).
J'y ai créé un zone de liste (nom : Liste1) et dans contenu j'ai marqué
(copié :-) : « SELECT Clients.* FROM Clients WHERE CompareList([numéro]) > True; », et j'ai mis « simple » dans selection multiple.
Le formulaire contient un bouton (nom : Commande0) avec sur clic une
[procédure évenementielle] :

Private Sub Commande0_Click()
If Not PrepareList(Me.Name, Me.Liste1.Name) Then
MsgBox "impossible de lancer la requête"
Else
DoCmd.OpenQuery "requête1"
End If
End Sub

J'ai créé un module (nom : Module1) :

Option Compare Database
Option Explicit
Dim Frm As Form
Dim Ctl As Control
Dim varItm 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

Voilà pour les ampoules.

Je précise également que je travail sur ACCESS 2002 en format de fichier
ACCESS2000.

Encore Merci
Cordialement

"Gilbert" a écrit :

> Bonjour,
>
> Pour profiter des lumières des contributeurs de ce forum, encore


faudrait-il
> que tu leur fournisses l'ampoule à allumer.
> En clair le code VBA complet de la procédure et pas seulement la ligne


où se
> produit l'erreur.
>
> --
> Cordialement,
>
> Gilbert
>
>
> "chertiti" a écrit dans le message


de
> news:
> > Bonjour,
> > j'ai suivi la procédure décrite ici
> > http://officesystemaccess.seneque.net/ex_selection_multiple.htm
> > Malheureusement, je n'y connais rien en VBA, j'ai du faire une erreur


mais
> > je ne vois pas où (j'ai pourtant fait des copier/coller :-)
> > Quand j'ouvre mon formulaire j'ai "variable objet ou variable bloc


With
> non
> > définie", puis quand je vais sur débogage la ligne suivante est


surlignée
> en
> > jaune : For Each varItm In Ctl.ItemsSelected.
> > Merci pour vos lumières
> > Etienne
>
>
>


Avatar
chertiti
Re,
Non, j'ouvre en premier le formulaire1 et dès qu'il s'ouvre j'ai l'erreur
"variable objet ou variable de bloc With non définie" et quand je clique sur
débogage la ligne "For Each varItm In Ctl.ItemsSelected" en jaune. Quand je
clique sur fin, le formulaire1 s'ouvre mais ma liste1 est vide pas de trace
des numeros clients. Quand je clique sur commande0, il m'affiche "impossible
de lancer la requête" : normal vu que rien n'est selectionné. Je peux quand
même faire une selection sur une ligne vide et là en cliquant sur commande0,
la requête1 s'ouvre avec TOUS mes clients.
RRrrrr.... Pas facile de corriger une faute en Chinois quand on parle que
français !
Que de lacunes...
@bientôt

Etienne
Avatar
Gilbert
Bonjour,

J'ai reproduit dans une base vide ce que dit Raymond dans cet article et je
n'obtiens ce message que si j'ouvre la requête sans ouvrir le formulaire.
Peux-tu mettre ta base (allégée avec juste le formulaire la requête et la
table avec quelques enregistrements non confidentiels) sur
http://www.cijoint.fr/ pour que j'essaie de t'aider?
Merci

--
Cordialement,

Gilbert


"chertiti" a écrit dans le message de
news:
Re,
Non, j'ouvre en premier le formulaire1 et dès qu'il s'ouvre j'ai l'erreur
"variable objet ou variable de bloc With non définie" et quand je clique


sur
débogage la ligne "For Each varItm In Ctl.ItemsSelected" en jaune. Quand


je
clique sur fin, le formulaire1 s'ouvre mais ma liste1 est vide pas de


trace
des numeros clients. Quand je clique sur commande0, il m'affiche


"impossible
de lancer la requête" : normal vu que rien n'est selectionné. Je peux


quand
même faire une selection sur une ligne vide et là en cliquant sur


commande0,
la requête1 s'ouvre avec TOUS mes clients.
RRrrrr.... Pas facile de corriger une faute en Chinois quand on parle que
français !
Que de lacunes...
@bientôt

Etienne


Avatar
chertiti
Voici le lien avec ma base :
http://www.cijoint.fr/cjlink.php?file=cj200901/cijHm8ZY8g.zip
Encore merci

"Gilbert" a écrit :

Bonjour,

J'ai reproduit dans une base vide ce que dit Raymond dans cet article et je
n'obtiens ce message que si j'ouvre la requête sans ouvrir le formulaire.
Peux-tu mettre ta base (allégée avec juste le formulaire la requête et la
table avec quelques enregistrements non confidentiels) sur
http://www.cijoint.fr/ pour que j'essaie de t'aider?
Merci

--
Cordialement,

Gilbert


"chertiti" a écrit dans le message de
news:
> Re,
> Non, j'ouvre en premier le formulaire1 et dès qu'il s'ouvre j'ai l'erreur
> "variable objet ou variable de bloc With non définie" et quand je clique
sur
> débogage la ligne "For Each varItm In Ctl.ItemsSelected" en jaune. Quand
je
> clique sur fin, le formulaire1 s'ouvre mais ma liste1 est vide pas de
trace
> des numeros clients. Quand je clique sur commande0, il m'affiche
"impossible
> de lancer la requête" : normal vu que rien n'est selectionné. Je peux
quand
> même faire une selection sur une ligne vide et là en cliquant sur
commande0,
> la requête1 s'ouvre avec TOUS mes clients.
> RRrrrr.... Pas facile de corriger une faute en Chinois quand on parle que
> français !
> Que de lacunes...
> @bientôt
>
> Etienne





Avatar
Gilbert
Bonjour,

En fait tu as défini la source de ta liste avec le SQL qui devait être dans
la requête "requête1".
A l'ouverture du formulaire, pour initialiser le contenu de la liste, la
fonction CompareList est utilisée mais le controle Ctl ne l'est pas encore
ce qui provoque l'erreur.

Voici la base modifiée
http://www.cijoint.fr/cjlink.php?file=cj200901/cijx02ck9y.zip
--
Cordialement,

Gilbert


"chertiti" a écrit dans le message de
news:
Voici le lien avec ma base :
http://www.cijoint.fr/cjlink.php?file=cj200901/cijHm8ZY8g.zip
Encore merci

"Gilbert" a écrit :

> Bonjour,
>
> J'ai reproduit dans une base vide ce que dit Raymond dans cet article et


je
> n'obtiens ce message que si j'ouvre la requête sans ouvrir le


formulaire.
> Peux-tu mettre ta base (allégée avec juste le formulaire la requête et


la
> table avec quelques enregistrements non confidentiels) sur
> http://www.cijoint.fr/ pour que j'essaie de t'aider?
> Merci
>
> --
> Cordialement,
>
> Gilbert
>
>
> "chertiti" a écrit dans le message


de
> news:
> > Re,
> > Non, j'ouvre en premier le formulaire1 et dès qu'il s'ouvre j'ai


l'erreur
> > "variable objet ou variable de bloc With non définie" et quand je


clique
> sur
> > débogage la ligne "For Each varItm In Ctl.ItemsSelected" en jaune.


Quand
> je
> > clique sur fin, le formulaire1 s'ouvre mais ma liste1 est vide pas de
> trace
> > des numeros clients. Quand je clique sur commande0, il m'affiche
> "impossible
> > de lancer la requête" : normal vu que rien n'est selectionné. Je peux
> quand
> > même faire une selection sur une ligne vide et là en cliquant sur
> commande0,
> > la requête1 s'ouvre avec TOUS mes clients.
> > RRrrrr.... Pas facile de corriger une faute en Chinois quand on parle


que
> > français !
> > Que de lacunes...
> > @bientôt
> >
> > Etienne
>
>
>


Avatar
chertiti
.... Ok cela marche nettement mieux. Plus c'est GROS, moins on voit !

Raymond aurait pu mettre à la place de Instruction SQL de votre requête :

- Instruction SQL de votre requête1 :-)

J'espère que ma mésaventure pourra servir un quelqu'un... et que je ne t'ai
pas fait perdre trop de temps.

Un GRAND MERCI.

Très sincèrement.

Etienne

"Gilbert" a écrit :

Bonjour,

En fait tu as défini la source de ta liste avec le SQL qui devait être dans
la requête "requête1".
A l'ouverture du formulaire, pour initialiser le contenu de la liste, la
fonction CompareList est utilisée mais le controle Ctl ne l'est pas encore
ce qui provoque l'erreur.

Voici la base modifiée
http://www.cijoint.fr/cjlink.php?file=cj200901/cijx02ck9y.zip
--
Cordialement,

Gilbert


"chertiti" a écrit dans le message de
news:
> Voici le lien avec ma base :
> http://www.cijoint.fr/cjlink.php?file=cj200901/cijHm8ZY8g.zip
> Encore merci
>
> "Gilbert" a écrit :
>
> > Bonjour,
> >
> > J'ai reproduit dans une base vide ce que dit Raymond dans cet article et
je
> > n'obtiens ce message que si j'ouvre la requête sans ouvrir le
formulaire.
> > Peux-tu mettre ta base (allégée avec juste le formulaire la requête et
la
> > table avec quelques enregistrements non confidentiels) sur
> > http://www.cijoint.fr/ pour que j'essaie de t'aider?
> > Merci
> >
> > --
> > Cordialement,
> >
> > Gilbert
> >
> >
> > "chertiti" a écrit dans le message
de
> > news:
> > > Re,
> > > Non, j'ouvre en premier le formulaire1 et dès qu'il s'ouvre j'ai
l'erreur
> > > "variable objet ou variable de bloc With non définie" et quand je
clique
> > sur
> > > débogage la ligne "For Each varItm In Ctl.ItemsSelected" en jaune.
Quand
> > je
> > > clique sur fin, le formulaire1 s'ouvre mais ma liste1 est vide pas de
> > trace
> > > des numeros clients. Quand je clique sur commande0, il m'affiche
> > "impossible
> > > de lancer la requête" : normal vu que rien n'est selectionné. Je peux
> > quand
> > > même faire une selection sur une ligne vide et là en cliquant sur
> > commande0,
> > > la requête1 s'ouvre avec TOUS mes clients.
> > > RRrrrr.... Pas facile de corriger une faute en Chinois quand on parle
que
> > > français !
> > > Que de lacunes...
> > > @bientôt
> > >
> > > Etienne
> >
> >
> >





Avatar
Gilbert
Je suis content d'avoir pu t'aider.
Le temps que je passe ici n'est jamais perdu. Et je le passe volontairement.

--
Cordialement,

Gilbert


"chertiti" a écrit dans le message de
news:
.... Ok cela marche nettement mieux. Plus c'est GROS, moins on voit !

Raymond aurait pu mettre à la place de Instruction SQL de votre requête :

- Instruction SQL de votre requête1 :-)

J'espère que ma mésaventure pourra servir un quelqu'un... et que je ne


t'ai
pas fait perdre trop de temps.

Un GRAND MERCI.

Très sincèrement.

Etienne

"Gilbert" a écrit :

> Bonjour,
>
> En fait tu as défini la source de ta liste avec le SQL qui devait être


dans
> la requête "requête1".
> A l'ouverture du formulaire, pour initialiser le contenu de la liste, la
> fonction CompareList est utilisée mais le controle Ctl ne l'est pas


encore
> ce qui provoque l'erreur.
>
> Voici la base modifiée
> http://www.cijoint.fr/cjlink.php?file=cj200901/cijx02ck9y.zip
> --
> Cordialement,
>
> Gilbert
>
>
> "chertiti" a écrit dans le message


de
> news:
> > Voici le lien avec ma base :
> > http://www.cijoint.fr/cjlink.php?file=cj200901/cijHm8ZY8g.zip
> > Encore merci
> >
> > "Gilbert" a écrit :
> >
> > > Bonjour,
> > >
> > > J'ai reproduit dans une base vide ce que dit Raymond dans cet


article et
> je
> > > n'obtiens ce message que si j'ouvre la requête sans ouvrir le
> formulaire.
> > > Peux-tu mettre ta base (allégée avec juste le formulaire la requête


et
> la
> > > table avec quelques enregistrements non confidentiels) sur
> > > http://www.cijoint.fr/ pour que j'essaie de t'aider?
> > > Merci
> > >
> > > --
> > > Cordialement,
> > >
> > > Gilbert
> > >
> > >
> > > "chertiti" a écrit dans le


message
> de
> > > news:
> > > > Re,
> > > > Non, j'ouvre en premier le formulaire1 et dès qu'il s'ouvre j'ai
> l'erreur
> > > > "variable objet ou variable de bloc With non définie" et quand je
> clique
> > > sur
> > > > débogage la ligne "For Each varItm In Ctl.ItemsSelected" en jaune.
> Quand
> > > je
> > > > clique sur fin, le formulaire1 s'ouvre mais ma liste1 est vide pas


de
> > > trace
> > > > des numeros clients. Quand je clique sur commande0, il m'affiche
> > > "impossible
> > > > de lancer la requête" : normal vu que rien n'est selectionné. Je


peux
> > > quand
> > > > même faire une selection sur une ligne vide et là en cliquant sur
> > > commande0,
> > > > la requête1 s'ouvre avec TOUS mes clients.
> > > > RRrrrr.... Pas facile de corriger une faute en Chinois quand on


parle
> que
> > > > français !
> > > > Que de lacunes...
> > > > @bientôt
> > > >
> > > > Etienne
> > >
> > >
> > >
>
>
>