[VBA] Import données .csv (xlsx?)
Bonjour,
j'ai un document .csv que j'aimerais importer dans un nouveau document Excel, à la différence des .csv que j'utilisais jusqu'à présent, celui-ci n'est pas délimité (ou alors il l'est avec les ";" mais sans certitude).
J'ai une macro qui me permet de l'importer dans mon document, la voici :
Public Sub import_data()
Dim lr%, dbl2%, cib%, cib1%, cib2%, cib3%, cib4%, cib5%, cib6%, cib7%, cib8%, lbp%, compteur%
Dim dbl As Range
Application.ScreenUpdating = False
Dim mypath As String
Dim myfile As String
On Error GoTo Erreur
Application.FileDialog(msoFileDialogFilePicker).Show
myfile = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & myfile, _
Destination:=Range("$A$1"))
.TextFileColumnDataTypes = _
Array(xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, _
xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, _
xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat)
.TextFileCommaDelimiter = True
.TextFilePlatform = 65001
.TextFileDecimalSeparator = ";"
.Refresh
End With
Application.ScreenUpdating = True
Erreur:
MsgBox "Une erreur est survenue lors de l'import des données ; vérifiez que le document source est fonctionnel"
Application.ScreenUpdating = True
Exit Sub
End Sub
Malheureusement, l'import se fait mal et toutes les données inscrites dans la première colonne.
Comment vous-y prendriez-vous ?
Je joins à ce post le document à importer ("HABREF_50") Téléchargeable sur le site de l'INPN MNHM (
Et mon document de travail qui illustre le résultat que j'obtiens..
L'objectif c'est d'avoir les données du document "HABREF_50" dans l'onglet "HABREF_50" de mon document.
Je précise, un copier-coller fonctionne très bien, mais j'aimerais passer par un import, pour m'assurer que la feuille est bien vierge avant l'import (surtout si je ne suis pas seul à l'utiliser).
Je profite de ce post pour savoir comment vous y prendriez s'il s'agissait d'un document xlsx ? J'ai déjà eu le problème et ne m'y suis plus penché, mais je sais que je vais prochainement avoir le même soucis avec ce format de document.
Merci de votre attention !
Bonne journée
Bonsoir Le Drosophile le forum
là plus le temps mais je regarderai demain
a+
Papou
Bonsoir,
D'accord! Merci
Bonsoir Le Drosophile
Pour ta procédure import essaie cela :
Public Sub import_data()
Dim NomFic As String, Pos As Integer
nf = Application.GetOpenFilename("Fichiers Csv,*.csv")
If Not nf = False Then
Workbooks.Open Filename:=nf, local:=True
Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
' Récupérer la position du dernier anti-slash
Pos = InStrRev(nf, "\")
' Récupérer le nom du fichier
NomFic = Mid(nf, Pos + 1, Len(nf) - Pos)
' Fermer le fichier CSV
Workbooks(NomFic).Close SaveChanges:=False
End If
End Sub
Bonne fin de journée
Bonjour Le Drosophile le forum
bon je ne sais pas si j'ai compris ce que tu veux, mais tu as les deux possibilités.
ou tu copies les données dans la feuille HAREF_50 ou tu copies la feuille et dans ce cas là tu as une feuille en plus
bref tu regarderas dans la macro il y a ces deux lignes
'wbks.ActiveSheet.Copy wbkc.Sheets(fe) ' je ne savais pas ce que tu voulais alors tu as les deux possibilités
wbks.ActiveSheet.Cells.Copy wbkc.Sheets(fe).Cells
si tu veux copier dans la feuille actuelle HAREF_50 tu laisses comme c'est là, autrement si tu veux une feuille en plus tu retires l'apostrophe devant 'wbks.ActiveSheet.Copy wbkc.Sheets(fe) et tu en mets un devant 'wbks.ActiveSheet.Cells.Copy wbkc.Sheets(fe).Cells
1) tu décompresses le zip sur ton bureau, tu ne l'ouvres surtout pas en temporaire.
2)tu ouvres ensuite le dossier
3) tu ouvres le fichier Import "habref_travail V1.xlsm" et tu importes ton fichier
voilà à toi de tester et tu me redis
a+
Papou
Bonjour,
Merci beaucoup pour votre aide !
Si j'ai bien compris, la macro proposée par Patty5046 génère une nouvelle feuille. Mais il est adaptable.
Celle proposée par paritec réalise exactement ce que je cherchait à faire, pour mes 3 sources de données.
C'est tout ce qu'il restait de ce côté là de mon projet, merci !
Bonne journée !