Bonjour,

Je suis nouveau dans le forum et surtout je viens de débuter avec VBA ACCESS (ne m'en tenez pas rigueur).
En fait, ça fait 2 semaines que je cherche une solution ou du moins des pistes pour pouvoir automatiser une tache qui me parait très complexe. Et j'espère que quelqu'un pourra m'aider.

Mon problème est le suivant : je souhaite automatiser une requête ajout en VBA ACCESS (je ne sais pas, si c'est faisable déjà...), de la manière suivante:

J'ai deux tables. Une Table qui se nomme ("ENTREE") contenant des données brutes que je souhaite ajouter à la table "TRAVAIL", suivant certains critères. La table source "ENTREE", contient 59 Champs (de Champ1 à Champ59).


Et cet ajout des données de la table source ("ENTREE") à la table destination ("TRAVAIL"), doit se faire en faisant correspondre (à partir du deuxième champ) les données du deuxième champ de la table source "ENTREE", aux données du premier champ de la table de destination "TRAVAIL" ainsi de suite, peu importe le nom du Champ. J'insiste sur le fait qu'il faut correspondre à partir du deuxième champ, car les noms des champs ne sont pas les memes pour chaque mois. Raison pour laquelle, c'est tres long à faire à la main...
ensuite, dans la boucle, je souhaite que la macro vba n'ajoute pas (ou ne tient pas compte) les champs où les enregistrements sont vides, mais en suivant toujours l'ordre des champs (champ2 ajouter à champ1, champ2 à champ3 etc..), et je mets un critère au champ1 = 2


J'ai essayé d'écrire un code mais rien ne marche. Voici donc mon code VBA ACCESS:

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
'Déclaration des variables
 
Dim lignesEntree, lignesTravail As Recordset, BaseMapping As DAO.Database, _
i As Integer, RequeteSQL As QueryDef, requete As String, valeur As Byte, _
MaTable As DAO.TableDef, MesChamps As DAO.Field
 
Set BaseMapping = Application.CurrentDb 'Ma base
Set TblSource = BaseMapping.TableDefs("ENTREE") 'Table source
Set TblDestination = BaseMapping.TableDefs("TRAVAIL") 'Table destination
 
'Les entêtes du champ
 Set MesChamps = TblSource.Fields ("Champ1", "Champ2", "Champ3", "Champ4", "Champ5", "Champ6", "Champ7", "Champ8", "Champ9", _
                                 Champ10", "Champ11", "Champ12", "Champ13", "Champ14", "Champ15", "Champ16", "Champ17", _
                                 Champ18", "Champ19", "Champ20", "Champ21", "Champ22", "Champ23", "Champ24", "Champ25", _
                                 Champ26", "Champ27", "Champ28", "Champ29", "Champ30", "Champ31", "Champ32", "Champ33", _
                                 Champ34", "Champ35", "Champ36", "Champ37", "Champ38", "Champ39", "Champ40", "Champ41", _
                                 Champ42", "Champ43", "Champ44", "Champ45", "Champ46", "Champ47", "Champ48", "Champ49", _
                                 Champ50", "Champ51", "Champ52", "Champ53", "Champ54", "Champ55", "Champ56", "Champ57", _
                                 Champ58", "Champ59")
 
 
'TblDestination.Fields.Append MesChamps
 
 
 Set lignesEntree = BaseMapping.OpenRecordset("SELECT * FROM ENTREE WHERE Champ1=" & Chr(34) & "2" & Chr(34), dbOpenDynaset)
 Set lignesTravail = BaseMapping.OpenRecordset("TRAVAIL")
 
With MesChamps
 
'Stocker les champs vides
 
For Each MesChamps In MaTable.Fields
 
If MesChamps.Name <> "Champ1" Then
   MesChamps <> "Champ55" Or _
   MesChamps <> "Champ56" Or _
   MesChamps <> "Champ57" Or _
   MesChamps <> "Champ58" Or _
   MesChamps <> "ID" Then
 
If lignesEntree <> "" Then
 
requete = "INSERT INTO TblDestination * MesChamps.OrdinalPosition =0"
 
End If
End If
 
Next MesChamps
 
End With

Dans l'espoir qu'une âme charitable, pourra m'aider à résoudre ce problème