![]() |
|
Forum
|
|
|
#1 (permalink) |
|
Guest
Messages: n/a
|
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. |
|
| ANNONCES | |||
|
|
|
|
#2 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 3 714
|
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 |
|
|
|
|
|
#5 (permalink) |
|
XLDnaute Junior
Date d'inscription: octobre 2005
Localisation: Maubeuge
Version Excel : Excel 2003 (PC)
Messages: 66
|
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 |
|
|
|
|
|
#6 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 3 714
|
bonjour
tu peux essayer de remplacer Code:
Application.WorksheetFunction.Substitute(Cell, Chr(10), Chr(13) + Chr(10)) Code:
Application.WorksheetFunction.Substitute(Cell, Chr(10), " ") bonne journée MichelXld |
|
|
|
|
|
#7 (permalink) |
|
XLDnaute Junior
Date d'inscription: octobre 2005
Localisation: Maubeuge
Version Excel : Excel 2003 (PC)
Messages: 66
|
Merci, j'essaye demain et je vous dis ce que ça donne.
Par contre pour executer cette macro, il faut que j'aille ou ? |
|
|
|
|
|
#8 (permalink) |
|
XLDnaute Junior
Date d'inscription: octobre 2005
Localisation: Maubeuge
Version Excel : Excel 2003 (PC)
Messages: 66
|
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... |
|
|
|
|
|
#9 (permalink) |
|
XLDnaute Junior
Date d'inscription: octobre 2005
Localisation: Maubeuge
Version Excel : Excel 2003 (PC)
Messages: 66
|
Je reviens aux nouvelles, en fait j'avais un retour chariot chr10 et un chr13, j'ai donc modifié (légèrement) la macro de Michel, et ça marche, merci à tous.
|
|
|
|
| ANNONCES | |
![]() |
| Liens sociaux |
| Outils de la discussion | |
|
|