Retour chariot et communication Excel - Access

S

Stéphane

Guest
Bonjour,

J'ai un fichier excel pour historiser des informations.
Or aujourd'hui, ce fichier fait presque 29 mille lignes (environ 8 Mo).

L'ouverture du fichier devient très longue et les filtres également. Je lance ensuite des macros pour faire des calculs.

Je souhaiterai donc exporter ce fichier sous Access. Car Access supporterai mieux cette volumétrie. Je pourrai ainsi faire mes filtres par des requêtes sous Access et ensuite, je pourrais faire un transfert vers Excel pour faire mes derniers calculs sur les données filtrées.


1ere étape : Envoyer les données d'Excel vers Access :

Ca j'ai reussi. Mais les retours chariots d'Excel sont interprétés sous Access par un 'carré'.
Donc, ma première question (sachant que je ne suis pas un pros d'Access et n'y connais rien en macro), comment puis-je faire pour remplacer ce 'carré' sous Access par un vrai retour chariot ?


2ieme étape : Envoyer les données filtrées d'Access vers Excel :

La encore, j'y arrive. Mais j'ai le même problème avec les retours chariots. Sauf qu'un retour chariot d'Access est interprété par Excel par 2 'carré'.
Donc ma deuxième question, comment puis-je faire pour remplacer ces 2 'carré' sous Excel par un vrai retour chariot ?

Je vous remercie pour votre aide. ;)

Car là, mon fichier Excel va bientôt exploser de part le nombre de lignes de que j'ai à traiter. Et je ne peux rien supprimer.

Merci d'avance.
 

MichelXld

XLDnaute Barbatruc
bonjour

si j'ai bien compris ta demande , il faut remplacer les retours à la ligne d'Excel : Alt + Entree ( equivalences Chr(10) , Vblf ) par les retours à la ligne d'Access : Ctrl + Entree ( equivalences vbCrLf , Chr(13) + Chr(10))

par macro cela donnerait

Cell = Application.WorksheetFunction.Substitute(Cell, Chr(10), Chr(13) + Chr(10))


dans cet exemple , avant d'effectuer l'export vers Accees , tu selectionnes ta plage de données et tu executes la macro pour mettre en forme les données Excel

Sub Test_V01()
Dim Cell As Range

For Each Cell In Selection
Cell = Application.WorksheetFunction.Substitute(Cell, Chr(10), Chr(13) + Chr(10))
Next Cell
End Sub


ensuite tu peux exporter tes données vers Access


un fois que c'est fait (ou apres un import d'Access) tu peux réinitialiser tes données Excel avec les retours à la ligne standard

Sub Test_V02()
Dim Cell As Range

For Each Cell In Selection
Cell = Application.WorksheetFunction.Substitute(Cell, Chr(13) + Chr(10), Chr(10))
Next Cell
End Sub



sinon l'exemple ci dessous permet de créer directement une nouvelle table dans une base Access et d'y transférer les données de la plage A2:C20000
le premier champ nommé 'Code' contient des retours à la lignes qui vont etre automatiquement remis en forme


Option Explicit
Option Compare Text
'Ajouter une table d'une base de données Access
'***********************************************
Sub CreationTable()
'
'necessite d'activer la reference Microsoft ActiveX Data Objects 2.0 Library
'necessite d'activer la reference Microsoft ADO Ext. 2.5 for DDL and Security
'
Dim Cat As New ADOX.Catalog
Dim Tbl As New ADOX.Table
Dim Conn As New ADODB.Connection
Dim rsT As New ADODB.Recordset
Dim Plage As Range, Cell As Range
Dim maNouvelleTable As String
Dim i As Byte


maNouvelleTable = InputBox('Nommer la nouvelle table (sans espaces )')
If maNouvelleTable = '' Then Exit Sub

With Conn 'se connecter à la base Access
.Provider = 'Microsoft.JET.OLEDB.4.0'
.Open 'C:\\\\\\\\MaBase_V01.mdb'
End With

Cat.ActiveConnection = Conn

'creation d'une nouvelle table*****************
With Tbl
.Name = maNouvelleTable
With .Columns 'definition des noms de champs et des types de donnees
.Append 'Code'
.Append 'Date', adDate
.Append 'Valeurs', adInteger
End With
End With
Cat.Tables.Append Tbl
'**********************************************

With rsT
.ActiveConnection = Conn
.Open maNouvelleTable, LockType:=adLockOptimistic
End With

'transfert des données Excel vers Access
Set Plage = Feuil1.Range('A2:C20000')
For Each Cell In Plage
With rsT
.AddNew
.Fields('Code').Value = _
Application.WorksheetFunction.Substitute(Cell, Chr(10), Chr(13) + Chr(10))
.Fields('Date').Value = Cell.Offset(0, 1)
.Fields('Valeurs').Value = Cell.Offset(0, 2)
.Update
End With
Next Cell

rsT.Close
Set Tbl = Nothing
Set Cat = Nothing
Conn.Close
End Sub




bonne journée
MichelXld
 

LB59

XLDnaute Junior
Re : Retour chariot et communication Excel - Access

Bonjour à tous, ce post m'interesse particulierement car je dois supprimer des retours chariots dans un fichier excel justement, mais par contre je dois les remplacer par un espace, tout simplement...que me conseillez vous de faire ?
Merci
 

LB59

XLDnaute Junior
Re : Retour chariot et communication Excel - Access

Merci Michel, ça fonctionne, par contre ce n'est que partiel, en effet, j'ai régulièrement 2 retours chariots à la suite, et cette macro ne m'en retire qu'un seul...j'ai essayé de l'esécuter 2 fois, mais ça ne change rien.
J'essaye de mettre un fichier exemple pour me faire comprendre, car je ne suis pas forcément trés clair...
 

Pièces jointes

  • 1_retour_chariot.zip
    6.7 KB · Affichages: 103
  • 2_retour_chariot.zip
    1.9 KB · Affichages: 79

Discussions similaires

Réponses
2
Affichages
281

Statistiques des forums

Discussions
312 206
Messages
2 086 214
Membres
103 158
dernier inscrit
laufin