bonsoir,
voici mes remarques concernant ton code:
- quand on a un numéro auto dans une table, il faut spécifier tous les champs à remplir,
- le nombre de champs à remplir ne correspond pas au nombre de valeurs à insérer (d'où le champ0 que j'ai ajouté au début de l'instruction et dans la table, à toi de regarder lequel il manque, le numéroauto s'incrémente automatiquement et ne doit pas faire partie des champs à valoriser,
- date est un mot réservé, il faut mettre les crochets pour éviter une erreur d'exécution,
- il ne faut pas, en effet, de guillemets autour du nom de la table,
- il faut utiliser les guillemets et pas l'apostrophe pour délimiter les valeurs (d'ailleurs, la 3ème ligne contenant une apostrophe dans un champ a provoqué une erreur d'exécution).
Instructions à modifier:
lines(X) = "INSERT INTO ""P213"" VALUES ('" & Join(a(), "','") & "')"
à remplacer par:
lines(X) = "INSERT INTO P213 (champ0,compte,[date],Spec,Nature_1,Nature_2,Nature_3,PNC,Montant) VALUES (""" & Join(a(), """,""") & """)"
- il faut exécuter les requête une par une en parcourant le tableau lines() pour les lancer.
Instructions à modifier:
1 2 3 4 5
| Dim SQL As String
SQL = SQL + Join(lines(), ";")
DoCmd.RunSQL SQL |
à remplacer par:
1 2 3
| For i = 0 To UBound(lines())
CurrentDb.Execute lines(i), dbFailOnError
Next |
Remarques: CurrentDb.Execute évite le message d'avertissement et l'option dbFailOnerror annules les mises à jour si une erreur se produit
Dans Access, le caractère de fin d'instruction ";" n'est pas obligatoire (sauf si on utilise conjointement l'instruction Parameters)
Partager