Bonjour,

J'utilise ce code VBA pour rentrer des valeurs d'un fichier excel dans une table.

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
Option Compare Database
 
Private Sub Commande0_Click()
 
    'Déclaration des variables pour ouvrir Excel en VBA
    Dim xlApp As Variant, xlBook As Variant, xlSheet As Variant, xlPath As String, wsName As String, startRow As Integer, pkeycol As String, acTable As String, pkey As String
    Dim i As Integer, cSQL As String
 
    'On desactive les messages d'erreurs
    DoCmd.SetWarnings False
 
    'Préciser que l'on souhaite ouvrir un seul fichier
    Application.FileDialog(msoFileDialogFilePicker).AllowMultiSelect = False
    'Ouvre une boite de dialogue pour ouvrir ton fichier Excel
    Application.FileDialog(msoFileDialogFilePicker).Show
    'Récpère le chemin du fichier Excel dans la variable : chemin
    chemin = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
 
 
    'XlApp t'ouvre un objet EXCEL
    'XlBook t'ouvre le classeur ( chemin ), ton fichier excel
    'Xlsheet te positionne sur la feuil ou l'on va procéder à l'extraction
    'XlApp.visible t'affiche le fichier excel ouvert. Tu peux le mettre sur false si tu veux pas le voir s'ouvrir
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Open("" & chemin & "")
    Set xlSheet = xlBook.Worksheets("Feuil5")
    xlApp.Visible = True
 
    'On se positione sur la feuil5
    xlBook.Worksheets("Feuil5").Activate
 
    'On définie les différents paramètres pour intégrer les données dans la table
    wsName = "Feuil5"
    'Définie le numéros de ligne ou doit commencer l'exportation. Si tu as des en-tête, tu positionnes sur la ligne 2
    startRow = 1
    'pkeycol permet de définir la colonne sur lasquel on va boucler plus tard pour tester si il y a encore des données à insérer dans la table
    pkeycol = "A"
    'Définie la table access ou tu vas importer tes données
    acTable = "Préparation"
 
    i = startRow
 
    With xlSheet
        'arrêter l'importation lorsque l'on rencontre une case vide
        While .Range(pkeycol & i).Value <> "" '(où pKeyCol représente la colonne et i la ligne)
 
                    'Requete SQL, pour exporter tes données
                    cSQL = "INSERT INTO " & acTable & " ([Date],[Code GE],[Activité],[Zone],[HeureD],[HeureF],[Pause],[Colis]) VALUES (" & Chr(34) & .Range("A" & i) & Chr(34) & ", " & Chr(34) & .Range("B" & i) & Chr(34) & ", " & Chr(34) & .Range("C" & i) & Chr(34) & ", " & Chr(34) & .Range("D" & i) & Chr(34) & ", " & Chr(34) & .Range("E" & i) & Chr(34) & ", " & Chr(34) & .Range("F" & i) & Chr(34) & ", " & Chr(34) & .Range("G" & i) & Chr(34) & ", " & Chr(34) & .Range("H" & i) & Chr(34) & ");"
                    'exécute la requète
                    DoCmd.RunSQL cSQL
                    'on incrémente la variable i pour passer à la ligne suivante
                    i = i + 1
        Wend
 
    End With
 
    'On ferme le fichier excel, et on ne sauvegarde pas. Si tu veus sauvegarder tu mets sur true
    xlBook.Close savechanges:=False
    'On ferme l'objet excel
    xlApp.Quit
 
    'On libère les variables
    Set xlBook = Nothing
    Set xlApp = Nothing
    Set xlSheet = Nothing
 
    'on réactive les messages d'erreurs
    DoCmd.SetWarnings True
 
 
End Sub
Tout fonctionne bien, le seul problème c'est que sur mes 24 lignes de mon fichier Excel, uniquement la 4 ème ligne s'ajoute à la table. De plus quand je lance deux fois la macro sa me rajoute toujours la ligne 4 mais un decallage du numéros auto de 24. Donc je suppose que les données s'intègre quand même dans la table mais s'enregistre pas.

Toutes les cellules du fichier Excel sont aux mêmes format et je ne comprend pas pourquoi une seul de ces lignes s'ajoutent.

Caractéristique de ma table préparation :

http://imageshack.us/photo/my-images/17/tableaccess.jpg


Le format pour la date est en date abrégé , et HeureDe t HeureF sont aux format heure complet.

Voila si quelqu’un à une idée pourquoi une seule ligne s'intègre dans la table.

Cordialement