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 :

Aide sur requete INSERT INTO vba


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    Mai 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Mai 2016
    Messages : 38
    Points : 37
    Points
    37
    Par défaut Aide sur requete INSERT INTO vba
    Bonsoir à tous,

    Je lance un nouveau post sur ce sujet :

    http://www.developpez.net/forums/d16...e/#post8852315

    J'ai deux table; une table planning, et une table contrat.
    en fonction des plages de dates prédéfinis dans un contrat; le code suivant insert des enregistrement dans la table planning :

    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
    41
    42
    Private Sub CmdAdd_Click()
    If Me.Jour1.Value = False And Me.Jour2.Value = False And Me.Jour3.Value = False And Me.Jour4.Value = False And Me.Jour5.Value = False Then
    MsgBox "Aucun jour n'a été séléctionné !", vbInformation, "Planning des gardes"
    Else
    Confirme = MsgBox("Voulez-vous ajouter ces dates sur le planning ?", vbYesNoCancel, "Planning des gardes")
    Select Case Confirme
    Case vbYes:
        DtDeb = Me.DateD
        DtFin = Me.DateF
        Num_Contrat = Me.IDContrat
        Nom_Contrat = Me.NumeroContrat
        Nom_Enfant = Me.Enfant
        Nom_Parents = Me.Famille
        Num_Famille = Me.NumeroFamille
        Nom_Repas = Me.Repas
        Nom_Garde = Me.Garde
        Num_Groupe = Me.Groupe
        Nb_Place = Me.Place
        Nom_Employe = Me.AffectéA
        Nom_Utilisateur = Me.SaisiPar
        Date_Saisi = Me.DateCréation
     
        '
            For Boucle = 0 To DateDiff("d", DtDeb, DtFin)
            DateC = DtDeb + Boucle
            J = Weekday(DateC, 2)
            If Me("Jour" & J).Value = True Then
            DoCmd.SetWarnings False
            CurrentDb.Execute "INSERT INTO Planning ( IDContrat, Enfant, Parents, NFamille, NumeroContrat, Repas, Garde, Groupe, Place, AffectéA, SaisiPar, DateSaisie, Jour ) SELECT " & Num_Contrat & ", " & Nom_Enfant & ", " & Nom_Parents & ", '" & Num_Famille & "' AS Num_Famille, '" & Nom_Contrat & "' AS Nom_Contrat, '" & Nom_Repas & "' AS Nom_Repas, '" & Nom_Garde & "' AS Nom_Garde, '" & Num_Groupe & "' AS Num_Groupe, '" & Nb_Place & "' AS Nb_Place, " & Nom_Employe & " AS Nom_Employe, " & Nom_Utilisateur & " AS Nom_Utilisateur, #" & Format(DateCréation, "mm-dd-yyyy") & "# AS Date_Saisie, #" & Format(DateC, "mm-dd-yyyy") & "# AS Jour;"
            DoCmd.SetWarnings True
            End If
            Next
     
        CmdAdd.Enabled = False
        Me.Statut = "Dates réservés"
        MsgBox "Les gardes ont été ajoutés sur le planning selon contrat N° " & Me.NumeroContrat, vbInformation, "Planning des gardes"
        Case vbNo:  Me.Undo ' Non : On annule les changements...
                    DoCmd.Close '  ... et on ferme
        Case vbCancel: ' Rien ne se passe : On reste dans le formulaire
    End Select
    End If
    End Sub
    souhaiterais ajouter des champs Garde1; Garde2 ... dans la table contrat, et en fonction du jour sélectionné; leurs valeurs sont insérés automatiquement dans le champ : "Garde" de la table planning.

    j'ai déjà essayé la solution proposé par User, mais j'ai un message d'erreur : Access ne trouve pas le champ "Garde" auquel il est fait référence dans votre expression ..

    d'avance merci de votre aide.

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 920
    Points : 4 828
    Points
    4 828
    Par défaut
    Bonjour,
    mets ta chaine dans une variable puis affiche un debug.print tu comprendras plus facilement pourquoi ça ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ...
    str1 = "INSERT INTO Planning ( IDContrat, Enfant, Parents, NFamille, NumeroContrat, Repas, Garde, Groupe, Place, AffectéA, SaisiPar, DateSaisie, Jour )" _
    & " SELECT " & Num_Contrat & ", " & Nom_Enfant & ", " & Nom_Parents & ", '" & Num_Famille & "' AS Num_Famille, '" & Nom_Contrat & "' AS Nom_Contrat, '" & Nom_Repas & "' AS Nom_Repas, '" & Nom_Garde & "' AS Nom_Garde, '" & Num_Groupe & "' AS Num_Groupe, '" & Nb_Place & "' AS Nb_Place, " & Nom_Employe & " AS Nom_Employe, " & Nom_Utilisateur & " AS Nom_Utilisateur, #" & Format(DateCréation, "mm-dd-yyyy") & "# AS Date_Saisie, #" & Format(DateC, "mm-dd-yyyy") & "# AS Jour;"
     
    debug.print str1         'cette commande affiche le contenu de str1 dans la fenetre exécution du VBE
     
     CurrentDb.Execute str1
    ...
    En fait, ta requete INSERT est erronée, essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     str1 = "INSERT INTO Planning ( IDContrat, Enfant, Parents, NFamille, NumeroContrat, Repas, Garde, Groupe, Place, AffectéA, SaisiPar, DateSaisie, Jour )" _
    & " VALUES " _
    & " ( " & Num_Contrat & ",'" & Nom_Enfant & "','" & Nom_Parents & "', " & Num_Famille & ",'" & Nom_Contrat & "','" & Nom_Repas & "','" & Nom_Garde & "','"  _
    & Num_Groupe & "' , '" & Nb_Place & "' , " & Nom_Employe & ", '" & Nom_Utilisateur & "', #" & Format(DateCréation, "mm-dd-yyyy") & "# , #" & Format(DateC, "mm-dd-yyyy") & "# )"
    sachant que tu dois encadrer les chaines de caracteres avec des ' mais pas les valeurs numériques

    Cdlt

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    Mai 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Mai 2016
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    Bonsoir,

    le code cité ci-dessus fonctionne très bien, le tien aussi ...
    quand j'essaye de modifier en fonction du champ Garde1; Garde2; ... comme vu ici, j'ai ce message d'erreur ...
    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
    41
    42
    Private Sub CmdAdd_Click()
    If Me.Jour1.Value = False And Me.Jour2.Value = False And Me.Jour3.Value = False And Me.Jour4.Value = False And Me.Jour5.Value = False Then
    MsgBox "Aucun jour n'a été séléctionné !", vbInformation, "Planning des gardes"
    Else
    Confirme = MsgBox("Voulez-vous ajouter ces dates sur le planning ?", vbYesNoCancel, "Planning des gardes")
    Select Case Confirme
    Case vbYes:
        DtDeb = Me.DateD
        DtFin = Me.DateF
        Num_Contrat = Me.IDContrat
        Nom_Contrat = Me.NumeroContrat
        Nom_Enfant = Me.Enfant
        Nom_Parents = Me.Famille
        Num_Famille = Me.NumeroFamille
        Nom_Repas = Me.Repas
        Nom_Garde = Me("Garde" & J).Value
        Num_Groupe = Me.Groupe
        Nb_Place = Me.Place
        Nom_Employe = Me.AffectéA
        Nom_Utilisateur = Me.SaisiPar
        Date_Saisi = Me.DateCréation
          
        '
            For Boucle = 0 To DateDiff("d", DtDeb, DtFin)
            DateC = DtDeb + Boucle
            J = Weekday(DateC, 2)
            If Me("Jour" & J).Value = True Then
            DoCmd.SetWarnings False
            CurrentDb.Execute "INSERT INTO Planning ( IDContrat, Enfant, Parents, NFamille, NumeroContrat, Repas, Garde, Groupe, Place, AffectéA, SaisiPar, DateSaisie, Jour ) SELECT " & Num_Contrat & ", " & Nom_Enfant & ", " & Nom_Parents & ", '" & Num_Famille & "' AS Num_Famille, '" & Nom_Contrat & "' AS Nom_Contrat, '" & Nom_Repas & "' AS Nom_Repas, '" & Nom_Garde & ", " & Num_Groupe & "' AS Num_Groupe, '" & Nb_Place & "' AS Nb_Place, " & Nom_Employe & " AS Nom_Employe, " & Nom_Utilisateur & " AS Nom_Utilisateur, #" & Format(DateCréation, "mm-dd-yyyy") & "# AS Date_Saisie, #" & Format(DateC, "mm-dd-yyyy") & "# AS Jour;"
            DoCmd.SetWarnings True
            End If
            Next
            
        CmdAdd.Enabled = False
        Me.Statut = "Dates réservés"
        MsgBox "Les gardes ont été ajoutés sur le planning selon contrat N° " & Me.NumeroContrat, vbInformation, "Planning des gardes"
        Case vbNo:  Me.Undo ' Non : On annule les changements...
                    DoCmd.Close '  ... et on ferme
        Case vbCancel: ' Rien ne se passe : On reste dans le formulaire
    End Select
    End If
    End Sub

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 920
    Points : 4 828
    Points
    4 828
    Par défaut
    ... Nom_Garde = Me("Garde" & J).Value...
    n'est pas à la bonne place car J n'est pas encore valorisé.
    Prends l'habitude d'utiliser debug.print comme indiqué plus haut

    Cdlt

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    Mai 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Mai 2016
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par micniv Voir le message
    n'est pas à la bonne place car J n'est pas encore valorisé.
    Prends l'habitude d'utiliser debug.print comme indiqué plus haut

    Cdlt
    Ok, je l'avais déplacé ... le message d'erreur concerne la requete SQL : Erreur de syntaxe dans l'instruction INSERT INTO

    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
    41
    Private Sub CmdAdd_Click()
    If Me.Jour1.Value = False And Me.Jour2.Value = False And Me.Jour3.Value = False And Me.Jour4.Value = False And Me.Jour5.Value = False Then
    MsgBox "Aucun jour n'a été séléctionné !", vbInformation, "Planning des gardes"
    Else
    Confirme = MsgBox("Voulez-vous ajouter ces dates sur le planning ?", vbYesNoCancel, "Planning des gardes")
    Select Case Confirme
    Case vbYes:
        DtDeb = Me.DateD
        DtFin = Me.DateF
        Num_Contrat = Me.IDContrat
        Nom_Contrat = Me.NumeroContrat
        Nom_Enfant = Me.Enfant
        Nom_Parents = Me.Famille
        Num_Famille = Me.NumeroFamille
        Nom_Repas = Me.Repas
        Num_Groupe = Me.Groupe
        Nb_Place = Me.Place
        Nom_Employe = Me.AffectéA
        Nom_Utilisateur = Me.SaisiPar
        Date_Saisi = Me.DateCréation
     
        '
            For Boucle = 0 To DateDiff("d", DtDeb, DtFin)
            DateC = DtDeb + Boucle
            J = Weekday(DateC, 2)
            Nom_Garde = Me("Garde" & J).Value
            If Me("Jour" & J).Value = True And Not IsNull("Garde" & J) Then
            DoCmd.SetWarnings False
            CurrentDb.Execute "INSERT INTO Planning ( IDContrat, Enfant, Parents, NFamille, NumeroContrat, Repas, Garde, Groupe, Place, AffectéA, SaisiPar, DateSaisie, Jour ) SELECT " & Num_Contrat & ", " & Nom_Enfant & ", " & Nom_Parents & ", '" & Num_Famille & "' AS Num_Famille, '" & Nom_Contrat & "' AS Nom_Contrat, '" & Nom_Repas & "' AS Nom_Repas, '" & Nom_Garde & "' AS Nom_Garde, '" & Num_Groupe & "' AS Num_Groupe, '" & Nb_Place & "' AS Nb_Place, " & Nom_Employe & " AS Nom_Employe, " & Nom_Utilisateur & " AS Nom_Utilisateur, #" & Format(DateCréation, "mm-dd-yyyy") & "# AS Date_Saisie, #" & Format(DateC, "mm-dd-yyyy") & "# AS Jour;"
            End If
            Next
     
        CmdAdd.Enabled = False
        Me.Statut = "Dates réservés"
        MsgBox "Les gardes ont été ajoutés sur le planning selon contrat N° " & Me.NumeroContrat, vbInformation, "Planning des gardes"
        Case vbNo:  Me.Undo ' Non : On annule les changements...
                    DoCmd.Close '  ... et on ferme
        Case vbCancel: ' Rien ne se passe : On reste dans le formulaire
    End Select
    End If
    End Sub
    je ne vois toujours pas ou ça coince !

  6. #6
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 920
    Points : 4 828
    Points
    4 828
    Par défaut
    Bis repetitam, essaie plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    ....
    str1 = "INSERT INTO Planning ( IDContrat, Enfant, Parents, NFamille, NumeroContrat, Repas, Garde, Groupe, Place, AffectéA, SaisiPar, DateSaisie, Jour )" _
    & " VALUES " _
    & " ( " & Num_Contrat & ",'" & Nom_Enfant & "','" & Nom_Parents & "', " & Num_Famille & ",'" & Nom_Contrat & "','" & Nom_Repas & "','" & Nom_Garde & "','"  _
    & Num_Groupe & "' , '" & Nb_Place & "' , " & Nom_Employe & ", '" & Nom_Utilisateur & "', #" & Format(DateCréation, "mm-dd-yyyy") & "# , #" & Format(DateC, "mm-dd-yyyy") & "# )"
    debug.print str1
     
     CurrentDb.Execute str1
    ....
    montre nous ce qu'affiche debug.print str1 dans la fenetre Execution du VBE.
    Ton problème est surement que l''un de tes valeurs est nulle.
    Dans ce cas il faut utiliser systématiquement la fonction NZ() voir l'aide via F1.
    alors améliorer le texte de ta requete comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    str1 = "INSERT INTO Planning ( IDContrat, Enfant, Parents, NFamille, NumeroContrat, Repas, Garde, Groupe, Place, AffectéA, SaisiPar, DateSaisie, Jour )" _
    & " VALUES " _
    & " ( " & nz(Num_Contrat,0) & ",'" &  nz(Nom_Enfant) & "','" & nz(Nom_Parents) & "', " & nz(Num_Famille,0) & ",'" & nz(Nom_Contrat) & "','" & nz(Nom_Repas) & "','" &  nz(Nom_Garde) & "','"  _
    & nz(Num_Groupe,0) & "' , '" & nz(Nb_Place) & "' , " &  nz(Nom_Employe) & ", '" & nz(Nom_Utilisateur) & "', #" & Format(DateCréation, "mm-dd-yyyy") & "# , #" & Format(DateC, "mm-dd-yyyy") & "# )"
    Et si tu n'es pas sûr si DateCréation ou DateC sont toujours renseignées, il faudra aussi utiliser NZ() adapté pour une date.

    A toi de jouer

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    Mai 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Mai 2016
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    Merci de ta patience ...

    Résultat dans la fenêtre d’exécution : INSERT INTO Planning ( IDContrat, Enfant, Parents, NFamille, NumeroContrat, Repas, Garde, Groupe, Place, AffectéA, SaisiPar, DateSaisie, Jour ) VALUES ( 8,'12','5', FF201612.0002,'CO201612.0001','Avec Repas','Matin','Moyens' , '1' , 2, '', #12-23-2016# , #12-01-2016# )

    le résultat à l'air de coller, puisque tous les champs sont présent

    je n'ai pas de champs null ...

    j'ai le message d'erreur suivant :
    Nom : 25-12-2016 22-10-16.jpg
Affichages : 181
Taille : 220,9 Ko

  8. #8
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 920
    Points : 4 828
    Points
    4 828
    Par défaut
    dans le résultat on remarque que la chaine de caractères FF201612.0002 devrait être encadrée par des ' : il faut corriger

    sinon Place est-elle bien une chaine caractères '1' ?
    AffectéA est bien un numérique 2 ?
    saisiPar est vide : ok ?

    cdlt

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    Mai 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Mai 2016
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par micniv Voir le message
    dans le résultat on remarque que la chaine de caractères FF201612.0002 devrait être encadrée par des ' : il faut corriger

    sinon Place est-elle bien une chaine caractères '1' ?
    AffectéA est bien un numérique 2 ?
    saisiPar est vide : ok ?

    cdlt
    Effectivement, la chaine de caractère : FF201612.0002 doit être entre simple quote (format texte).

    merci de ton aide, le problème est résolu ... et j'obtiens ce qu'il faut.

    Bien à toi !

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

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. [XL-2007] Requete INSERT INTO / UPDATE en VBA
    Par aracnard dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 10/10/2012, 09h02
  3. [AC-2007] Problème de requete INSERT INTO en VBA
    Par Azomix dans le forum VBA Access
    Réponses: 4
    Dernier message: 02/02/2012, 16h57
  4. petite aide sur une requete INSERT INTO
    Par bonneti dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/03/2005, 15h17
  5. Erreur lors d'une requete insert into.. select
    Par Mr N. dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/11/2004, 17h32

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