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 :

INSERT INTO vba


Sujet :

VBA Access

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut INSERT INTO vba
    Bonsoir,

    j'essaie de remplir une table intermédiaire avec une requête en vba mais sans succès

    J'ai un formulaire Contrat site dans lequel je place deux zones de liste pour associer à ce contrat, les compagnons du sous traitant qui vont travailler sur le site. En cliquant sur le bouton unadroite, cela fait passer le nom du compagnon de la zone de liste de gauche vers la zone de liste à droite

    je voudrais completer la T_contratsite_compagnon qui comporte deux champs, l'id_contratsite et l'id_compagnon qui proviennent respectivement de la t_contratsite et la t_compagnon

    voici mon 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
    Private Sub cmdUnADroite_Click()
    Dim sql
     
      If Not IsNull(Me.Tous_les_compagnons) Then
        sql = "INSERT INTO T_contratsite_compagnon SELECT Id_compagnon,Id_contrat_site FROM T_compagnon,T_contrat_site WHERE ID_compagnon = " & Me.Tous_les_compagnons & ID_CONTRAT_SITE = " & Me.ID_CONTRAT_SITE"
     
     
        DoCmd.SetWarnings False
     
        DoCmd.RunSQL sql
        Me.Tous_les_compagnons.Requery
        Me.Compagnons_affectés.Requery
       '    End If
     
        DoCmd.SetWarnings True
    End Sub
    c'est mon sql qui ne fonctionne pas

    savez vous comment je peux associer les deux champs des deux tables dans la table intermédiaire ?

    merci à vous
    isabelle

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonjour Isabelle,
    cela fait passer le nom du compagnon de la zone de liste de gauche vers la zone de liste à droite
    Si id_contratsite et id_compagnon sont de type "texte" alors il faudrait les encadrer de guillemets comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "INSERT INTO T_contratsite_compagnon ( id_compagnon, id_contratsie ) SELECT """ & Me.[Tous_les_compagnons] & """ AS Expr1, """ & Me.[Id_contrat_site] & """AS Expr2;    "
    Les champs eussent été(*) numériques, alors simples guillemets à la place des triples guillemets.

    Bonne journée.

    (*) il y a des jours comme cela !

  3. #3
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Re
    Proposition de recette pour créer ton sql

    1° créer la requête avec l’aide Access
    2° copier le « sql brut » et le coller dans la fenêtre d’exécution pour y apporter quelques retouches
    3° mettre tout sur une ligne ( se positionner sur la première ligne et End tab Delete)
    4° remplacer les données statiques dans la requête par le nom des variables
    Exemple
    Formulaires![LeFormulaireDsLequelJeTravaille]![Tous_les_compagnons] --> Me. [Tous_les_compagnons]
    5° trancher le « sql brut » en parties fixes (encadrées de simples guillemets) et parties variables en les reliant par des ‘ & ’
    6° si une tranche variable est de type texte, tripler le guillemet final de la tranche qui le précède et le guillemet initial de la tranche qui le suit.
    7° traduire le reste en syntaxe Vba : Formulaires - - -> Forms, les points virgules - - - > virgules (dans les fonctions par exemple)
    8° insérer le « sql toiletté » dans le code
    9° croiser les doigts


    A l’inverse
    Proposition de recette pour comprendre pourquoi ton sql ne fonctionne pas

    1° dans le code, créer le sql dans une variable avant de l’utiliser
    2° placer un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug .print  CetteVariable
    juste avant l’instruction où on l’utilise
    3° provoquer l’exécution du code litigieux
    4° récupérer dans la fenêtre d’exécution le sql généré par le programme
    5° ouvrir une nouvelle requête en mode création
    6° à l’invite « ajouter une table », cliquer sur FERMER
    7° cliquer sur sql dans la barre menu
    8° remplacer « Select ; » par le copier coller du sql ci-dessus.
    9° cliquer sur affichage dans le menu et constater le contenu de l’exécution du sql.
    10° rougir de confusion et essayer de faire mieux la prochaine fois.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    @ClaudeLELOUP

    Je rajouterais cela : http://cafeine.developpez.com/access...el/debugprint/

    Starec

  5. #5
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Merci Starec
    C'est manifestement beaucoup mieux !
    C'est toute la différence entre un Vulgus Homo numeris(*) et Léonard de Vinci ! cafeine

    (*) un comptable ordinaire

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Merci pour ces infos j'en ai pris bonne note

    j'ai réussi à glisser les noms individuellement de droite à gauche et vice versa, j'ai même réussi à passer tous les noms de gauche à droite, mais je n'arrive pas à faire le "Tous à droite".

    J'ai bien lu le tuto et utiliser la recette maison ce qui m'a bien aidé, mais je n'arrive pas à lui dire d'insérer tous les enregistrements de ma liste de gauche en un click dans ma liste de droite (et par la même dans ma table intermédiaire)

    faut il glisser une astérix quelque part ?

    voici le code utiliser pour unAdroite que je voudrais modifier pour TousAdroite

    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
    Private Sub cmdTousADroite_Click()
    Dim sql
     
      If Not IsNull(Me.Tous_les_compagnons) Then
      sql = "INSERT INTO T_contratsite_compagnon (Id_compagnon, Id_contrat_site) values (" & Me.Tous_les_compagnons & ", " & Me.ID_CONTRAT_SITE & ")"
     
     
        DoCmd.SetWarnings False
     
        DoCmd.RunSQL sql
        Me.Tous_les_compagnons.Requery
        Me.Compagnons_affectés.Requery
            End If
     
        DoCmd.SetWarnings True
    End Sub
    merci beaucoup
    isabelle

  7. #7
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonjour Isabelle,

    Si :
    T_compagnon,T_contrat_site est celle de gauche
    T_contratsite_compagnon est celle de droite

    Alors :
    Pour tout mettre à droite, je te propose
    1° d'abord supprimer ce qui s'y trouverait éventuellement déjà (la suite de UnADroite)
    2° transférer tout de gauche à droite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub cmdTousADroite_Click()
    'Pour d'abord vidanger ce qui se trouverait déjà éventuellement à droite
    DoCmd.RunSQL ("DELETE T_contratsite_compagnon.* FROM T_contratsite_compagnon;")
    'Pour mettre tout à droite
    DoCmd.RunSQL ("INSERT INTO T_contratsite_compagnon SELECT [T_compagnon,T_contrat_site].* FROM [T_compagnon,T_contrat_site];")
    End Sub

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    bonsoir Claude

    ce n'est pas tout à fait cela

    la liste de gauche contient la T_compagnon, la liste de droite contient la T_contratsite_compagnon (table intermédiaire qui lie la table compagnons à la table contratsite

    pour se remplir elle doit prendre l'id_compagnon de la liste de gauche et l'id contratsite du formulaire sur laquelle est le trouve

    Pour créer ces enregistrements id_compagnons et id contratsite

    Je comprends comment lui affecter l'id_compagnon de la liste de gauche, mais comment lui dire qu'elle doit ajouter à chacun de ses enregistrements l'ide contratsite du formulaire

    Je te joins une image pour que vois mieux ce que je veux dire

    (l'id_contratsite en question (non visible) se trouve sur le formulaire indépendant que je fais apparaitre grace au bouton "affecter des compagnons". Les compagnons choisis viennent se placer dans la liste de droite et ensuite dans le sousformulaire blanc (en bas).

    Merci à toi
    isa

  9. #9
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonjour Isabelle,
    l'id_contratsite en question (non visible) se trouve sur le formulaire indépendant... ensuite dans le sousformulaire blanc (en bas)
    Si le formulaire indépendant s'appelle "LeSousFormulaireBlancEnBas"

    alors, pour se référer à son contrôle "id_contrasite", la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me!LeSousFormulaireBlancEnBas.Form.id_contratsite
    Bonne journée.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    bonsoir Claude et merci de aide


    Si je comprends bien ce que dit ta requete :

    Insère dans la T_contratsite_compagnon tous les champs de T_compagnon et T_contrat site depuis les tables compagnons et Tables contrat site

    Or ce n'est pas possible car je suis en train de lier deux tables j'ai besoin d'allier les id des 2 tables pour créer la table intermédiaire

    ce que je veux lui dire c'est :

    insère dans la t_contratsitecompagnon tous les idcompagnons choisis dans la liste de gauche et lie les à l'id contrat site du formulaire dans lequel nous sommes

    dans la table contrat site compagnon je n'ai que deux champs : l'idcompagnon et le champ idcontratsite

    est ce que j'ai bien compris ?

    merci à toi
    isabelle

  11. #11
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Je crois que cette fois j'ai compris ce que tu veux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub cmdTousADroite_Click()
    'Pour d'abord vidanger ce qui se trouverait déjà à droite
    DoCmd.RunSQL ("DELETE T_contratsite_compagnon.* FROM T_contratsite_compagnon;")
    'Pour mettre tout à droite
    DoCmd.RunSQL ("INSERT INTO T_contratsite_compagnon ( id_compagnon, Id_contrat_site ) SELECT T_compagnon.id_compagnon, """ & Me!LeSousFormulaireBlancEnBas.Form.id_contratsite & """ AS Expr1 FROM T_compagnon;")
    End Sub

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    ah tu m'as bien fait rire avec le "formulaire blanc en bas"

    en fait ce sont les compagnons qui viennent se mettre dedans, mon id contrat site est sur le formulaire indépendant !

    je vais essayer ton code et je te dis (en le modifiant quelque peu)

    je suis sur la lecture du tutoriel d'heureux oli sur le publipostage et le transfert des données dans word via access ! ouh la la quelle galère ce truc

    mais j'ai un gros contrat à éditer alors il faut que je m'y mette, je vais sans doute avoir besoin d'aide

    isa

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Bon ben il ne se passe rien



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "INSERT INTO T_contratsite_compagnon ( id_compagnon, Id_contrat_site ) SELECT T_compagnon.id_compagnon, "" & Me!id_contratsite & "" AS Expr1 FROM T_compagnon;"
    c'est quoi expr1 ?

  14. #14
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    dans cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL ("INSERT INTO T_contratsite_compagnon ( id_compagnon, Id_contrat_site ) SELECT T_compagnon.id_compagnon, """ & Me!id_contratsite & """ AS Expr1 FROM T_compagnon;")
    Si ton publipostage a pour but d'envoyer des mails individualisés avec pièces jointes éventuelles, je peux te montrer ce que j'utilise pour le resto de ma fille.

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    pour le moment je cherche à éditer mon contrat dans word depuis access parce qu'avec un état l'utilisateur n'aura pas accès à la modification des additifs et autre

    mais oui je vais en venir aux mails et pièces jointes aussi pour envoyer les demandes de docs et j'aurais bien besoin d'un coup de main

    mille mercis, je suis preneuse

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    il me met erreur exécution 2465 impossible de trouver l'id contrat site dont il est fait référence

    est ce que tu veux que je t'envoie la base ?

  17. #17
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    J'ai aussi une application dans laquelle je confectionne des contrats de travail, les différents paramètres (noms, fonction, taux horaires ...) viennent d'une table gérée par l'utilisateur.
    Cela ressemble à ce que tu veux faire ?

  18. #18
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    2465 impossible de trouver l'id contrat site dont il est fait référence
    Vérifie que nous avons bien orthographié le nom du contrôle qui contient l'ID
    dans ton formulaire.
    Si non poste ta DB

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Exact l'id contrat site comporte un _ entre contrat et site mais maintenant il me met tous les compagnons

    moi je ne veux que les compagnons de la table de gauche c'est à dire ceux qui correspondent à l'id sous traitant qui est aussi sur le formulaire indépendant

    désolée de ne pas l'avoir présiser

    je suis épatée !

    sais tu comment lui dire ? j'ai essayé me!tous les compagnons (le nom de la table de gauche mais il ne fait plus rien alors)

  20. #20
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonjour,
    c'est un jeu de piste ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub cmdTousADroite_Click()
    Dim sql As String
    'Pour d'abord vidanger ce qui se trouverait déjà à droite
    DoCmd.RunSQL ("DELETE T_contratsite_compagnon.* FROM T_contratsite_compagnon;")
    'Pour mettre tout à droite
    sql = "INSERT INTO T_contratsite_compagnon ( id_compagnon, Id_contrat_site ) SELECT T_compagnon.id_compagnon, """ & Me.Id_contrat_site & """ AS Expr1 FROM T_compagnon WHERE (((T_compagnon.id_soustraitant)=""" & Me.Id_soustraitant & """));"
    'Debug.Print sql
    DoCmd.RunSQL (sql)
    End Sub
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2007] Problème syntaxe requete INSERT INTO VBA
    Par afrogwada dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/07/2013, 09h44
  2. [VBA]INSERT INTO et récupération d'id auto
    Par norkius dans le forum Access
    Réponses: 8
    Dernier message: 24/02/2013, 19h17
  3. prob insert into vba
    Par croke dans le forum VBA Access
    Réponses: 6
    Dernier message: 19/02/2012, 16h54
  4. [VBA-A] INSERT INTO en vérifiant les données avant !!
    Par Rumeurs dans le forum VBA Access
    Réponses: 9
    Dernier message: 12/04/2006, 14h07
  5. [VBA-A] INSERT INTO + PBL DE DOUBLONS
    Par forsay1 dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/04/2006, 11h45

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