Bonjour à tous,

Voila je fait une application dans laquelle je dois importer des données depuis des classeurs excel dans access

Ci joint le code utilisé qui est une adaptation d'un code pioché dans d'autre discussion de ce forum
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
Public Sub import()
'déclaration des variables
Dim oApp As Excel.Application
Dim oWkb As Excel.Workbook
Dim oWSht As Excel.Worksheet
Dim i As Integer
Dim cSQL As String
 
'on va choisir le fichier que l'on souhaite importer
FileDialog(msoFileDialogFilePicker).Show
 
Set oApp = CreateObject("excel.application")
Set oWkb = oApp.Workbooks.Open(FileDialog(msoFileDialogFilePicker).SelectedItems(1)) 'mettez ici le chemin vers votre fichier Excel
Set oWSht = oWkb.Worksheets("rdv_par_jour") 'mettez ici le nom de la feuille qui contient les données à importer
 
'première ligne ou commence l'import
i = 2
 
'pour éviter les messages lors de l'ajout des enregistrements
DoCmd.SetWarnings False
 
'tant qu'on n'est pas arrivés à la ligne 600 du tableur
While oWSht.Range("A" & i).Value <> ""
'on peut aussi arrêter l'importation lorsque le programme rencontre une case
'vide en remplaçant la ligne du While par :
'While oWSht.Range("I" & i).Value <> "" '(où I représente la colonne et i la ligne)
 
'condition de remplissage de la table => eviter les doublons
'si l'enregistrement existe déjà dans la table destination,
'on passe à la ligne suivante sans l'importer
If DCount("*", "[dbo_CLIENTS]", "[INDICE] LIKE '" & oWSht.Cells(i, 1) & "'") = 0 Then
'le numéro 1 correspond au numéro de la colonne source, tel que : A=1, B=2, C=3 ...
 
'requète SQL (avec en paramètre la ligne i et le numéro de la colonne comme précisé au-dessus)
cSQL = "insert into [dbo_CLIENTS] ( [INDICE], [NUMCLI],[REGIONCOMM],[CAMPAGNE] )" & _
        " values (" & Chr(34) & oWSht.Cells(i, 1) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 3) & Chr(34) & _
        ", " & Chr(34) & oWSht.Cells(i, 4) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 29) & Chr(34) & ");"
'ici, on ne prend que les colonnes M (=13) et K (=11).
 
'exécute la requète
DoCmd.RunSQL cSQL
 
 
'==============================================
'        on créé les ligne ds tblinfordv
'==============================================
 
'on créé en simultané la ligne supplémentaire dans la table TBLINFORDV et on peuplpe le champs refrence
'code a retravailler car il faudrait pouvoir créer une seul ligne à la fois et pas tenter de recreer
'les lignes déjà existantes
 
cSQL = "INSERT INTO TBLINFORDV ( reference )" & _
        " SELECT dbo_CLIENTS.reference" & _
        " FROM dbo_CLIENTS;"
 
'exécute la requète
DoCmd.RunSQL cSQL
 
'=============================================
'           on rempli la table info
'=============================================
 
 
cSQL = "UPDATE TBLINFORDV SET TBLINFORDV.[statut rdv]=" & Chr(34) & oWSht.Cells(i, 50) & Chr(34) & _
        ", TBLINFORDV.[date export]=" & Chr(34) & oWSht.Cells(i, 51) & Chr(34) & _
        ", TBLINFORDV.[site livraison]=" & Chr(34) & oWSht.Cells(i, 52) & Chr(34) & _
        " WHERE [TBLINFORDV].[reference]=[dbo_CLIENTS].[reference];"
 
MsgBox cSQL
 
 
'exécute la requète
DoCmd.RunSQL cSQL
 
 
End If
 
'on incrémente la variable i pour passer à la ligne suivante
i = i + 1
 
Wend
 
'on réactive les messages d'erreurs
DoCmd.SetWarnings True
 
'on ferme l'appli excel et on vide les ressources
oWkb.Close
Set oWkb = Nothing
 
End Sub
mon problèe est le suivant: depuis ce fichier excel je dois mettre à jour plusieurs tables de la base de donnée. j'ai essayé de le faire via cette partie
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
'=============================================
'           on rempli la table info
'=============================================
 
 
cSQL = "UPDATE TBLINFORDV SET TBLINFORDV.[statut rdv]=" & Chr(34) & oWSht.Cells(i, 50) & Chr(34) & _
        ", TBLINFORDV.[date export]=" & Chr(34) & oWSht.Cells(i, 51) & Chr(34) & _
        ", TBLINFORDV.[site livraison]=" & Chr(34) & oWSht.Cells(i, 52) & Chr(34) & _
        " WHERE [TBLINFORDV].[reference]=[dbo_CLIENTS].[reference];"
 
MsgBox cSQL
 
 
'exécute la requète
DoCmd.RunSQL cSQL
mais apparemment je dois mal appréhender mon histoire car a chaque j'ai un message qui me demande d'entrer un valeur de parametre pour dbo_CLIENTS.reference ou TBLINFORDV.reference


L'un d'entre vous a-t'il une idée sur la façon dont je peux mettre mes tables a jour en cascades car malgré plusieurs recherche je sèche sur ce point

merci a tous ceux qui voudront bien m'aider