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 :

éxecution d'une requête ajout avec VBA


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 46
    Points
    46
    Par défaut éxecution d'une requête ajout avec VBA
    Bonjours à toutes et à tous,
    Pour exécuter une requête ajout sous VBA paramétrer sur un formulaire
    Voila le code que j'ai écris et ça marche pas, j'aimerais savoir pour quoi?
    Alors que le SQL marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Commande1_Click()
    CurrentDb.Execute ("INSERT INTO Table2 ( champ1t2, champ2t2 ) " & _
                        "SELECT Table1.champ1, Table1.champ2 " & _
                        "FROM Table1 " & _
                        "WHERE (((Table1.champ3)=" & [Formulaires]![Formulaire3]![champ3] & ")) ")
     
      End Sub
    L’erreur qui me retourne c'est qu'il ne reconnait pas le champ 'l', je ne vois pas à quel champ il fait référence

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour averooès,

    essaie avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Forms("Formulaire3")!Champ3.Value
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Forms("Formulaire3")![Champ3]
    Je crois qu'en VBA, les crochets servent à identifier le champ d'une table.

  3. #3
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,
    une petite question, ton champs se trouve dans un sous-formulaire?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 46
    Points
    46
    Par défaut
    le champ3 fais patie de la table1 il est source du controle champ3 dans la table1

  5. #5
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    tu dois faire comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Nom de la table dans le formulaire]![nom du champ dans le formulaire]
    En mode design, la représentation de ta table porte un nom qui peut être différente du nom réel de la table
    pour le nom de champ, c'est pareil
    verifie juste dans les propriétés

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 46
    Points
    46
    Par défaut
    dans mon dernier je voulais dire champ3 et le nom du controle dans le formulaire et pas la table.
    j'essaye ce nouveau code et ça marche toujours pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Commande1_Click()
    CurrentDb.Execute ("INSERT INTO Table2 ( champ1t2, champ2t2 ) " & _
                        "SELECT Table1.champ1, Table1.champ2 " & _
                        "FROM Table1 " & _
                        "WHERE (((Table1.champ3)= " & Formulaires.Formulaire3.Controls.champ3 & ")) ")
    End Sub

  7. #7
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Commande1_Click()
    CurrentDb.Execute ("INSERT INTO Table2 ( champ1t2, champ2t2 ) " & _
                        "SELECT Table1.champ1, Table1.champ2 " & _
                        "FROM Table1 " & _
                        "WHERE (((Table1.champ3)= " & Formulaires.Formulaire3.Controls(champ3) & ")) ")
    End Sub
    en suivant ton code,tu devrais essayer comme ça en principe!

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 929
    Points
    55 929
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Ton champ3, il est numérique ou de type texte?

    s'il est de type texte, tu dois encadrer la valeur du champ3 avec des apostrophes, et donc utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CurrentDb.Execute ("INSERT INTO Table2 ( champ1t2, champ2t2 ) " & _
                        "SELECT Table1.champ1, Table1.champ2 " & _
                        "FROM Table1 " & _
                        "WHERE (((Table1.champ3)= '" & Formulaires.Formulaire3.Controls(champ3) & "')) ")

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 46
    Points
    46
    Par défaut
    Voila
    J’ai créé un nouveau formulaire avec une zone de liste alimenté par le champ3 de la table1
    Voila le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Commande2_Click()
    Dim str As String
    str = " & Formulaires.Formulaire3.Controls(Modifiable0) & "
    Debug.Print str
    dbsVeil.Execute ("INSERT INTO Table2 ( champ1t2, champ2t2 ) " & _
                "SELECT Table1.champ1, Table1.champ2 " & _
                "FROM Table1 " & _
                "WHERE (((Table1.champ3)='" & Formulaires.Formulaire3.Controls(Modifiable0) & "')) ")
    End Sub
    Le str c’est pour savoir s’il prend la valeur afficher dans le contrôle, il m’imprime ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    & Formulaires.Formulaire3.Controls(Modifiable0) &
    Voila le sql de la requête il s’exécute belle et bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO Table2 ( champ1t2, champ2t2 )
    SELECT Table1.champ1, Table1.champ2
    FROM Table1
    WHERE (((Table1.champ3)=Formulaires!Formulaire3!Modifiable0));

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour averooès,
    essaie ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Commande2_Click()
    Dim str As String
    str = "Champ3 = " & Formulaires!Formulaire3!Modifiable0
    Debug.Print str
    CurrentDB.Execute ("INSERT INTO Table2 (champ1t2, champ2t2) " & _
                "SELECT Table1.champ1, Table1.champ2 FROM Table1 " & _
                "WHERE Table1.champ3=" & Formulaires!Formulaire3!(Modifiable0))
    End Sub

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 46
    Points
    46
    Par défaut
    merci pour ton aide, mais ça marche pas erreure "objetrequis"

  12. #12
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Points : 939
    Points
    939
    Par défaut
    A tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Commande2_Click()
    CurrentDB.Execute ("INSERT INTO Table2 (champ1t2, champ2t2) " & _
                "SELECT Table1.champ1, Table1.champ2 FROM Table1 " & _
                "WHERE Table1.champ3=" & Me.Modifiable0)
    End Sub
    Essaye avec DAO sinon
    Exemple avec l'ajout d'un contrat (à adapter) :
    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
    ' -- Ajout de l'enregistrement dans la table CONTRAT --
    If DCount("*", "CONTRAT", "[NumContrat] LIKE '" & Me.lstNumContrat & "'") = 0 Then
    'Si le contrat existe déjà, on ne l'ajoute pas
       Dim bd As Database
       Dim tContrat As Recordset
       Dim cContrat as String
     
       Set bd = CurrentDb
       Set tContrat = bd.OpenRecordset("CONTRAT", dbOpenDynaset)
       cContrat = "NumCli=" & Me.txtNumCli ' Définition du critère
       tContrat.FindFirst cContrat ' Recherche du critère
     
       tContrat.AddNew ' Ajout de l'enregistrement
       tContrat![NumContrat] = Me.lstNumContrat
       tContrat![DateEffetContrat] = CDate(Me.txtDateEffet)
       tContrat.Update
       MsgBox "Le contrat " & Me.lstNumContrat & " a bien été ajouté", vbOKOnly + vbInformation, "Confirmation d'ajout..."
       Me.lstNumContrat.Requery ' Actualisation de la zone de liste
    End If
    ' -- Fin du traitement de la table CONTRAT --

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Averooès C'est quoi dbsVeil ? Dans le doute je l'ai remplacé par CurrentDB.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    merci pour ton aide, mais ça marche pas erreure "objetrequis"
    D'accord mais sur quelle ligne ? Tu dis avoir créer un nouveau formulaire quel est son nom, remplace Formulaire3 par le nom du nouveau formulaire

  14. #14
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 929
    Points
    55 929
    Billets dans le blog
    131
    Par défaut
    J'ajoute qu'il serait plus simple de construire TOUTE la chaine SQL dans une variable. Ainsi, tu peux tester exactement ce que tu passes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sql = "insert into ..."
    debug.print sql
    docmd.runsql sql
    En mettant un point d'arrêt (F9) sur la ligne DoCmd, tu peux alors voir dans la fenêtre d'exécution ce que contient exactement SQL.

    Bien entendu, il faut supprimer la ligne Debug... une fois la solution trouvée.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 46
    Points
    46
    Par défaut
    Salut vraiment j’ai crus que mon problème c’était un classique, il s’avère que c’est pas le cas.
    La base porte le nom dbsVeil Le formulaire porte le nom Formulaire3, le contrôle porte le nom Modifiable0, donnez moi juste la syntaxe pour retourner la valeur afficher dans le contrôle.
    N’hésitez pas à me faire des propositions

  16. #16
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 929
    Points
    55 929
    Billets dans le blog
    131
    Par défaut
    As-tu testé ma dernière proposition?

    Oui?

    Cela fonctionne ?? ==>>> TANT MIEUX

    Cela ne fonctionne pas?? ==>>> Donne-nous la valeur de la chaine SQL !!!

  17. #17
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 19
    Points : 12
    Points
    12
    Par défaut DAO
    Le plus simple est d'utiliser une référence DAO..
    tu l'ajoutes dans les références.
    Ensuite tu crées ta requête d'ajout dans le module des requêtes en mettant des paramètres ensuite voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim db As DAO.Database
    Dim ess As DAO.Recordset
    Dim rqMaQuery As QueryDef
    Dim i As Integer
    Dim Var_Resa As Long
     
    Set db = CurrentDb
    Set rqMaQuery = db.QueryDefs("R_AJT_Carnet_Affecte") 'Nom de ta requête ajout
    rqMaQuery.Parameters(0) = Var_Resa 'ou valeur d'une boite de liste 0=premier paramètre
    rqMaQuery.Execute
    et ça doit fonctionner mais il ne faut pas oublier de rajouter la référence Microsoft DAO x.x object library

Discussions similaires

  1. peut on exécuter une requête sélection avec vba
    Par kergamenan dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 22/05/2014, 22h06
  2. Ajout d'un bouton dans une feuille excel avec vba
    Par nsqualli dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/11/2008, 15h35
  3. problème de tri avec une requête ajout
    Par funkyjul dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/03/2008, 11h53
  4. Réponses: 6
    Dernier message: 13/12/2007, 03h13
  5. Probleme avec requête Ajout dans VBA
    Par deglingo37 dans le forum Access
    Réponses: 1
    Dernier message: 26/05/2006, 11h49

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