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 |
Partager