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 :

Copier des données d'une table vers une autre [AC-2000]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 33
    Points : 26
    Points
    26
    Par défaut Copier des données d'une table vers une autre
    Bonjour,

    Dans une base de données de devis/facturation, j'aimerai créer une facture à partir d'un devis existant.

    J'ai deux tables pour le devis dev_entete et dev_lignes reliés par le numéro de devis et deux tables pour la facture fac_entete et fac_lignes.

    Quel est le moyen le plus simple pour copier les données des mes tables devis vers mes tables factures en vba ?

    Je ne suis pas très à l'aise avec DAO pour filtrer et copier les données...
    J'ai essayé en filtrant un formulaire devis et en copiant les lignes et les champs un par un dans un formulaire facture mais ce n'est pas très chouette.
    J'ai pensé aussi à des requêtes action.

    Avez-vous des idées ?

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 768
    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 768
    Points : 14 809
    Points
    14 809
    Par défaut
    Bonsoir,
    Je te propose cette solution : tu peux créer tes factures en sélectionnant un devis en filtrant, par exemple, sur le n° de devis (numéro auto, de préférence), puis, sur clic ou double clic de ce même numéro, créer la facture et les lignes associées.

    Si ta table fac_entete a un numéro auto comme clé unique, il faut que tu mémorises le numéro de devis dans l'entète pour pouvoir ensuite retrouver la bonne facture et mettre à jour le numéro de facture dans les lignes associées. Tu peux le faire avec Dlookup.
    Tu peux aussi toper les devis qui ont été traités pour ne plus les voir apparaître la prochaine fois dans ton formulaire:
    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 Nodevis_Click()
    Dim strSQL as String
    Dim lgNumfact as long
     
    ' Insertion entète facture
    strSQL = "INSERT INTO fac_entete ( nodevis, txtfacture, mttotal ) " & _
    "SELECT dev_entete.nodevis, dev_entete.txtdevis, dev_entete.mttotal " & _
    "FROM dev_entete WHERE nodevis = " & forms!frmdevis!nodevis &";"
     
    CurrentDb.Execute strSQL, dbFailOnError
     
    'Recherche du n° de la facture insérée portant le n° devis sélectionné
    lgNumFact = DLookup("nofacture", "fac_entete", "nodevis=" & Forms!frmdevis!nodevis)
     
    ' Insertion lignes factures
    strSQL = "INSERT INTO fac_lignes ( nofacture, nodevis, noligne, txtligne, mtfact ) " & _
    "SELECT " & lgNumFact &", dev_lignes.nodevis, dev_lignes.noligne, dev_lignes.txtligne, dev_lignes.mtdevis " & _
    "FROM dev_lignes WHERE nodevis = " & forms!frmdevis!nodevis &";"
     
    CurrentDb.Execute strSQL, dbFailOnError
     
    ' Topage du devis pour ne plus le retraiter
    strSQL = "UPDATE dev_entete set estTraite = True WHERE nodevis = " & forms!frmdevis!nodevis &";"
     
    CurrentDb.Execute strSQL, dbFailOnError
    End Sub

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Bonjour et merci tee_grandbois !

    Si j'ai bien compris ta solution, tu utilise le SQL pour créer la facture et copier les lignes.

    Je ne connaissais pas cette méthode, c'est en effet beaucoup plus simple que ce que j'avais essayé. Je vais mettre ça en application !

    J'ai bien le N° de devis qui est unique et en clé de ma table dev_entete, et je fais le lien avec les lignes par ce numéro, donc ça fonctionne pour filtrer.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Une autre petite question ...

    Avec cette méthode, est-il possible d'affecter dans certains champs de la table fac_entete, des valeurs qui ne sont pas dans la table dev_entete mais que j'ai saisi dans mon formulaire de sélection du devis ?

    Merci

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 768
    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 768
    Points : 14 809
    Points
    14 809
    Par défaut
    Bonsoir,
    c'est possible comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    strSQL = "INSERT INTO fac_entete ( nodevis, txtfacture, mttotal, champnum, champtexte ) " & _
    "SELECT dev_entete.nodevis, dev_entete.txtdevis, dev_entete.mttotal, " & forms!frmdevis!chpnum & ",'" &forms!frmdevis!chmptexte  & "'" & _
    " FROM dev_entete WHERE nodevis = " & forms!frmdevis!nodevis &";"

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Merci beaucoup !

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

Discussions similaires

  1. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  2. [VB.Net] Comment copier une DataRow d'une table vers une autre ?
    Par YLF dans le forum Accès aux données
    Réponses: 7
    Dernier message: 05/09/2012, 23h23
  3. Réponses: 1
    Dernier message: 19/10/2011, 12h13
  4. Copier les enregistrements d'une table vers une table d'une autre DB
    Par karinette21 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2008, 21h50
  5. Transferer des données d'un table vers une autre
    Par pooi1 dans le forum VBA Access
    Réponses: 4
    Dernier message: 31/05/2007, 01h05

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