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 :

Utilisation de boucle [AC-2010]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2009
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 276
    Par défaut Utilisation de boucle
    Bonjour,

    Je souhaiterais savoir quelle méthode utiliser pour gérer ma demande, à savoir j'ai un formulaire 'Fiche client' basé sur une table 'T_Client' et si je modifie une fiche je voudrais mettre à jour une autre table (T_Données) où mon client figure dans plusieurs enregistrements.

    Ma requête serait :

    Sur bouton 'Enregistrer'
    SI Id_client trouvé dans T_Données alors MAJ de tous les champs relatif au client (Civilité, Nom, Prénom, Adresse, etc...)

    Il faut utiliser une boucle mais je ne domine pas encore la méthode ni le choix de la boucle à utiliser.
    Merci pour votre aide.

    Bien cordialement

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 849
    Par défaut
    Bonjour,

    Tu as un problème de conception.
    Normalement UNE INFORMATION ne devrait pas être dupliquée et être présente dans plusieurs endroits dans une base de données.
    Donc la présence des informations (Civilité, Nom, Prénom, Adresse, etc...) dans la table T_Données est inutile. Le champ Id_Client est suffisant.

    Si tu veux les avoir avec la table T_Données, il suffirait de faire une requête à partir des 2 tables en les liant par Id_Client.

    Cordialement.

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2009
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 276
    Par défaut
    Bonjour Madefemere,

    Je conçoit bien qu'il aurait été plus judicieux de faire comme tu l'as mentionné mais dans l'application que j'ai récupérée, il me faut faire cette fameuse boucle pour parvenir au résultat attendu.
    As-tu une solution ?

    Merci de ton aide
    Bien cordialement

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 849
    Par défaut
    Bonjour,

    Dans ce cas, il faut partir d'une requête mise à jour (UPDATE) et changer le critère par la valeur de l'IDCLIENT du formulaire après.

    Méthode 1 : utiliser la requête directement
    1- Tu enregistres la requête par exemple en "R_MAJDonnees_Client" qui a comme code :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE T_Clients INNER JOIN T_Donnees ON T_Clients.IdClient = T_Donnees.IdFournisseur_FK SET T_Donnees.NomClient_FK = [T_Clients].[NomClient], T_Donnees.AdresseClient_FK = [T_Clients].[AdresseClient], T_Donnees.VilleClient_FK = [T_Clients].[Villeclient]
    WHERE (((T_Donnees.IdFournisseur_FK)=[Forms]![F_Clients]![IdClient]));
    2- Tu appelles (exécutes) cette requête à partir de ton bouton "enregistrer" en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenQuery "R_MAJDonnees_Client"
    Méthode 2 : tout en VBA
    1- Quand ta requête est bonne, tu copies son code SQL et tu le transfères vers un code VBA qui sera appelé à partir de ton bouton "enregistrer". Tu auras un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim majsql As String
    majsql = "UPDATE T_Clients INNER JOIN T_Donnees ON T_Clients.IdClient = T_Donnees.IdFournisseur_FK" _
            & " SET T_Donnees.NomClient_FK = [T_Clients].[NomClient], T_Donnees.AdresseClient_FK = [T_Clients].[AdresseClient]," _
            & " T_Donnees.VilleClient_FK = [T_Clients].[Villeclient]" _
            & " WHERE T_Donnees.IdFournisseur_FK=" & Me.IdClient
    CurrentDb.Execute majsql, dbFailOnError
    NOTA : en enlevant le critère après "WHERE" tu peux mettre à jour directement toutes les valeurs dans la table T_Donnees indépendamment du client sélectionné.

    Cordialement.

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2009
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 276
    Par défaut
    Bonjour madefemere,

    et merci pour ton orientation
    J'ai modifié le code pour qu'il s'applique à mon développement et le résultat est présent.

    Au prochain post
    Bien cordialement

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/02/2007, 18h17
  2. Utilisation de boucles et de conditionnelles
    Par Ragnarok85 dans le forum Access
    Réponses: 3
    Dernier message: 10/02/2007, 19h50
  3. [GD] Une utilisation en boucle altère-t-il la qualité ?
    Par Death83 dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 04/09/2006, 12h40
  4. Utiliser une boucle while
    Par link39001 dans le forum ASP
    Réponses: 11
    Dernier message: 09/05/2006, 14h50
  5. [Record] Utilisation en boucle
    Par CanardJM dans le forum Langage
    Réponses: 3
    Dernier message: 20/06/2004, 12h41

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