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 :

Ajouter plusieurs enregistrements à une table suivant sous form


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2019
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Ajouter plusieurs enregistrements à une table suivant sous form
    Bonjour à tous,

    Je fais appel à vos lumières,

    J'ai un sous formulaire de type feuille de données qui affiche, selon le champs père sélectionné, de 1 à plusieurs lignes. Sa source est une requête.

    J'aimerais, sur un évènement, ajouter à une table tous les enregistrements de ce sous formulaire à la suite.

    Quelqu'un connait-il un code VBA pour y parvenir ?

    Un très grand merci d'avance, ce beau forum m'aide beaucoup en ce moment.

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Bonjour,

    J'imagine qu'il n'y en a pas des milliers donc on peut le faire ligne à ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private sub copieliste
    on error goto err:
    if  not Me.monsousform.recordsetclone.eof then Me.monsousform.recordsetclone.movefirst
    while not Me.monsousform.recordsetclone.eof
      currentdb.execute "insert into matable (c1,c2...) values (" & Me.monsousform.recordsetclone!champ1 ....)", dbfailonerror
      Me.monsousform.recordsetclone.movenext
    wend
    exit sub
    err:
    msgbox "erreur " &  & err.description
    end sub
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2019
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Merci Nico84,

    J'ai essayé et ça me renvoie " membre de méthode ou de données introuvable".

    Entretemps j'ai tenté un "docmd.runsql insert into...", je crois que ça pouvait aussi être une solution ? Qu'est-ce qui serait le plus adapté ?
    Ma base est sur mysql et j'utilise access comme interface.

    J'aimerais te montrer le code que tu m'as donné tel que je l'ai recopié, comment met-on en forme un code pour qu'il soit présentable sur le forum ?

    Pardon mais je débute clairement sur le forum.

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Citation Envoyé par tototwin Voir le message
    J'ai essayé et ça me renvoie " membre de méthode ou de données introuvable".
    Il faudrait utiliser le debuggueur pour savoir à quelle ligne. C'est probablement pas SQL qui pose problème

    Citation Envoyé par tototwin Voir le message
    Entretemps j'ai tenté un "docmd.runsql insert into...", je crois que ça pouvait aussi être une solution ? Qu'est-ce qui serait le plus adapté ?
    Ma base est sur mysql et j'utilise access comme interface.
    currentdb.execute a une gestion d'erreur, pas docmd.runsql donc c'est toujours mieux amha
    Les 2 sont du DAO donc avec du SQL syntaxe access et non Mysql. C'est plus facile au début mais ça marche moins bien si la base n'est pas access.

    Citation Envoyé par tototwin Voir le message
    J'aimerais te montrer le code que tu m'as donné tel que je l'ai recopié, comment met-on en forme un code pour qu'il soit présentable sur le forum ?
    Copier-coller et mise en form avec la balise [code] (bouton # ci-dessus)
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2019
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Merci !

    Le debuggeur ne semble pas fonctionner, ça gueule quand je pousse F8. En plaçant un point d'arrêt sur n'importe quelle ligne (même la 1) l'erreur apparait...

    En tous cas, voici le code que j'ai saisi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Commande315_Click()
        On Error GoTo err:
    If Not Me.sf_01_01_nomenclature.RecordsetClone.EOF Then Me.sf_01_01_nomenclature.RecordsetClone.MoveFirst
    While Not Me.sf_01_01_nomenclature.RecordsetClone.EOF
      CurrentDb.Execute "insert into t_appro (idt_produit,idt_ouvrage, datecreation, quantite) values (idt_produit,idt_ouvrage, datecreation, quantite)", dbFailOnError
      Me.monsousform.RecordsetClone.MoveNext
    Wend
    Exit Sub
    err:
    MsgBox " erreur " & "" & err.Description
    End Sub

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Bon il y a encore un peu de travail

    Il faut constituer la string "à la main" comme dans mon 1er post :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim sr as string
    sr = "insert into t_appro (idt_produit,idt_ouvrage, datecreation, quantite) values (" & Me.sf_01_01_nomenclature.RecordsetClone.idt_produit & "," .... & ")"
    msgbox sr 'pour vérif
    CurrentDb.Execute sr, dbFailOnError
    Si la valeur est une string il faut l'encadrer de '
    si c'est un nombre non entier remplacer la , par un .
    si c'est une date l'encadrer de ' ou de # au choix

    A la fin ça doit faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into matable (c1,c2,c3) values (123,'abc','20/10/2020')  'standard local
    ou 
    insert into matable (c1,c2,c3) values (123,'abc',#10/20/2020#) 'standard US
    Et puis bien sûr devant le movenext c'est pas bon !

    Dernier point, c'est typiquement une procédure qui crée des redondances dans une base de données (des informations en double) et ce n'est pas une bonne pratique car il est très difficile alors de garantir que les infos vont rester cohérentes...
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

Discussions similaires

  1. [MySQL] Récupération données d'une table sql sous forme de tableau
    Par ifiii dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/01/2011, 14h30
  2. Réponses: 2
    Dernier message: 27/06/2007, 10h22
  3. [MySQL] afficher un champ d'une table mysql sous form d'un menu combobox
    Par belakhdarbts10 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/05/2007, 11h29
  4. Comment ajouter un enregistrement à une table et modifier les autres
    Par Pepitos dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 20/03/2007, 18h53
  5. Réponses: 2
    Dernier message: 15/12/2006, 10h31

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