Doublons !

lolo_bob2 Messages postés 14 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 25 avril 2006 - 13 avril 2006 à 08:47
lolo_bob2 Messages postés 14 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 25 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

Merci beaucoup

A+

2 réponses

cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Derniè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
0
lolo_bob2 Messages postés 14 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 25 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

End Sub

Je vais faire le test
merci beaucoup
A+
0
Rejoignez-nous