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

IHM Discussion :

Copier le contenu champs vers un autre


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 40
    Points : 29
    Points
    29
    Par défaut Copier le contenu champs vers un autre
    Bonjour,
    Le titre n'est pas tres explicite mais je vais developper.
    2 BdD, dans une T_A et dans l'autre T_B
    Je travaille toujours dans T_B et T_A est une table liée.

    Dans T_A, 3 champs (Num_A, Nom_A, Prenom_A) soit par exemple (0123, TOTO, Michel), (5412, Machin, Pierre) etc. sur 1600 lignes.

    Dans T_B, 3 champs (Num_B, Nom_B, Prenom_B) j'inscris a l'aide d'un formulaire une valeur dans le champs (Num_B) et je voudrais, dans les parametres de ma zone de texte "Après Maj" choisir un générateur d'expression par exemple, lancer une macro SQL pour copier le Nom_A et Prenom_A dans Nom_B et Prenom_B.
    Je prends les valeurs de mon exemple si je rentre "5412" dans Num_B je voudrais copier le nom et prénom correspondant de T_A vers T_B.
    Merci beaucoup de votre aide.

  2. #2
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonjour,

    Bon, je vais essayer de résumer ce que j'ai cru comprendre de ton problème...

    - Dans ton formulaire, dans un champ (je pense indépendant....!!) tu saisie une valeur

    - Après validation de ta saisie, tu souhaite les actions suivantes:
    ----- vérifier que la valeur existe dans la table T_A
    ----- si oui, récupérer les valeurs de Nom_A et Prenom_A et les copier vers la table T_B
    ----- si non, éventuellement message d'avertissement.

    Si c'est bien ça, je pense que tu as déjà correctement défini par toi même le code à mettre en place....

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    Bonjour,
    Oui, c'est excatement résumé, dans les parametres zone de texte, je voudrais utiliser "Après Maj", choisir un générateur d'expression (il y a 3 choix) et par exemple lancer une macro SQL pour copier le Nom_A et Prenom_A dans Nom_B et Prenom_B.

    Je suis un débutant et je bute sur ce Pb.

    Si tu peux me donner la solution, j'apprécierais.
    Cordialement

  4. #4
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonjour...

    Ne t'inquiète pas je ne t'avais pas oublié...

    Pour t'expliquer la démarche à suivre, je vais me servir d'un exemple basique:

    -Une Base [Base_1], dans laquelle se trouve tes deux tables [T_B] et [T_A]==>Table liée se trouvant dans une autre Base

    -Dans cette base, on va créé un simple formulaire contenant une zone de texte indépendante [txtChoix]

    Et voila, on a pratiquement tout ce qu'il nous faut pour réaliser ce que tu souhaite....en appliquant simplement ce que je te disais :
    - Dans ton formulaire, dans un champ (je pense indépendant....!!) tu saisie une valeur

    - Après validation de ta saisie, tu souhaite les actions suivantes:
    ----- vérifier que la valeur existe dans la table T_A
    ----- si oui, récupérer les valeurs de Nom_A et Prenom_A et les copier vers la table T_B
    ----- si non, éventuellement message d'avertissement.
    ....pour cela un peu de code VBA, sur l'événement "Après MAJ" du contrôle [txtChoix]....Suivre les explications directement dans 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Sub txtChoix_AfterUpdate()
    Dim dbs As Database, rst As Recordset
    Set dbs = CurrentDb
     
    'Vérifier que le champ de saisie ne soit pas vide
    If (IsNull(txtChoix) Or (txtChoix = vbNullString)) Then
           Me.txtChoix.SetFocus
        Exit Sub
    End If
    'Recherche si la valeur saisie existe dans la table [T_A]
        Set rst = dbs.OpenRecordset("T_A")
        rst.FindFirst "[Num_A]='" & txtChoix & "'"
            'Valeur inconnue...
            If rst.NoMatch Then
            '...alors, on affiche un message d'erreur...
                MsgBox "La valeur " & txtChoix & " n'existe pas dans la table T_A de la Base_2", vbInformation, "Erreur de saisie"
                '...et on repositionne le curseur sur la zone de texte pour une nouvelle saisie
                Me.txtChoix.Value = ""
                Me.txtChoix.SetFocus
                rst.Close
                Set rst = Nothing
                Exit Sub
            Else
            'Valeur existante
            'On recopie l'enregistrement correspondant dans la table T_B.....à l'aide d'une requête SQL
            'Que l'on peut traduire en langage clair par ..:
            'Inserer dans les champs (Num_B,Nom_B,Prenom_B)de la table T_B....
            '..les champs (Num_A,Nom_A,Prenom_A) de la table T_A...
            '..ayant comme critère le champ Num_A égal à la valeur saisie dans le contrôle [txtChoix]
            Dim sSQL As String
            sSQL = "INSERT INTO T_B(Num_B,Nom_B,Prenom_B) SELECT Num_A,Nom_A,Prenom_A FROM T_A WHERE Num_A= '" & txtChoix & "'"
            'Ici, exécution de la requête
            DoCmd.RunSQL sSQL
     
            Me.txtChoix.Value = ""
    End If
    rst.Close
    Set rst = Nothing
    Exit Sub
    End Sub
    Et voila, c'est tout. A chaque fois les valeurs présentes dans T_A seront copiées dans T_B.
    Inspire toi de ce code pour comprendre la façon de faire....et en cherchant à l'améliorer.....
    Par exemple ici, tu n'as pas de vérification pour contrôler si tu ne saisie pas plusieurs fois la même valeur dans la table [T_B]...

    [EDIT] Attention, dans mon exemple je suppose que tous les champs de tes deux tables sont de type TEXTE.

    En cas de problème, nous sommes tous là pour t'aider..

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    Bonjour et merci de l'aide apportée,
    Ce que tu as écrit fonctionne, j'ai renommé les champs car ce que j'ai donné était un exemple pour être clair, les commentaires m'ont permis de suivre pas à pas le déroulement de la procédure.

    Le problème est qu'il me rajoute une ligne dans ma table avec les trois champs rempli correctement or je suis dans un formulaire de saisie ou j'ai déjà des champs de rempli (dons je suis positionné sur une ligne de ma table T_B ou les champs Num_B, Nom_B, Prenom_B sont encore vide) j'arrive avec Tab sur ma zone de texte indépendante [txtChoix], j'entre la valeur de Num_B et je voudrais remplir les champs de cette ligne et non rajouter une ligne comme cela ce fait.

    J'ai essayé d'utiliser la commande UPDATE SET mais je bloque toujours sur une erreur.

    J'espère avoir été clair (c'est pas sur ..)

    Pour résumé je voudrais remplir les champs de la ligne active et non créer une nouvelle ligne.
    Encore MERCI
    Cordialement

  6. #6
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonjour,

    Avant de répondre directement à ta question.....et pour éviter de partir dans une mauvaise direction...

    A la lecture de ton dernier post, il me semble que ton problème tient surtout à une mauvaise conception de ta base...(prendre ceci de façon positive...)

    Peux-tu nous expliquer, pourquoi tu as besoin de "copier" des enregistrements d'une table vers une autre.....et donc d'avoir des données en double....

    A la place, pourquoi ne pas créer une "relation" entre tes diverses tables..

    Au cas ou, quelques lectures bien utiles.:
    Access - Les Bases

    Comprendre les jointures dans Access

    Dis nous si cela ne serait pas plus simple........

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    Bonjour et merci de suivre cette discusion.
    Je pensais qu'il était assez facile de copier des champs d'une table à une autre fonction d'un index mais je m'aperçois que ce n'est pas évident. (d'origine, j'étais automaticien et la copie sur automate ce faisait sans ce poser de question, mais access est de la base et c'est totalement une autre façon de raisonner).

    Je vais un peu plus loin dans mes explications "T_A" est une table de cotisations ou tous les adhérents sont classer par rapport à un N° de carte "Num_A" puis le nom "Nom_A" prenom, adresse, année de cotisations etc..etc..
    Cette base est gérée a part.

    "T_B" est une autre base ou je gére des manifestations dans ce cas les Banquets.
    L'entrée ce fait par une fiche d'inscription ou j'entre l'adhérent "Num" je ne m'ocupe pas des coordonnées, je les auraient par une requete basée sur "T_A" et "T_B" avec une jointure "Num_A, Num".
    Ensuite j'entre éventuellement le conjoint si conjoint il y a dans"T_B" avec les champs Titre, Nom Prénom et pour l'exemple j'ai donné "Nom_B" et "Prénom_B". Mais voila, il arrive que le conjoint est aussi adhérent c'est pourquoi j'ai mis aussi "Num_B" et que je voulais remplir "T_B" avec "Nom_B" et "Prénom_B" dès la saisie de "Num_B".
    Sur mon dernier post je disais : (or je suis dans un formulaire de saisie ou j'ai déjà des champs de rempli ) car chaque fiche d'inscription représente une seule ligne dans "T_B".
    Ce qui me gène c'est que "Titre, Nom et Prenom" apparaissent quand le conjoint nest pas adhérent et seulement "Num_B" si le conjoint est adhérent et comme les zones de texte du formulaires sont liées à "T_B" ?????
    Voila résumé pourquoi je voudrais faire une copie de champs.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    Bonjour,
    Sur mon poste précédent, j'ai écrit "Mais voila, il arrive que le conjoint est aussi adhérent c'est pourquoi j'ai mis aussi "Num_B" et que je voulais remplir "T_B" avec "Nom_B" et "Prénom_B" dès la saisie de "Num_B"."
    J'ai revue ma structure pour n'avoir que les numéros de cartes dans "T_B".
    J'ai travaillé avec des requetes Union pour sortir des états.
    Sur le formulaire je ne vois que des N° et je pose la question suivante :
    Est ce qu'il est possible de créer, sous le N°, une zone de texte en lecture seule qui afficherais le "Nom" de "T_A" en fonction de "Num_B" de la table "T_B" ?
    Merci

Discussions similaires

  1. Copier un champ vers un autre avec ON DUPLICATE KEY ?
    Par Sethenssen dans le forum Débuter
    Réponses: 2
    Dernier message: 26/07/2012, 12h05
  2. Copier les données d'un champs vers un autre champs
    Par Waumy dans le forum VBA Access
    Réponses: 4
    Dernier message: 22/11/2008, 04h58
  3. déplacement contenu champ vers un autre
    Par tkwleboss dans le forum Langage SQL
    Réponses: 5
    Dernier message: 10/08/2007, 10h52
  4. Copier un champ vers un autre en VB
    Par Jay45 dans le forum Access
    Réponses: 1
    Dernier message: 12/01/2007, 16h20
  5. cherche comment copier le champ vers une autre champ
    Par khier dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 01/07/2005, 12h20

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