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 :

alimenter une table indépendante depuis plusieurs zones de liste


Sujet :

IHM

  1. #1
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut alimenter une table indépendante depuis plusieurs zones de liste
    bonjour,
    je suis a la recherche d'une personne qui connait bien le langage VBA sur access.

    je suis entrain de créer un programme pour une entreprise et je bug sur une étape.

    voici mon problème:
    je voudrai alimenter une table (TCours) qui a plusieurs colonnes. Les 2 premières sont alimenter par un zone de liste(personnesducour) qui elle a 2 colonnes, 2 autres par une zone de texte (coupons et date_du_cour)et la dernière par une zone de liste déroulante (employer), et toutes ces zones sont dans le même formulaire.
    mon code sql fonctionne sauf pour la zone de liste ou il ne s'y passe rien.
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Private Sub Enregistrercours_Click()
     
    Dim ssql As String
    Dim Itm As Variant, retval
     
     
        With Personnesducour
        For Each Itm In .ItemsSelected
     
    ssql = ""
    DoCmd.SetWarnings False                         'Désactivation des messages access
     
                                                    'Création du code SSQL
            ssql = "INSERT INTO TCours (Personnesducour, EmployeId, Date_du_cour, Coupons)"
            ssql = ssql & "select'" & Me.Personnesducour & "' as C1,"
            ssql = ssql & "'" & Me.EmployeId & "' as C2, "
            ssql = ssql & "'" & Me.Date_du_cour & "' as C3, "
            ssql = ssql & "'" & Me.Coupons & "' as C4; "
     
     
    DoCmd.RunSQL (ssql)                             'Lancement du SSQL
    'DoCmd.RunSQL "delete from Tcours"              'efface les lignes sur la table cours
    DoCmd.SetWarnings True                          'Réactivation des message access
     
        Next Itm
        End With
     
    End Sub
    merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut Petit cours de VBA et SQL
    Bonjour,
    à mon avis, il faut remplacer Me.Personnesducour par Itm :
    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
     
    Private Sub Enregistrercours_Click()
     
    Dim ssql As String
    Dim Itm As Variant, retval
     
     
        With ME.Personnesducour
        For Each Itm In .ItemsSelected
     
    ssql = ""
    DoCmd.SetWarnings False                         'Désactivation des messages access
     
                                                    'Création du code SSQL
            ssql = "INSERT INTO TCours (Personnesducour, EmployeId, Date_du_cour, Coupons)"
            ssql = ssql & " VALUES (""" & Itm & ""","
            ssql = ssql & Me.EmployeId & ", "
            ssql = ssql & "#" & format(Me.Date_du_cour,'dd/mm/yyyy') & "#, "
            ssql = ssql & Me.Coupons & "); "
     
     
    DoCmd.RunSQL (ssql)                             'Lancement du SSQL
    'DoCmd.RunSQL "delete from Tcours"              'efface les lignes sur la table cours
    DoCmd.SetWarnings True                          'Réactivation des message access
     
        Next Itm
        End With
     
    End Sub
    Un conseil, plutôt qu'utiliser les simple quotes, double les doubles-quotes pour plus de sécurité car tu n'es pas à l'abri d'une personne avec un nom contenant un simple quote (exemple D'Aguessau ou N'Dyai) qui peut faire planter ton code.

    Les quotes sont réservés au texte donc à éviter pour le numérique (j'ai supposé que EmployeId et Coupons sont de ce type).
    Le SELECT fonctionne uniquement associé à une clause FROM (donc avec une table ou une requête) : sinon il faut utiliser VALUES.

    Attention avec Date_du_cour si c'est une date il faut les # à la place des ', et utiliser un format car par défaut la date est toujours au format US en VBA donc 01/04/2017 sera interprété 04 Janvier 2017 (c'est d'ailleurs uniquement quand le jour est inférieur ou égal à 12 car pour les autres dates, VBA Access sait les reconnaitre et les convertit sans problème). Par contre, ici tu peux utiliser ' pour le format de date.

    Je mettrai aussi les Docmd.SetWarnings hors de la boucle For : juste avant et après c'est suffisant.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut
    bonsoir tee_grandbois,

    je viens d’insérer les modif dans mon programme et sa ne fonctionne pas. il me met des erreurs pour toutes les lignes.

    je peu vous mettre le programme en pièce jointe en message privé, comme ça vous voyez toute la suite du programme.

    merci de votre aide.

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonsoir,
    il me met des erreurs pour toutes les lignes
    quels types d'erreurs ? des erreurs de syntaxe ou d'exécution ?
    poste une impression d'écran.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    Bonjour,
    à mon avis, il faut remplacer Me.Personnesducour par Itm :
    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
     
    Private Sub Enregistrercours_Click()
     
    Dim ssql As String
    Dim Itm As Variant, retval
     
     
        With ME.Personnesducour
        For Each Itm In .ItemsSelected
     
    ssql = ""
    DoCmd.SetWarnings False                         'Désactivation des messages access
     
                                                    'Création du code SSQL
            ssql = "INSERT INTO TCours (Personnesducour, EmployeId, Date_du_cour, Coupons)"
            ssql = ssql & " VALUES (""" & Itm & ""","
            ssql = ssql & Me.EmployeId & ", "
            ssql = ssql & "#" & format(Me.Date_du_cour,'dd/mm/yyyy') & "#, "
            ssql = ssql & Me.Coupons & "); "
     
     
    DoCmd.RunSQL (ssql)                             'Lancement du SSQL
    'DoCmd.RunSQL "delete from Tcours"              'efface les lignes sur la table cours
    DoCmd.SetWarnings True                          'Réactivation des message access
     
        Next Itm
        End With
     
    End Sub
    Un conseil, plutôt qu'utiliser les simple quotes, double les doubles-quotes pour plus de sécurité car tu n'es pas à l'abri d'une personne avec un nom contenant un simple quote (exemple D'Aguessau ou N'Dyai) qui peut faire planter ton code.

    Les quotes sont réservés au texte donc à éviter pour le numérique (j'ai supposé que EmployeId et Coupons sont de ce type).
    Le SELECT fonctionne uniquement associé à une clause FROM (donc avec une table ou une requête) : sinon il faut utiliser VALUES.

    Attention avec Date_du_cour si c'est une date il faut les # à la place des ', et utiliser un format car par défaut la date est toujours au format US en VBA donc 01/04/2017 sera interprété 04 Janvier 2017 (c'est d'ailleurs uniquement quand le jour est inférieur ou égal à 12 car pour les autres dates, VBA Access sait les reconnaitre et les convertit sans problème). Par contre, ici tu peux utiliser ' pour le format de date.

    Je mettrai aussi les Docmd.SetWarnings hors de la boucle For : juste avant et après c'est suffisant.


    Bonsoir,

    il me met:
    erreur d'exécutuion '3075'
    erreur de syntaxe (opérateur absent) dans l'expression <<'1,'08/04/2017>>
    c'est la date et me.coupons


    il y a également le itm qui reste a 0 au lieu de me mettre le nom (personnesducour)

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    peux-tu me donner :
    1. le type de chaque contrôle (texte, date, nombre ...)
    2. le type de chaque champ de la table (texte, date, nombre ...) qui devrait être, a priori, de même type que ceux des contrôles
    3. le contenu de la liste Personnesducour, c'est à dire ce qu'il y a dans les propriétés suivantes :
    • Largeurs colonnes
    • Contenu
    • Colonne liée

    Merci.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Finalement, après relecture de mon code j'ai trouvé la source des erreurs :
    .ItemData(Itm) à la place de Itm
    et "#" & Format(Me.date_du_cour, "mm/dd/yyyy") & "#, " à la place de "#" & format(Me.Date_du_cour,'dd/mm/yyyy') & "#, "
    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
    Private Sub Enregistrercours_Click()
     
    Dim ssql As String
    Dim Itm As Variant, retval
     
    DoCmd.SetWarnings False                         'Désactivation des messages access
     
    With Me.Personnesducour
        For Each Itm In .ItemsSelected
     
                                                    'Création du code SSQL
            ssql = "INSERT INTO TCours (Personnesducour, EmployeId, Date_du_cour, Coupons)"
            ssql = ssql & " VALUES (""" & .ItemData(Itm) & ""","
            ssql = ssql & Me.EmployeID & ", "
            ssql = ssql & "#" & Format(Me.date_du_cour, "mm/dd/yyyy") & "#, "
            ssql = ssql & Me.Coupons & "); "
     
            DoCmd.RunSQL (ssql)                             'Exécution du code SQL
            'DoCmd.RunSQL "delete from Tcours"              'efface les lignes sur la table cours
     
        Next Itm
    End With
     
    DoCmd.SetWarnings True                          'Réactivation des message access
     
    End Sub
    Si Personnesducour est bien de type texte (et que c'est bien la 1ère colonne de la liste qu'il faut utiliser), que Date_du_cour est une date et que EmpoyeId et Coupons sont numériques, cela devrait fonctionner.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut
    bonjour,
    déjà merci pour votre travail, une partie est résolu.
    le problème avec Personnesducour c'est bon, ça m'affiche la bonne personne.
    par contre les trois autres lignes il me met en erreurs de syntaxe lors du lancement du ssql.

    le texte le voici:
    erreur de syntaxe (opérateur absent) pour l'expression "employeId, date_du_cour et Coupons"

    pour les renseignements que vous m'avez demandés les voici:
    Personnesducour: contenu: vide
    colonne liée: 2
    origine source: liste de valeur
    largeur colonne: 1cm ; 5cm

    Feuille de propriétés:
    coupons: format de texte: texte brut
    date_du_cour: format de texte: date réduite
    empoyeId: contenu: SELECT [Employes].[EmployeId], [Employes].[Initial] FROM Employes;
    origine source: Table/requête

    Table de destination: (TCours)
    Personnesducour: texte court
    EmployeId: numérique
    Date_du_cour: Date/heure
    Coupons: Numérique

  9. #9
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Avril 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 35
    Points : 6
    Points
    6
    Par défaut
    après recherche j'ai trouvé l'erreur d'exécution.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ssql = "INSERT INTO TCours (Personnesducour, EmployeId, Date_du_cour, Coupons)"
            ssql = ssql & "VALUES (""" & .ItemData(Itm) & """, "
            ssql = ssql & "" & Me.EmployeId & ", "
            ssql = ssql & "" & Format(Me.Date_du_cour, "dd/mm/yyyy") & ", "
            ssql = ssql & "" & Me.Coupons & "); "
    j'ai enlevé l'appostrophe entre les guimets entre les &.

    merci beaucoup pour votre travail et votre aide tee_grandbois.

    si vous êtes d'accord, je vous poserai d'autre questions si je suis bloqué.
    bonne soirée

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/10/2009, 16h07
  2. [MySQL] Alimenter une table par plusieurs formulaires et remplacer les valeurs existantes
    Par deshogues dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/03/2009, 17h49
  3. alimenter une tables avec plusieurs formulaires
    Par vibalistic dans le forum VBA Access
    Réponses: 8
    Dernier message: 21/12/2007, 10h20
  4. Réponses: 3
    Dernier message: 11/07/2007, 07h44
  5. Réponses: 4
    Dernier message: 26/08/2004, 08h01

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