OVH Cloud OVH Cloud

liaison excel et access

3 réponses
Avatar
lolo_bob2
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
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


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+

3 réponses

Avatar
FxM
Bonsoir,

Come l'a envisagé Denis dans un autre fil (ce n'est pas beau de réécrire
la même question !), je jetterais un oeil dans Access pour accepter les
doublons.

@+
FxM



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
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


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+




Avatar
michdenis
Bonjour lolo_bob2,

As-tu essayé quelque chose comme ceci :

Évidemment, tu dois ajouter la bibliothèque :
Microsoft DAO 3.6 objects Librairy
'--------------------------------------------
Sub ExporterVersAccess()

Dim bd As DAO.Database
Dim Rst As DAO.Recordset

With Worksheets("Feuil1")
.Range("B4:B" & .Range("B65536").End(xlUp).Row).Name = "Plage"
End With

Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel 8.0")

bd.Execute "INSERT INTO toto IN 'C:ExcelComptoir.mdb' SELECT * FROM [Plage]"
ThisWorkbook.Names("Plage").delete
bd.Close
Set bd = Nothing
End Sub
'--------------------------------------------


Salutations!



"lolo_bob2" a écrit dans le message de news:

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
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


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+
Avatar
Ardus Petus
Voici ton code modifié pour accepter les mises à jour et les créations.
Ne manquent plus que les suppressions.

Il faut au préalable créer un index sur le champ sap de ta table.
CREATE UNIQUE INDEX SapNo ON produits (sap) WITH DISALLOW NULL ;

Cordialement,
--
AP

'-----------------------------------
Sub AjouterDesEnregistrementsAUneTable()
Dim MyDB As DAO.Database, MyTable As DAO.Recordset, Sh As Worksheet

Set MyDB = OpenDatabase("S:QualitéBDD QualitéBDD Qualité.mdb")
Set MyTable = MyDB.OpenRecordset("produits", dbOpenTable)
Set Sh = Worksheets("Feuil1")

With MyTable
.Index = "sapNo"
For r = 5 To Sh.Cells(Rows.Count, "A").End(xlUp).Row
.Seek "=", Sh.Cells(r, "A")
If .NoMatch Then
.AddNew
!sap = Sh.Cells(r, "A")
!nom = Sh.Cells(r, "B")
!prenom = Sh.Cells(r, "C")
.Update
Else
.Edit
!nom = Sh.Cells(r, "B")
!prenom = Sh.Cells(r, "C")
.Update
End If
Next r
End With
MyTable.Close
MyDB.Close

End Sub
'------------------------------

"lolo_bob2" a écrit dans le message de
news:
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

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


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+