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

Pb attribut propriété dans le code

5 réponses
Avatar
LeSoviet
Bonjour,

J'ai 2 gros probl=E8mes sur un formulaire. Je vous donne la structure :
-dans l'ent=EAte, il y a 30 combobox.
-dans la zone d=E9tail, il y a 30 textbox.
Apr=E8s mise =E0 jour des combobox, le contenu s=E9lectionn=E9 est rapport=
=E9
dans une textbox.

Ci-dessous le code du formulaire :

Option Explicit

Private Sub Form_Open(Cancel As Integer)
Me.Form.RecordSource =3D "SELECT * FROM MaTable;"
RefreshQuery
End Sub

Private Sub Form_Load()
Dim ctl As Control
For Each ctl In Screen.ActiveForm.Section(1).Controls
If ctl.ControlType =3D acComboBox Then
ctl.AfterUpdate =3D MaFonction 'Ici pas de pb
End If
Next ctl
End Sub

Private Sub RefreshQuery()
Dim sql As String
Dim ctl As Control
sql =3D "SELECT Id, Nom, Prenom FROM MaRequete Where MaRequete.Id
<> 0 "
sql =3D sql & ";"

For Each ctl In Screen.ActiveForm.Section(1).Controls
If ctl.ControlType =3D acComboBox Then
With ctl
.RowSource =3D sql
.Requery
End With
End If
Next ctl

Private Sub Afficher_Click()
If Me.Afficher.Caption =3D "Afficher" Then
Me.Afficher.Caption =3D "Masquer"
Me.Section(acHeader).Visible =3D True
Else
Me.Afficher.Caption =3D "Masquer"
Me.Afficher.Caption =3D "Afficher"
Me.Section(acHeader).Visible =3D False
End If
End Sub


Voici les probl=E8mes :
-dans la sub RefreshQuery, si j'alimente les combobox par la boucle
For next..., elles n'ont pas de contenu. Il faut que je fasse pour
chacune d'entre elles :
Me.Combo1.RowSource =3D sql
Me. Combo1.Requery
.=2E.
Me.Combo30.RowSource =3D sql
Me. Combo30.Requery

Mais dans ce cas, j'ai un message =E0 la 20=E8me Textbox : trop de bases
ouvertes...

O=F9 est le pb ? Je suis sous XP, A2000 et le moteur Jet est actualis=E9.

Merci d'avance pour votre aide

5 réponses

Avatar
Raymond [mvp]
Bonjour.

il faut lire tables et non bases.
c'était un problème du moteur Jet 3.5 en version access 97. et qu'on a
retrouvé au départ sur le moteur jet 4.0 sur access 2000.
une mise à jour du moteur jet a suffit pour supprimer ce message.
pour mettre à jour ton Jet (version 4.?) :
http://support.microsoft.com/kb/829558/fr
il n'empêche que le nombre de pointeurs pour les tables peut arriver au
maximum à cause des combobox basées sur une requête qui peut avoir plusieurs
tables ( ex MaRequete ).
hormis le fait que tu vas résoudre ton problème avec une mise à jour , il
est anormal d'avoir 30 combobox avec la même source sur le même formulaire
et d'avoir 30 textbox basés sur ces mêmes combobox. c'est surtout là qye
réside ton problème. tu peux toujours exposer ce que tu fais et si quelqu'un
a une idée il te le fera savoir.
as-tu testé sans le .requery dans ta boucle ? il n'est pas indispensable et
ce serait plus efficace ?
--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
Non Stop Mix '07 - Paris. La nouvelle scène web fête la créativité !
http://www.comscamp.com/Tracker/Redirect.ashx?linkid°64304e-439a-45c7-9d2f-c3326db58273


"LeSoviet" a écrit dans le message de news:

Bonjour,

J'ai 2 gros problèmes sur un formulaire. Je vous donne la structure :
-dans l'entête, il y a 30 combobox.
-dans la zone détail, il y a 30 textbox.
Après mise à jour des combobox, le contenu sélectionné est rapporté
dans une textbox.

Ci-dessous le code du formulaire :

Option Explicit

Private Sub Form_Open(Cancel As Integer)
Me.Form.RecordSource = "SELECT * FROM MaTable;"
RefreshQuery
End Sub

Private Sub Form_Load()
Dim ctl As Control
For Each ctl In Screen.ActiveForm.Section(1).Controls
If ctl.ControlType = acComboBox Then
ctl.AfterUpdate = MaFonction 'Ici pas de pb
End If
Next ctl
End Sub

Private Sub RefreshQuery()
Dim sql As String
Dim ctl As Control
sql = "SELECT Id, Nom, Prenom FROM MaRequete Where MaRequete.Id
<> 0 "
sql = sql & ";"

For Each ctl In Screen.ActiveForm.Section(1).Controls
If ctl.ControlType = acComboBox Then
With ctl
.RowSource = sql
.Requery
End With
End If
Next ctl

Private Sub Afficher_Click()
If Me.Afficher.Caption = "Afficher" Then
Me.Afficher.Caption = "Masquer"
Me.Section(acHeader).Visible = True
Else
Me.Afficher.Caption = "Masquer"
Me.Afficher.Caption = "Afficher"
Me.Section(acHeader).Visible = False
End If
End Sub


Voici les problèmes :
-dans la sub RefreshQuery, si j'alimente les combobox par la boucle
For next..., elles n'ont pas de contenu. Il faut que je fasse pour
chacune d'entre elles :
Me.Combo1.RowSource = sql
Me. Combo1.Requery
...
Me.Combo30.RowSource = sql
Me. Combo30.Requery

Mais dans ce cas, j'ai un message à la 20ème Textbox : trop de bases
ouvertes...

Où est le pb ? Je suis sous XP, A2000 et le moteur Jet est actualisé.

Merci d'avance pour votre aide
Avatar
LeSoviet
Bonjour Raymond et merci pour la réponse.

Je suis allé voir sur le site de MS en lien et lors de l'installation,
apparement, ma version de jet est plus récente que celle contenue dans
le exe.

Concernant ce que je souhaite faire sur ce formulaire, il s'agit d'un
tableau de tournoi de 30 participants à tirage manuel, donc pour moi,
pour l'instant, je ne vois que cette conception (si qqun en a une
autre, je suis preneur).

Sinon, j'ai essayé sans le requery dans la boucle et le résultat est
le même, les combobox situées dans l'entête du formulaire sont vides.
Il faut que je passe par Me.Combobox.Rowsource = sql pour qu'elles
aient un contenu.

Merci d'avance pour votre aide
Avatar
Raymond [mvp]
Pour les 30 combobox on doit pouvoir créer une seule combobox avec tous les
noms et lorsqu'on va sur un contrôle texte faire composer le nom sur cette
combobox et le récupérer dans le textbox actif ?
il me semble que ce serait plus simple et tu supprimerais les problèmes.
--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
Non Stop Mix '07 - Paris. La nouvelle scène web fête la créativité !
http://www.comscamp.com/Tracker/Redirect.ashx?linkid°64304e-439a-45c7-9d2f-c3326db58273


"LeSoviet" a écrit dans le message de news:

Bonjour Raymond et merci pour la réponse.

Je suis allé voir sur le site de MS en lien et lors de l'installation,
apparement, ma version de jet est plus récente que celle contenue dans
le exe.

Concernant ce que je souhaite faire sur ce formulaire, il s'agit d'un
tableau de tournoi de 30 participants à tirage manuel, donc pour moi,
pour l'instant, je ne vois que cette conception (si qqun en a une
autre, je suis preneur).

Sinon, j'ai essayé sans le requery dans la boucle et le résultat est
le même, les combobox situées dans l'entête du formulaire sont vides.
Il faut que je passe par Me.Combobox.Rowsource = sql pour qu'elles
aient un contenu.

Merci d'avance pour votre aide
Avatar
LeSoviet
Re, merci Raymond pour l'idée.

Je vais développer ça et reviendrais pour dire ce qu'il en est.
Avatar
LeSoviet
Re,

Un immense MERCI RAYMOND. J'ai suivi ton conseil et ça fonctionne
impec.

Bon WE à tous