IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Mise à jour zone de texte à partir d'une requete VBA [AC-2000]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    gérant de portefeuille
    Inscrit en
    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 : 7
    Points
    7
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub txtn_compte_Afterupdate()
    Par ailleurs, ta première requête n'est pas indispensable. Tu aurais l'index avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 601
    Points : 56 700
    Points
    56 700
    Billets dans le blog
    40
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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]=...

  4. #4
    Invité
    Invité(e)
    Par défaut
    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

  5. #5
    Futur Membre du Club
    Homme Profil pro
    gérant de portefeuille
    Inscrit en
    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 : 7
    Points
    7
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    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

  7. #7
    Futur Membre du Club
    Homme Profil pro
    gérant de portefeuille
    Inscrit en
    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 : 7
    Points
    7
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    =[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 : Sélectionner tout - Visualiser dans une fenêtre à part
    =[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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  8. #8
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    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

  9. #9
    Futur Membre du Club
    Homme Profil pro
    gérant de portefeuille
    Inscrit en
    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 : 7
    Points
    7
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/03/2008, 10h41
  2. Réponses: 8
    Dernier message: 19/04/2007, 10h20
  3. Réponses: 2
    Dernier message: 26/01/2007, 15h56
  4. Réponses: 6
    Dernier message: 29/06/2006, 14h00
  5. [VB.NET] Mise à jour d'un site à partir d'une application
    Par boulete dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/04/2006, 12h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo