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

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 !!!!!!!!!!!
 
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
 
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
 
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 é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 !!!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
496
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
657
  • Question Question
Microsoft 365 Programme trop lent
Réponses
12
Affichages
978
Retour