Alors, pour ceux qui en auront besoin, voici le code [dernière version fonctionnelle], qui permet de copier les plages de cellules voulues d'un fichier Excel vers les champs voulus d'une table Access, en évitant le doublons.
Ce code résume la discussion que j'ai eue avec totofe et présente les dernières avancées auxquelles nous sommes arrivés.
Je vais enlever les chemins de mes fichiers et mettre des noms génériques qui faciliteront la compréhension.
Bon, tous les commentaires ne sont là que pour la compréhension du code, mais si vous aviez toutefois des questions, n'hésitez pas
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 Private Sub Commande1_Click() 'Ici l'importation se déclenche en cliquant sur le bouton "Commande1" 'mais on peut aussi mettre ce code à l'ouverture d'un formulaire Dim oApp As Excel.Application Dim oWkb As Excel.Workbook Dim oWSht As Excel.Worksheet Set oApp = CreateObject("excel.application") Set oWkb = oApp.Workbooks.Open("chemin_du_fichier_xls") 'mettez ici le chemin vers votre fichier Excel Set oWSht = oWkb.Worksheets("nom_de_la_feuille_concernée_par_limportation") 'mettez ici le nom de la feuille qui contient les données à importer 'première ligne ou commence l'import i = 11 '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 i < 600 '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 <> "" '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("*", "[nom_da_la_table_destination]", "[nom_du_champ_destination_qui_ne_doit_pas_avoir_de_doublons] LIKE '" & oWSht.Cells(i, 9) & "*'") = 0 Then 'le numéro 9 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 [table_destination] ( [champ1], [champ2] ) values (" & Chr(34) & oWSht.Cells(i, 13) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 11) & Chr(34) & ")" 'ici, on ne prend que les colonnes M (=13) et K (=11). '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
Partager