Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/05/2011, 15h53   #1
Invité de passage
 
Homme
gérant de portefeuille
Inscription : avril 2011
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : gérant de portefeuille
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 13
Points : 4
Points : 4
Par défaut Mise à jour zone de texte à partir d'une requete VBA

Bonjour à tous,

Je tourne vers vous car je ne trouve aucune réponse à ma question.
Je souhaite mettre à jour une zone de texte dans un formulaire à partir d'une requête en VBA.
Pour faire court, j'ai 2 tables: client et compte
Dans la table compte, le champ index_client fait référence au client dans la table client.

J'ouvre un formulaire et en fonction du numéro de compte, je veux le nom du client. Je fais un requête sur l'index_client de la table compte, puis une requête sur le nom dans la table client ou l'index= l'index_client. Rien de compliqué.
Je fais ca dans un module, je l'exécute et ca marche.
En revanche je veux que ca s'exécute tout seul, donc après le chargement des données.
Je mets mon code dans une procédure évènementielle Afterupdate() et rien ne se passe
Quand je clique sur mon zone de texte, Access m'alerte en disant qu'il ne trouve pas la macro
Je vous mets le code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
Private Sub Txt_nom_Afterupdate()
 
Dim db As DAO.Database, rst As DAO.Recordset
Dim sSQL As String
Dim index As Integer
Dim ncompte As String
 
Set db = CurrentDb
ncompte = Me.txtn_compte.Value
sSQL = "SELECT [index_client] FROM [table_compte] WHERE [n_compte]='" & ncompte & "';"
 
 
Set rst = db.OpenRecordset(sSQL, dbOpenSnapshot, dbReadOnly)
index = rst("index_client")
 
sSQL = "SELECT [table_client].[civilite_client], [table_client].[nom_client], [table_client].[prenom_client] FROM table_client WHERE [table_client].[index_client]=" & index & ";"
Set rst = db.OpenRecordset(sSQL, dbOpenSnapshot, dbReadOnly)
 
Me!Txt_nom.Value = rst("civilite_client")
rst.Close: Set rst = Nothing
 
End Sub
Évidemment je le mets dans le bon FORM. J'ai pas dû faire un truc, mais quoi??
Merci de votre aide.

Mjcom
mjcom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 18h56   #2
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Bonjour.

Ce qui est bizarre c'est que tu exploites le contrôle txtn_compte, alors que l'évènement est la mise à jour de Txt_Nom.

On aurait plutôt imaginé
Code :
Private Sub txtn_compte_Afterupdate()
Par ailleurs, ta première requête n'est pas indispensable. Tu aurais l'index avec
Code :
index= DLookUp("index_client"; "table_compte", " n_compte=""" & ncompte & """;"
Et pour la deuxième, tu peux aussi faire un DLookUp, puisque tu ne cherches qu'une valeur.

Le plus bizarre dans ton cas c'est que tu n'aies pas ces champs dans la source du formulaire et du coup, on se demande quelle est la source actuelle...

Cordialement,

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 18h58   #3
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
bonsoir mjcom

Citation:
Envoyé par mjcom Voir le message
J'ouvre un formulaire et en fonction du numéro de compte, je veux le nom du client.
Code :
1
2
3
4
5
6
7
8
Private Sub Txt_nom_Afterupdate()

...
Me!Txt_nom.Value = rst("civilite_client")
...

End Sub
Apparemment ta zone de texte Txt_Nom est celle qui comporte la civilité du client

[EDIT] grillé par Pgz que je salue [/EDIT]

On peut également économiser un recordset avec une seule requête avec la jointure [table_compte]---[table_client]

Code sql :
1
2
3
4
SELECT CL.[civilite_client], CL.[nom_client],...
FROM [table_client] CL INNER JOIN [table_compte] CO
ON CL.[index_client]=CO.[index_client]
WHERE CO.[n_compte]=...
f-leb est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 19h10   #4
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 615
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 615
Points : 30 959
Points : 30 959
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

En plus des conseils de mes prédécesseurs que je salues, je t'invite à lire ce tuto :

Affichage de données dans des Labels, Zones de texte ou MsgBox.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 10h07   #5
Invité de passage
 
Homme
gérant de portefeuille
Inscription : avril 2011
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : gérant de portefeuille
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 13
Points : 4
Points : 4
Bonjour,
Merci pour vos réponses.
Citation:
Envoyé par pgz Voir le message

Ce qui est bizarre c'est que tu exploites le contrôle txtn_compte, alors que l'évènement est la mise à jour de Txt_Nom.

On aurait plutôt imaginé
Code :
Private Sub txtn_compte_Afterupdate()
Je comprends pourquoi ca ne fonctionne pas. J'ai donc changé le code de place, et rien n'y fait.

Citation:
Envoyé par pgz Voir le message
Le plus bizarre dans ton cas c'est que tu n'aies pas ces champs dans la source du formulaire et du coup, on se demande quelle est la source actuelle...
Là je ne comprends pas du tout ce que tu as voulu dire.
J'ai bien lu aussi le tuto sur les Zones de Texte. A vrai dire je suis bloqué.

Pour être plus explicite, j'ai un 1er formulaire où je choisi un numéro de compte et des champs à sélectionner (checkbox) qui m'amène sur ce 2ème formulaire qui reprend le numéro de compte, et en fonction de ce numéro j'affiche les info du client.
Citation:
Envoyé par f-leb Voir le message
Apparemment ta zone de texte Txt_Nom est celle qui comporte la civilité du client
Que j'affiche la civilite ou le nom, c'est la même chose, du moment que ca marche. Juste le champ à afficher à modifier.

Merci encore pour votre aide
mjcom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 10h31   #6
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Bonjour.


Est-ce qu'il se passe quelque chose quand tu choisis un compte dans le premier formulaire?

Tu as 2 formulaires. Quels sont leurs noms? La procédure que tu as donnée est dans le module du premier? Ce premier formulaire est indépendant? Sinon, quelle est sa requête source? Le deuxième est indépendant? Sinon quelle est sa requête source.

Par exemple si le 2 ème formulaire a pour source la table client, il ne s'agit pas d'écrire le code client (index-client?), mais de filtrer sur cet identifiant.

Bonne journée,

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 11h30   #7
Invité de passage
 
Homme
gérant de portefeuille
Inscription : avril 2011
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : gérant de portefeuille
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 13
Points : 4
Points : 4
Finalement, j'ai 3 formulaires.
Mon 1er formulaire se nomme: CONSULTATION_PAR_COMPTE
Mon 2ème formulaire se nomme: FICHE_PERSO_COMPTE
Mon 3ème: CONSULTATION_COMPTE

Dans le 1er, je choisis un numéro de compte à partir d'une liste déroulante qui fait référence à la table compte. Puis je choisis, via un groupe d'option, si je veux fiche personnalisée ou une fiche par défaut. Je sélectionne donc "Personnalisée" Puis Valider.
J'arrive sur mon 2ème formulaire qui reprend le numéro de compte dans une textbox dont le nom est txt_num_cpt, dont la valeur par défaut est le numéro de compte de CONSULTATION_PAR_COMPTE
Code :
=[Formulaires]![CONSULTATION_PAR_COMPTE]![txtnum_compte]
Je coche qq checkbox (mais là n'est pas le problème pour l'instant). Je clic valider, j'arrive sur le 3è Formulaire: CONSULTATION_COMPTE

Je reprends le numéro de compte dans une textbox de nom txtn_compte, de source n_compte et valeur par défaut est
Code :
=[Formulaires]![FICHE_PERSO_COMPTE]![txt_num_cpt]
Donc a partir du compte, on va chercher toutes les infos dans la table compte dont l'index client. Et dans ma textbox Txt_nom, je voudrais afficher le nom du client, repris dans la table client avec l'index.

Je viens de tester le code suivant, sans apporter les modif que vous m'avez suggérées (car il faut que les comprenne):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub Form_open(Cancel As Integer)
 
Dim db As DAO.Database, rst As DAO.Recordset
Dim sSQL As String
Dim index As Integer
Dim ncompte As String
 
Set db = CurrentDb
ncompte = Me.txtn_compte.Value
sSQL = "SELECT [index_client] FROM [table_compte] WHERE [n_compte]='" & ncompte & "';"
 
 
Set rst = db.OpenRecordset(sSQL, dbOpenSnapshot, dbReadOnly)
index = rst("index_client")
 
sSQL = "SELECT [table_client].[civilite_client], [table_client].[nom_client], [table_client].[prenom_client] FROM table_client WHERE [table_client].[index_client]=" & index & ";"
Set rst = db.OpenRecordset(sSQL, dbOpenSnapshot, dbReadOnly)
 
Me.Txt_nom.Value = rst("nom_client")
rst.Close: Set rst = Nothing
 
End Sub
Celui-ci fonctionne, c'est peut-être pas du beau code, mais il fonctionne.
Ce qui me gène c'est que si l'utilisateur change d'enregistrement (suivant ou précédent), le nom ne se met pas à jour (sauf à supprimer ce bouton, mais comment?).

Merci à tous encore
mjcom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 13h18   #8
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Re,
Citation:
Envoyé par mjcom Voir le message
Celui-ci fonctionne, c'est peut-être pas du beau code, mais il fonctionne.
Ce qui me gène c'est que si l'utilisateur change d'enregistrement (suivant ou précédent), le nom ne se met pas à jour (sauf à supprimer ce bouton, mais comment?).
Dans les propriétés du formulaire, boutons de navigation, Visible = NON.

Cdlt,

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 17h36   #9
Invité de passage
 
Homme
gérant de portefeuille
Inscription : avril 2011
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : gérant de portefeuille
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 13
Points : 4
Points : 4
Merci PGZ,et à tous.
Bon comme ca ca fonctionne, mais je voudrais savoir comment faire fonctionner mon code sur un changement de valeur du numéro de compte.
mjcom est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h23.


 
 
 
 
Partenaires

Hébergement Web