Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/12/2011, 12h16   #1
Futur Membre du Club
 
Homme
Architecte technique
Inscription : septembre 2011
Messages : 42
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Architecte technique
Secteur : Bâtiment

Informations forums :
Inscription : septembre 2011
Messages : 42
Points : 18
Points : 18
Par défaut Comment fusionner plusieurs tables

Bonjour,

Je dispose d'une base avec plusieurs tables de structures souvent identiques mais parfois avec des champs différents (des champs en plus ou en moins dans certaines tables). Ce que je veux réaliser est ceci : créer une nouvelle table avec tous les champs existants dans les autres tables et fusionner leurs enregistrements, de manière à avoir une grande table avec les enregistrements copiés des autres.

J'ai beau chercher sur le net, je n'arrive pas à trouver une solution satisfaisante, beaucoup parlent de faire des copier/coller, mais ce n'est pas pratique dans mon cas, puisque je veux que l'utilisateur ait la possibilité de choisir les tables à fusionner, d'importer de nouvelles tables à fusionner, etc.

Merci de votre aide.

A+
oreoolep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 12h41   #2
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 257
Points : 2 980
Points : 2 980
Bonjour,
il est difficile de répondre de manière universelle à cette question.

Tu risques d'être confronté à différents problèmes qui pourraient s'avérer bloquants :
- Certains champs obligatoires sont manquants dans au moins 1 des tables à fusionner
- Certains champs ont une définition différente dans au moins 2 tables
...

Après, si toutes les contraintes sont résolues,
il doit être possible de passer en revue les champs d'une table qu'il faudrait importer pour les générer.

Code :
1
2
3
4
5
6
7
    Set dbprev = DAO.OpenDatabase(Import_Db)
       Set Tbd = dbprev.TableDefs(strValues)
           'Boucle sur les champs
           For idx = 1 To tdb.Fields.Count
 
                '......
            Next
Je pense que ton projet est très ambitieux....
__________________
(\ _ /) Cordialement G@dz
(='.'=)

(")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 15h40   #3
Futur Membre du Club
 
Homme
Architecte technique
Inscription : septembre 2011
Messages : 42
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Architecte technique
Secteur : Bâtiment

Informations forums :
Inscription : septembre 2011
Messages : 42
Points : 18
Points : 18
Par défaut Contraintes

Bonjour,

Merci beaucoup d'avoir pris le temps de me lire.

Pour les contraintes, je pense que c'est assez gérable, puisqu'en fait les tables proviennent à la base de Foxpro, et donc, certaines difficultés potentielles sont déjà gérées à ce niveau. Mais, cela reste quand même assez difficile à faire comme boulot.

Je vais prendre le bout de fil que tu m'as tendu , et je vais essayer d'en tisser quelque chose.

A bientôt.

Ore
oreoolep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 21h34   #4
Futur Membre du Club
 
Homme
Architecte technique
Inscription : septembre 2011
Messages : 42
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Architecte technique
Secteur : Bâtiment

Informations forums :
Inscription : septembre 2011
Messages : 42
Points : 18
Points : 18
Par défaut Solution

Bonjour,

Je crois avoir trouvé une façon relativement simple (à défaut d'être élégante peut-être) de gérer le problème, et de fait, cela marche à merveille pour moi .

L'idée est simple : j'importe les tables à fusionner dans une base dorsale. Là-bas, j'ai aussi une table qui liste toutes les tables à fusionner (on peut aussi développer la démarche en créant des possibilités de sélection d'une liste particulière de tables à fusionner, etc.).

Dans ma base frontale, j'ai créé une table, dite globale, vide, mais qui possède la structure de tous les champs susceptibles d'être contenus dans les tables à fusionner (il suffit juste de copier la structure d'une des tables avec un max de champs et de coller, en faisant les ajouts et ajustements éventuels nécessaires).

Dans la base dorsale je copie la table globale vide à chaque fois que je veux faire une nouvelle fusion de tables.

Et je réalise la fusion.


Je joins le code qui fonctionne chez moi, si ça peut aider quelqu'un.

Code :
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
Sub fusion()
Dim db As dao.Database
Dim rst As dao.Recordset
Dim tabs As String
Dim codsql As String
Dim baz As String
On Error GoTo list_Err
baz = 'on insère ici le chemin complet vers la base dorsale où se trouvent les tables à fusionner
Set db = OpenDatabase(baz)
Set rst = db.OpenRecordset("Projekt") 'ceci est une table qui liste les noms des tables pouvant être fusionnées.
DoCmd.CopyObject baz, “Tab_glob_dest”, acTable, "Mod_table"  'je crée dans la base « baz » une copie du modèle de la table dont la structure est définie dans une table dite « modèle » (Mod_table)
rst.MoveFirst
Do Until rst.EOF
'traitement de la fusion
codsql = "INSERT INTO " & “Tab_glob_dest”  & " IN '" & baz & "' SELECT * FROM " & rst(0) & " IN '" & baz & "';" 'on comprend que rst(0) donne le nom de la table à fusionner
DoCmd.RunSQL codsql
rst.MoveNext
Loop
Set rst = Nothing
Set db = Nothing
list_Err_Exit:
    Exit Sub
 
list_Err:
    MsgBox Error$
    Resume list_Err_Exit
End Sub
A+
oreoolep est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h37.


 
 
 
 
Partenaires

Hébergement Web