OVH Cloud OVH Cloud

Exportation données

4 réponses
Avatar
sharmi
Bonjour

Je travaille avec des données sous Excel et je souhaite automatiser l'exportation des données vers une base access ou un autre fichier excel de façon à ce que uniquement les données rajoutées ou modifiées sont exportées
Comment y parvenir ? Si vous avez des cailloux ou un panneau de direction pour que j'arrive à mes fins ...

4 réponses

Avatar
michdenis
Bonjour sharmi,

Voici un exemple en utilisant ADO( activex data object)

A ) tu dois ajouter à ton projet excel, la référence suivante à ton projet
Pour ce faire , à partir de la fenêtre VBE(visual basic editor) / barre des menus / outils / références et tu coches
dans la liste déroulant :
"Microsoft activex data object 2.0 librairy"

B ) dans l'exemple suivant, tu devras adapter le nom et chemin de ta base de données .mdb
Le nom de table ( fournisseurs dans mon exemple)

C ) Attention, le type de données dans tes champs Excel que tu exportes dans ta table (mdb) doit être compatible au type
de données de tes champs Access

D ) Si tu as dans tes champs de ta table excel, des champs qui n'ont pas de valeurs dans certains enregistrements, tu
dois utiliser une structure de if ..then .. pour tester la présence d'une donnée sinon la procédure ne vas pas beaucoup
apprécier.

E ) Si ta table contient des restrictions pour fin de validation d'un enregistrement ( comme un champ ne peut pas être
vide ) , cela doit aussi être respecté ...


Amuse-toi bien !!


Salutations!

'------------------------------------------
Sub MaRequêteAvecADO()

Dim cnt As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Req As String

Dim Tblo As Variant, Rg As Range

With Worksheets("Denis")
Set Rg = .Range("A1").CurrentRegion
End With
Tblo = Rg

cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:Mes DocumentsComptoir.mdb;" & _
"Jet OLEDB:Database Password=", "admin", ""

Rst.Open "Fournisseurs", cnt, adOpenKeyset, _
adLockOptimistic, adCmdTable

For a = 2 To UBound(Tblo, 1)
With Rst
.AddNew
!Société = Tblo(a, 1)
![Fonction] = Tblo(a, 2)
![Contact] = Tblo(a, 3)
!Adresse = Tblo(a, 4)
!Ville = Tblo(a, 5)
If Tblo(a, 6) <> "" Then
!Région = Tblo(a, 6)
End If
![Code postal] = Tblo(a, 7)
![Pays] = Tblo(a, 8)
If Tblo(a, 9) <> "" Then
![Téléphone] = Tblo(a, 9)
End If
If Tblo(a, 10) <> "" Then
![Fax] = Tblo(a, 10)
End If
.Update
End With
Next
Rst.Close: cnt.Close
Set Rst = Nothing: Set Conn = Nothing

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






"sharmi" a écrit dans le message de
news:
Bonjour,

Je travaille avec des données sous Excel et je souhaite automatiser l'exportation des données vers une base access ou un
autre fichier excel de façon à ce que uniquement les données rajoutées ou modifiées sont exportées.
Comment y parvenir ? Si vous avez des cailloux ou un panneau de direction pour que j'arrive à mes fins ...
Avatar
Pascal Engelmajer
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
http://www.ilyapa.net/baseExcel
"michdenis" a écrit dans le message de news:

Bonjour sharmi,

Voici un exemple en utilisant ADO( activex data object)

A ) tu dois ajouter à ton projet excel, la référence suivante à ton projet
Pour ce faire , à partir de la fenêtre VBE(visual basic editor) /
barre des menus / outils / références et tu coches

dans la liste déroulant :
"Microsoft activex data object 2.0 librairy"

B ) dans l'exemple suivant, tu devras adapter le nom et chemin de ta base
de données .mdb

Le nom de table ( fournisseurs dans mon exemple)

C ) Attention, le type de données dans tes champs Excel que tu exportes
dans ta table (mdb) doit être compatible au type

de données de tes champs Access

D ) Si tu as dans tes champs de ta table excel, des champs qui n'ont pas
de valeurs dans certains enregistrements, tu

dois utiliser une structure de if ..then .. pour tester la présence d'une
donnée sinon la procédure ne vas pas beaucoup

apprécier.

E ) Si ta table contient des restrictions pour fin de validation d'un
enregistrement ( comme un champ ne peut pas être

vide ) , cela doit aussi être respecté ...


Amuse-toi bien !!


Salutations!

'------------------------------------------
Sub MaRequêteAvecADO()

Dim cnt As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Req As String

Dim Tblo As Variant, Rg As Range

With Worksheets("Denis")
Set Rg = .Range("A1").CurrentRegion
End With
Tblo = Rg

cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:Mes DocumentsComptoir.mdb;" & _
"Jet OLEDB:Database Password=", "admin", ""

Rst.Open "Fournisseurs", cnt, adOpenKeyset, _
adLockOptimistic, adCmdTable

For a = 2 To UBound(Tblo, 1)
With Rst
.AddNew
!Société = Tblo(a, 1)
![Fonction] = Tblo(a, 2)
![Contact] = Tblo(a, 3)
!Adresse = Tblo(a, 4)
!Ville = Tblo(a, 5)
If Tblo(a, 6) <> "" Then
!Région = Tblo(a, 6)
End If
![Code postal] = Tblo(a, 7)
![Pays] = Tblo(a, 8)
If Tblo(a, 9) <> "" Then
![Téléphone] = Tblo(a, 9)
End If
If Tblo(a, 10) <> "" Then
![Fax] = Tblo(a, 10)
End If
.Update
End With
Next
Rst.Close: cnt.Close
Set Rst = Nothing: Set Conn = Nothing

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






"sharmi" a écrit dans le message de
news:
Bonjour,

Je travaille avec des données sous Excel et je souhaite automatiser
l'exportation des données vers une base access ou un

autre fichier excel de façon à ce que uniquement les données rajoutées ou
modifiées sont exportées.

Comment y parvenir ? Si vous avez des cailloux ou un panneau de direction
pour que j'arrive à mes fins ...





Avatar
Pascal Engelmajer
Salut,
pour compléter Michdenis...
J'utilise une feuille "maj" avec dans la feuille de la base de données (j'ai
adapté à l'exemple)
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long
Dim plValidite As Range
Set plValidite = Range("A1").CurrentRegion
If Not Intersect(Target, plValidite) Is Nothing Then
With Target
For r = .Cells(1).Row To .Cells(.Cells.Count).Row
Sheets("maj").Cells(r, 1).Value = CDbl(Date) * 84600 + Timer
Next r
End With
End If
End Sub
En B1 la trace de la dernière mise à jour
la procédure de Michdenis devient :
Option Explicit

Sub MaRequêteAvecADO()

Dim cnt As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Req As String

Dim Tblo As Variant, Rg As Range
Dim Tblr As Variant, RgMaj As Range 'ajout *************
Dim maj As Double 'ajout *************

With Worksheets("Denis")
Set Rg = .Range("A1").CurrentRegion
Set RgMaj = .Range(Range("A1"), Range("A65536")).End(xlUp) 'ajout
*************
End With
Tblo = Rg
Tblr = RgMaj 'ajout *************
maj = Sheets("maj").Range("B1").Value 'ajout *************
cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:Mes DocumentsComptoir.mdb;" & _
"Jet OLEDB:Database Password=", "admin", ""

Rst.Open "Fournisseurs", cnt, adOpenKeyset, _
adLockOptimistic, adCmdTable

For a = 2 To UBound(Tblo, 1)
If Tblr(a) < maj Then Exit For 'ajout *************
With Rst
.AddNew
!Société = Tblo(a, 1)
![Fonction] = Tblo(a, 2)
![Contact] = Tblo(a, 3)
!Adresse = Tblo(a, 4)
!Ville = Tblo(a, 5)
If Tblo(a, 6) <> "" Then
!Région = Tblo(a, 6)
End If
![Code postal] = Tblo(a, 7)
![Pays] = Tblo(a, 8)
If Tblo(a, 9) <> "" Then
![Téléphone] = Tblo(a, 9)
End If
If Tblo(a, 10) <> "" Then
![Fax] = Tblo(a, 10)
End If
.Update
End With
Next
Rst.Close: cnt.Close
Set Rst = Nothing: Set Conn = Nothing
Sheets("maj").Range("B1").Value = CDbl(Date) * 84600 + Timer 'ajout
*************
End Sub
'-----------------------------------------------
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
http://www.ilyapa.net/baseExcel
"michdenis" a écrit dans le message de news:

Bonjour sharmi,

Voici un exemple en utilisant ADO( activex data object)

A ) tu dois ajouter à ton projet excel, la référence suivante à ton projet
Pour ce faire , à partir de la fenêtre VBE(visual basic editor) /
barre des menus / outils / références et tu coches

dans la liste déroulant :
"Microsoft activex data object 2.0 librairy"

B ) dans l'exemple suivant, tu devras adapter le nom et chemin de ta base
de données .mdb

Le nom de table ( fournisseurs dans mon exemple)

C ) Attention, le type de données dans tes champs Excel que tu exportes
dans ta table (mdb) doit être compatible au type

de données de tes champs Access

D ) Si tu as dans tes champs de ta table excel, des champs qui n'ont pas
de valeurs dans certains enregistrements, tu

dois utiliser une structure de if ..then .. pour tester la présence d'une
donnée sinon la procédure ne vas pas beaucoup

apprécier.

E ) Si ta table contient des restrictions pour fin de validation d'un
enregistrement ( comme un champ ne peut pas être

vide ) , cela doit aussi être respecté ...


Amuse-toi bien !!


Salutations!

'------------------------------------------
Sub MaRequêteAvecADO()

Dim cnt As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Req As String

Dim Tblo As Variant, Rg As Range

With Worksheets("Denis")
Set Rg = .Range("A1").CurrentRegion
End With
Tblo = Rg

cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:Mes DocumentsComptoir.mdb;" & _
"Jet OLEDB:Database Password=", "admin", ""

Rst.Open "Fournisseurs", cnt, adOpenKeyset, _
adLockOptimistic, adCmdTable

For a = 2 To UBound(Tblo, 1)
With Rst
.AddNew
!Société = Tblo(a, 1)
![Fonction] = Tblo(a, 2)
![Contact] = Tblo(a, 3)
!Adresse = Tblo(a, 4)
!Ville = Tblo(a, 5)
If Tblo(a, 6) <> "" Then
!Région = Tblo(a, 6)
End If
![Code postal] = Tblo(a, 7)
![Pays] = Tblo(a, 8)
If Tblo(a, 9) <> "" Then
![Téléphone] = Tblo(a, 9)
End If
If Tblo(a, 10) <> "" Then
![Fax] = Tblo(a, 10)
End If
.Update
End With
Next
Rst.Close: cnt.Close
Set Rst = Nothing: Set Conn = Nothing

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






"sharmi" a écrit dans le message de
news:
Bonjour,

Je travaille avec des données sous Excel et je souhaite automatiser
l'exportation des données vers une base access ou un

autre fichier excel de façon à ce que uniquement les données rajoutées ou
modifiées sont exportées.

Comment y parvenir ? Si vous avez des cailloux ou un panneau de direction
pour que j'arrive à mes fins ...





Avatar
Pascal Engelmajer
salut,
modifier
If Tblr(a) > maj Then
End if
au lieu de Exit For (utilisé pour mon test)
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
http://www.ilyapa.net/baseExcel
"Pascal Engelmajer" a écrit dans le
message de news: #
Salut,
pour compléter Michdenis...
J'utilise une feuille "maj" avec dans la feuille de la base de données
(j'ai

adapté à l'exemple)
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long
Dim plValidite As Range
Set plValidite = Range("A1").CurrentRegion
If Not Intersect(Target, plValidite) Is Nothing Then
With Target
For r = .Cells(1).Row To .Cells(.Cells.Count).Row
Sheets("maj").Cells(r, 1).Value = CDbl(Date) * 84600 +
Timer

Next r
End With
End If
End Sub
En B1 la trace de la dernière mise à jour
la procédure de Michdenis devient :
Option Explicit

Sub MaRequêteAvecADO()

Dim cnt As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Req As String

Dim Tblo As Variant, Rg As Range
Dim Tblr As Variant, RgMaj As Range 'ajout *************
Dim maj As Double 'ajout *************

With Worksheets("Denis")
Set Rg = .Range("A1").CurrentRegion
Set RgMaj = .Range(Range("A1"), Range("A65536")).End(xlUp) 'ajout
*************
End With
Tblo = Rg
Tblr = RgMaj 'ajout *************
maj = Sheets("maj").Range("B1").Value 'ajout *************
cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:Mes DocumentsComptoir.mdb;" & _
"Jet OLEDB:Database Password=", "admin", ""

Rst.Open "Fournisseurs", cnt, adOpenKeyset, _
adLockOptimistic, adCmdTable

For a = 2 To UBound(Tblo, 1)
If Tblr(a) < maj Then Exit For 'ajout *************
With Rst
.AddNew
!Société = Tblo(a, 1)
![Fonction] = Tblo(a, 2)
![Contact] = Tblo(a, 3)
!Adresse = Tblo(a, 4)
!Ville = Tblo(a, 5)
If Tblo(a, 6) <> "" Then
!Région = Tblo(a, 6)
End If
![Code postal] = Tblo(a, 7)
![Pays] = Tblo(a, 8)
If Tblo(a, 9) <> "" Then
![Téléphone] = Tblo(a, 9)
End If
If Tblo(a, 10) <> "" Then
![Fax] = Tblo(a, 10)
End If
.Update
End With
Next
Rst.Close: cnt.Close
Set Rst = Nothing: Set Conn = Nothing
Sheets("maj").Range("B1").Value = CDbl(Date) * 84600 + Timer 'ajout
*************
End Sub
'-----------------------------------------------
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
http://www.ilyapa.net/baseExcel
"michdenis" a écrit dans le message de news:

Bonjour sharmi,

Voici un exemple en utilisant ADO( activex data object)

A ) tu dois ajouter à ton projet excel, la référence suivante à ton
projet


Pour ce faire , à partir de la fenêtre VBE(visual basic editor) /
barre des menus / outils / références et tu coches

dans la liste déroulant :
"Microsoft activex data object 2.0 librairy"

B ) dans l'exemple suivant, tu devras adapter le nom et chemin de ta
base


de données .mdb
Le nom de table ( fournisseurs dans mon exemple)

C ) Attention, le type de données dans tes champs Excel que tu exportes
dans ta table (mdb) doit être compatible au type

de données de tes champs Access

D ) Si tu as dans tes champs de ta table excel, des champs qui n'ont pas
de valeurs dans certains enregistrements, tu

dois utiliser une structure de if ..then .. pour tester la présence
d'une


donnée sinon la procédure ne vas pas beaucoup
apprécier.

E ) Si ta table contient des restrictions pour fin de validation d'un
enregistrement ( comme un champ ne peut pas être

vide ) , cela doit aussi être respecté ...


Amuse-toi bien !!


Salutations!

'------------------------------------------
Sub MaRequêteAvecADO()

Dim cnt As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Req As String

Dim Tblo As Variant, Rg As Range

With Worksheets("Denis")
Set Rg = .Range("A1").CurrentRegion
End With
Tblo = Rg

cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:Mes DocumentsComptoir.mdb;" & _
"Jet OLEDB:Database Password=", "admin", ""

Rst.Open "Fournisseurs", cnt, adOpenKeyset, _
adLockOptimistic, adCmdTable

For a = 2 To UBound(Tblo, 1)
With Rst
.AddNew
!Société = Tblo(a, 1)
![Fonction] = Tblo(a, 2)
![Contact] = Tblo(a, 3)
!Adresse = Tblo(a, 4)
!Ville = Tblo(a, 5)
If Tblo(a, 6) <> "" Then
!Région = Tblo(a, 6)
End If
![Code postal] = Tblo(a, 7)
![Pays] = Tblo(a, 8)
If Tblo(a, 9) <> "" Then
![Téléphone] = Tblo(a, 9)
End If
If Tblo(a, 10) <> "" Then
![Fax] = Tblo(a, 10)
End If
.Update
End With
Next
Rst.Close: cnt.Close
Set Rst = Nothing: Set Conn = Nothing

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






"sharmi" a écrit dans le message
de


news:
Bonjour,

Je travaille avec des données sous Excel et je souhaite automatiser
l'exportation des données vers une base access ou un

autre fichier excel de façon à ce que uniquement les données rajoutées
ou


modifiées sont exportées.
Comment y parvenir ? Si vous avez des cailloux ou un panneau de
direction


pour que j'arrive à mes fins ...