Export d'Excel vers TableAccess: dernières données

  • Initiateur de la discussion basma
  • Date de début
B

basma

Guest
Bonjour.

J'ai créé un petit tableau excel de 7 colonnes.
J'introduis une donnée dans chaque colonne.
J'exporte ces lignes dans une Table Access.
Mais, avec ma macro ( cfr ci-dessous ), je n'arrive pas à exporter les dernières lignes introduites. J'exporte toujours toutes les lignes.
Et il y a bien sûr des doublons.
==>> Comment faire pour ne pas reprendre ce qui a déjà été exporté ? n'exporter que les nouvelles lignes dans la table Access, sans effacer les données précédentes ?

Ma macro:

Sub XLAX()
'
' XLAX Macro
' Macro recorded 24/02/2006 by e1201
'

'Définition des éléments utilisés'
'- Base Access : Acces1.mdb'
'- Table Access : Récup Table '
'- 7 Champs Excel vers la Table Access : Nom requête, Département deman
deur,...'
'- Feuille Excel : Excel Data.xls'
'- Sheet Excel : Fiche'

Dim Plage As Range
Dim Array1 As Variant
Dim Db1 As Database
Dim Rs1 As Recordset

MsgBox ' lancer 1 fois la macro svp ! Merci ! '

' Ouverture de la base de données Acces1.mdb
Set Db1 = DBEngine.OpenDatabase(ThisWorkbook.Path & '\\Acces1.mdb')

' Ouverture de la table Récup Table

' Un objet Recordset représente les enregistrements d'une table
Set Rs1 = Db1.OpenRecordset('Récup Table', dbOpenDynaset)

' Détermination de la taille de la plage à envoyer vers Access
Set Plage = Worksheets('Fiche').Range('A1').CurrentRegion.Offset(1,
0)
Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count)
Plage.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
Array1 = Plage.Value

' Ecriture des données depuis Excel vers les enregistrements de la t
able Récup Table
For x = 1 To UBound(Array1, 1)
With Rs1
.AddNew
.Fields('Nom requête') = Array1(x, 1)
.Fields('Département demandeur') = Array1(x, 2)
.Fields('Personne de contact') = Array1(x, 3)
.Fields('Départements impliqués') = Array1(x, 4)
.Fields('Date d'entrée de la requête') = Array1(x, 5)
.Fields('Description requête') = Array1(x, 6)
.Fields('N° requête') = Array1(x, 7)
.Update
End With
Next x

' Fermeture de la base Acces1.mdb
Db1.Close


MsgBox 'Game Over ! Well done, Forrest !'

'Sauvegarde'
ActiveWorkbook.Save


End Sub


J'espère être clair....
Si quelqu'un peut m'aider : MERCI !!!!!!!!!!!
 
D

Danix

Guest
Bonjour,

Si tu ne veux pas avoir les données déjà inscrites en double, tu peux par la méthode FindFirst chercher la clé unique identifiant l'enregistrement et faire un edit au lieu d'un Add si tu le trouves et ensuite mettre à jour l'enregistrement.

Ce qui donne si l'on considère que le champs N° Requete estla clé de l'enregistrement

For x = 1 To UBound(Array1, 1)
With Rs1
.FindFirst [N° requête] = ''' & array1(x,7) & '''
if not Rs1.NoMatch Then
.Edit
else
.AddNew
endif
.Fields('Nom requête') = Array1(x, 1)
.Fields('Département demandeur') = Array1(x, 2)
.Fields('Personne de contact') = Array1(x, 3)
.Fields('Départements impliqués') = Array1(x, 4)
.Fields('Date d'entrée de la requête') = Array1(x, 5)
.Fields('Description requête') = Array1(x, 6)
.Fields('N° requête') = Array1(x, 7)
.Update
End With
Next x

J'espère que cela pourra t'aider.

Slts
 

basma

XLDnaute Junior
Désolé, mais ça ne fonctionne pas !
J'exporte toujours vers la table Access les champs déjà présents + le nouveau. Donc données en double.
Et si j'ai 2 fois le même N° requête, c'est tout de même exporté ! :silly:

Merci beaucoup !

Basma
 
B

basma

Guest
Désolé, mais ça ne fonctionne pas !
J'exporte toujours vers la table Access les champs déjà présents + le nouveau. Donc données en double.
Et si j'ai 2 fois le même N° requête, c'est tout de même exporté ! :silly:

Merci beaucoup !

Basma
 

basma

XLDnaute Junior
basma écrit:
Bonjour.

J'ai créé un petit tableau excel de 7 colonnes.
J'introduis une donnée dans chaque colonne.
J'exporte ces lignes dans une Table Access.
Mais, avec ma macro ( cfr ci-dessous ), je n'arrive pas à exporter les dernières lignes introduites. J'exporte toujours toutes les lignes.
Et il y a bien sûr des doublons.
==>> Comment faire pour ne pas reprendre ce qui a déjà été exporté ? n'exporter que les nouvelles lignes dans la table Access, sans effacer les données précédentes ?

Ma macro:

Sub XLAX()
'
' XLAX Macro
' Macro recorded 24/02/2006 by e1201
'

'Définition des éléments utilisés'
'- Base Access : Acces1.mdb'
'- Table Access : Récup Table '
'- 7 Champs Excel vers la Table Access : Nom requête, Département deman
deur,...'
'- Feuille Excel : Excel Data.xls'
'- Sheet Excel : Fiche'

Dim Plage As Range
Dim Array1 As Variant
Dim Db1 As Database
Dim Rs1 As Recordset

MsgBox ' lancer 1 fois la macro svp ! Merci ! '

' Ouverture de la base de données Acces1.mdb
Set Db1 = DBEngine.OpenDatabase(ThisWorkbook.Path & '\\Acces1.mdb')

' Ouverture de la table Récup Table

' Un objet Recordset représente les enregistrements d'une table
Set Rs1 = Db1.OpenRecordset('Récup Table', dbOpenDynaset)

' Détermination de la taille de la plage à envoyer vers Access
Set Plage = Worksheets('Fiche').Range('A1').CurrentRegion.Offset(1,
0)
Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count)
Plage.Select

' Lecture de la plage pour renvoyer une valeur contenant un tableau
Array1 = Plage.Value

' Ecriture des données depuis Excel vers les enregistrements de la t
able Récup Table
For x = 1 To UBound(Array1, 1)
With Rs1
.AddNew
.Fields('Nom requête') = Array1(x, 1)
.Fields('Département demandeur') = Array1(x, 2)
.Fields('Personne de contact') = Array1(x, 3)
.Fields('Départements impliqués') = Array1(x, 4)
.Fields('Date d'entrée de la requête') = Array1(x, 5)
.Fields('Description requête') = Array1(x, 6)
.Fields('N° requête') = Array1(x, 7)
.Update
End With
Next x

' Fermeture de la base Acces1.mdb
Db1.Close


MsgBox 'Game Over ! Well done, Forrest !'

'Sauvegarde'
ActiveWorkbook.Save


End Sub


J'espère être clair....
Si quelqu'un peut m'aider : MERCI !!!!!!!!!!!
---------------

Suggestion de Danix ( malheureusement mais ça ne fonctionne pas !
J'exporte toujours vers la table Access les champs déjà présents + le nouveau. Donc données en
double.
Et si j'ai 2 fois le même N° requête, c'est tout de même exporté !):

Ce qui donne si l'on considère que le champs N° Requete estla clé de l'enregistrement

For x = 1 To UBound(Array1, 1)
With Rs1
.FindFirst [N° requête] = ''' & array1(x,7) & '''
if not Rs1.NoMatch Then
.Edit
else
.AddNew
endif
.Fields('Nom requête') = Array1(x, 1)
.Fields('Département demandeur') = Array1(x, 2)
.Fields('Personne de contact') = Array1(x, 3)
.Fields('Départements impliqués') = Array1(x, 4)
.Fields('Date d'entrée de la requête') = Array1(x, 5)
.Fields('Description requête') = Array1(x, 6)
.Fields('N° requête') = Array1(x, 7)
.Update
End With
Next x

D'avance encore merci beaucoup pour votre aide !!!
 

Discussions similaires

Réponses
3
Affichages
265
Réponses
4
Affichages
351
Réponses
7
Affichages
565

Statistiques des forums

Discussions
314 011
Messages
2 104 528
Membres
109 061
dernier inscrit
nedjima