Vba sous access - insertion d'une requete dans une table

cs_bonnaud Messages postés 7 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 25 mai 2005 - 4 mai 2005 à 10:40
cs_bonnaud Messages postés 7 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 25 mai 2005 - 12 mai 2005 à 10:17
Bonjour,

J'ai fait une requête sous access en vba qui me permet de calculer un nouveau champ que j'ai nommé total à partir d'une table.
J'arrive à visionner cette requête sous le nom de R_Conso.
J'aimerai maintenant insérer ce champ total créé par cette requête dans une autre table existante.

Est-ce que cela est possible et comment faut-il faire ?

Merci d'avance.

4 réponses

cs_tecman Messages postés 63 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 juin 2005
6 mai 2005 à 16:45
Salut bonnaud.


Je ne comprend pas pourquoi tu tiens à inclure un nouveau champ.
Il me semble plus judicieux de structurer tes tables et ensuite de les mettre à jour à l'aide d'une requête (du style UPDATE maRequete INNER JOIN maTable ON maRequete.id maTable.id SET maTable.total [maRequete].[total];).

Cela te permet ainsi de conserver la structure des tables et des droits et contraintes associées.

Tecman
0
cs_bonnaud Messages postés 7 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 25 mai 2005
10 mai 2005 à 10:52
Salut Tecman.

J'ai essayé de faire ce que tu m'avais dit (ce qui me parait effectivement beaucoup plus correct) mais access me dit "Too few parameters".

En fait, je dispose d'une table que j'ai importée. Je veux garder certains champs de cette table et en rajouter en faisant des calculs que j'ai fait à l'aide de requêtes.

Voici le code :

Public Sub Insert()

Dim MaBD As Database
Dim MonSQL As String
Dim MonSQL2 As String
Dim MonSQL3 As String
Dim MonSQL4 As String


Set MaBD = CurrentDb()
MonSQL = "SELECT FOURNISSEUR,[TYPE FICHIER],[TYPE PIECE],[DATE PAIEMENT], [NUMERO FACTURE],[DATE FACTURE],[MODE PAIEMENT], [CODE BANQUE], [SOCIETE FACTUREE], [COMPTE DE FACTURATION],[AUTRE REFERENCE], [NUMERO MARCHE], [NUMERO CONTRAT SERVICE],[DATE DEBUT FACTURE CP],[DATE FIN FACTURE CP],[COMPTE UTILISATEUR],[NOM USUEL SITE UTILISATEUR] INTO Table1 FROM Table8"

MaBD.Execute MonSQL


MonSQL2 = "SELECT Table8.[NOM SITE INSTALLE], RoundCost (sum (RoundCost([QUANTITE CONSOMMEE]*[TARIF UNITAIRE CONSO]/60))) AS Total INTO Table2 FROM Table8 GROUP BY Table8.[NOM SITE INSTALLE] " 'requête qui calcule la conso avant reduction Q conso * Tarif unitaire et fait la somme pour chaque site'

MaBD.Execute MonSQL2
MonSQL3 "UPDATE Table1 INNER JOIN Table2 ON Table1.id Table2.id SET Table2.total = Table1.total"

MaBD.Execute MonSQL3


MaBD.Close
End Sub

En clair, j'ai importé un fichier excel sous la table8 et j'ai inséré certains champs dans la table1. Je fais ensuite des calculs avec la table8 et je voudrais donc insérer ce calcul dans ma nouvelle table (la table1). Or il me dit "Too few Parameters" quand j'exécute MonSQL3.

Que dois je faire pour contourner ce problème ?

Merci pour ton aide.

Bonnaud
0
cs_tecman Messages postés 63 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 juin 2005
10 mai 2005 à 11:20
Oups !!

Tout d'abord, je te conseillerais de modifier le nom de tes champs.
Il est ainsi recommandé de ne pas insérer de code non ASCII dans les nommages. Donc évites les espaces (préfère le _ ) les accents et autres signes cabalistiques pouvant ne pas permettre une interprétation par les machines.
Personnellement, pour les nommages mon principe et d'abord de nommer l'objet puis son(ses) qualifiant(s). Ainsi [TYPE FICHIER] devriendrait fichierType (j'utilise les majuscules -méthode Hongroise- pour séparer les mots).

Pour la mise à jour, pourquoi faire des calculs dans une table puis l'insérer dans une autre. Autant faire directement la mise à jour dans la table voulue.
Le fait d'importer des données d'une table dans une autre et faire ensuite les calculs n'est pas optimun.
Il te faut garder à l'esprit que l'espace mémoire est une richesse qu'il est nécessaire de préserver; même si actuellement tu n'es pas confronter à cette problématique avec tes tables Access. Entre la gestion des index, les accès écriture-lecture et autres, tout ceci est très gourmand en CPU.

Je te conseillerais donc de conserver les données à un seul endroit. Evites les copies de table à table, car cela complique les mises à jour (quelles sont les bonnes données ?).
Met à jour les champs selon tes calculs dans cette table.
Créé une vue (requête de sélection sous Access) pour ne voir que les données voulues.

Bon courage.

PS : Aprés renommage, peux-tu m'envoyer ta base si elle n'est pas trop confidentielle ?

Tecman
0
cs_bonnaud Messages postés 7 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 25 mai 2005
12 mai 2005 à 10:17
Re !

Je suis toujours perdu. En fait, ma table est un fichier excel que j'ai importé sous access.
Je dois faire des calculs dessus. Comme tu l'as compris, je fais une requête. Cette requete
me calcule 3 nouveaux champs (je peux pas faire autrement car les champs sont liés).
J'arrive à visionner cette requete qui est donc une table à 3 champs.
Et je voudrais insérer ces 3 champs dans une nouvelle table qui sera ma table finale
(elle comprendra également d'autres champs).
Comment pouvoir insérer ces champs dans cette table ?
Je n'ai toujours pas trouvé de solutions.

Merci de ton aide.

Bonnaud.

PS : Ces données sont confidentielles, sinon je t'aurais envoyé la base
sans aucun problème.
0
Rejoignez-nous