Erreur dans code vb

fab101 Messages postés 139 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 27 septembre 2010 - 12 janv. 2005 à 13:50
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012 - 12 janv. 2005 à 15:01
Bonjour

voila j'ai fait ce code
qui permet d'ajouter des donnnées dans access a partir de excel


Sub importexcel() '(myname As String)

Dim Plage As Range

Dim Array1 As Variant

Dim x As Variant

Dim Db1 As DAO.Database

Dim Rs1 As DAO.Recordset

Dim appexcel As excel.Application
Dim wbexcel As excel.Workbook
Dim coucou As String
Dim i As Integer

Set appexcel = CreateObject("excel.application")
appexcel.Visible = True
Set wbexcel = appexcel.Workbooks.Open("c:\excel\classeur2.xls")

appexcel.Sheets("feuil1").Select
Set Plage = wbexcel.Worksheets("Feuil1").Range("a1").CurrentRegion.Offset(0, 0)

' Ouverture de la base de données Commandes.mdb

Set Db1 = CurrentDb()
Set Rs1 = Db1.OpenRecordset("site", dbOpenDynaset)

' Un objet Recordset représente les enregistrements d'une table

' Détermination de la taille de la plage à envoyer vers Access

' Ecriture des données depuis Excel vers les enregistrement de la table Factures

With Rs1
i = 1
For i = 1 To 8

.AddNew

.Fields("lieu") = Plage.Cells(8, 3)
.Fields("ville") = Plage.Cells(8, 4)
Plage.Select
.Update
'.MoveNext

Next
End With

Set Plage = wbexcel.Worksheets("Feuil1").Range("C15:C24").CurrentRegion.Offset(0, 0)
Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count)
Array1 = Plage.Value
With Rs1
For x = 1 To UBound(Array1, 1)

.Edit

.Fields("adresse") = Array1(x, 1)

.Update

.MoveNext

Next

End With
appexcel.Workbooks.Close

' Fermeture de la base Commandes.mdb

Db1.Close

appexcel.Quit

End Sub

le probleme c'est qu'il ya une erreur sur edit et met aucun enregistrment en cours

la table est vide au depart

merci pour vos reponses

3 réponses

madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
12 janv. 2005 à 14:24
Pour ajouter des valeurs dans une table...

Je préfère faire ma boucle sur le tableau excel



je construie la requete d'update et je l'execute en direct sans passer par un recordset.

dim mabase as database

dim Monsql as string



for i=0 to Fin step 1

'* Construction de la requete

Monsql "Update SITE set lieu '" &
Plage.Cells(8, 3) & "', ville = '" & Plage.Cells(8, 4) & "';"



'* execution de la mise à jour

mabase.Execute(Monsql)



'* Gestion de l'ereur sql

if err.number <> 0 then

msgbox err.number & "#" & err.description

exit sub

endif



'* réinitialisation de la chaine SQL

Monsql = ""



next i



Apres seulement j'instancierai le Rsl avec movefirst/move next en mode EDit pour des mise à jour .

(Peut -être faut il que tu te positionnes à nouveau le move first je sais pas ou se balade le curseur dans ton cas de figure)



Mais franchement je préferai de loin faire tout ça depuis une feuille unique avec les 3 valeurs

lieu ville adresse... et une requete unitaire sans recordset pour la mise à jour.



Tu devrais t'interresser d'avantage à la gestion des erreurs



madbob
0
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
12 janv. 2005 à 14:42
Si ton curseur est sur le dernier enregistrement... forcément il n'en trouve plus



Quelques conseils si tu veux biens :

1) Utilise on error goto ou move next intercept l'erreur, et affiche le n° de l'erreur et son message,



2) Les recordset doivent être libérés après usage c'est plus propres
notamment pour la gestion de la mémoire... Plus généralement, assures
toi que les objets que tu instancies par un Set nécessitent ou non d'être libérés :MonRs.close

madbob
0
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
12 janv. 2005 à 15:01
J'avai la tête dans le c... c'est pas un update que tu doit faire mais un

monsql = "INSERT INTO SITE values (" & val1 & ", '" val2 &"');"

ne pas oublier de parser correctement le sql avec le " ' " pour les valeurt non numériques



madbob
0
Rejoignez-nous