lolo_bob2
Messages postés14Date d'inscriptionmardi 25 octobre 2005StatutMembreDernière intervention25 avril 2006
-
13 avril 2006 à 08:47
lolo_bob2
Messages postés14Date d'inscriptionmardi 25 octobre 2005StatutMembreDernière intervention25 avril 2006
-
13 avril 2006 à 11:21
Bonjour à tous,
Voila j'ai un code VBA qui permet d'envoyer des données d'excel vers une table access.
Cela fonctionne parfaitemement, le seul problème que je rencontre est le suivant si j'envoie des données lorsque la table est vide il n'y a pas de probleme cela fonctionne. Si je rajoute une ligne au fichier excel et que je renvoie les données, la nouvelle ligne ne s'inscrit pas dans la table access, je pense que c parcequ'il touve des doublons !
j'ai un premier code celui de base et un second que j'ai essayé d'améliorer...
Sub AjouterDesEnregistrementsAUneTable()
Dim MyDB As Database, MyTable As Recordset, Sh As Worksheet
Set MyDB = OpenDatabase("S:\Qualité\BDD Qualité\BDD Qualité.mdb")
Set MyTable = MyDB.OpenRecordset("produits")
Set Sh = Worksheets("Feuil1")
With Sh
For Each r In .Range("A5:C300").Rows
With MyTable
.AddNew
!sap = Sh.Cells(r.Row, 1)
!nom = Sh.Cells(r.Row, 2)
!prenom = Sh.Cells(r.Row, 3)
.Update
End With
Next
End With Set MyDB Nothing: Set MyTable Nothing: Set Sh = Nothing
End Sub
Le second code amélioré avec une conditionnel :
Sub AjouterDesEnregistrementsAUneTable()
Dim test As Byte
Dim rs As Recordset
Dim MyDB As Database, MyTable As Recordset, Sh As Worksheet
test = 0
Set MyDB = OpenDatabase("S:\Qualité\BDD Qualité\BDD Qualité.mdb")
Set MyTable = MyDB.OpenRecordset("produits")
Set Sh = Worksheets("Feuil1")
Set rs = "Select distinct sap from produits"
For Each r In .Range("A5:C300").Rows
Do While (rs.EOF False And test 0)
'Si la clé de ta ligne à ajouter est deja utilisée alors on stop de comparerIf (rs!sap Sh.Cells(r.Row, 1)) Then test 1
Loop
'si la clé est non prise alors on ajoute
If (test = 0) Then
With MyTable
.AddNew
!sap = Sh.Cells(r.Row, 1)
!nom = Sh.Cells(r.Row, 2)
!prenom = Sh.Cells(r.Row, 3)
.Update
End With
End If
test = 0
Next
End Sub
j'ai une erreur qui me dit "erreur de compilation incompatibilité de type"
je pense qu'il y a un probleme dans le code mais je sais pas ou car il me grise la ligne select ..from... et apres il me met en jaune "Sub AjouterDesEnregistrementsAUneTable()"
Pouvez vous m'aider
cs_moustachu
Messages postés1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDernière intervention 1 janvier 2012 13 avril 2006 à 09:14
Oui si rs est un recordset, Set rs = "Select distinct sap from produits" ne va pas. Tu dois ouvrir ton Recordset avec OpenRecordSet("Select distinct....")
++ Moustachu
lolo_bob2
Messages postés14Date d'inscriptionmardi 25 octobre 2005StatutMembreDernière intervention25 avril 2006 13 avril 2006 à 11:21
Ok
je dois donc écrire cela :
OpenRecordSet ("Select distinct sap from produits")
For Each r In .Range("A5:C300").Rows
Do While (rs.EOF False And test 0)
'Si la clé de ta ligne à ajouter est deja utilisée alors on stop de comparer If (rs!sap Sh.Cells(r.Row, 1)) Then test 1
Loop
'si la clé est non prise alors on ajoute
If (test = 0) Then
With MyTable
.AddNew
!sap = Sh.Cells(r.Row, 1)
!nom = Sh.Cells(r.Row, 2)
!prenom = Sh.Cells(r.Row, 3)
.Update
End With
End If
test = 0
Next