Importation de fichier CSV, la première colonne vide n'est pas importée
Bonjour à tous,
Après 30 minutes de recherche, je n'arrive pas à trouver la réponse à mon problème... peut-être sauriez-vous m'aider?
La macro suivante me permet d'ouvrir un ou plusieurs fichier CSV et de l'ajouter à la dernière ligne d'une feuille de travail :
Private Sub ImportCSV()
Set monWB = ActiveWorkbook
Set maWS = Worksheets("Ma feuille de travail")
csv = Application.GetOpenFilename(, , , , True)
maWS.Activate
For i = 1 To UBound(csv)
Workbooks.OpenText Filename:=csv(i), Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, Local:=True, Semicolon:=True
Set csvWB = ActiveWorkbook
For Each f In csvWB.Worksheets
csvWB.Sheets(1).UsedRange.Copy maWS.Cells(maWS.Range("A" & Rows.Count).End(xlUp).Row + 1, 1)
Next f
Application.CutCopyMode = False
csvWB.Close False
Next i
End SubLorsque j'essaie d'importer le fichier csv suivant, la première colonne vide (avant le délimiteur, le fichier csv commence par le délimiteur) n'est pas prise en compte :
;dzadazd;liouiou;;jhgj54;qsdqsdq;;;;;dsqd12;qsdaa879;Or, vous l'avez compris, j'ai besoin d'ajouter cette colonne vide à mon fichier.
Bien sûr je pourrais bidouiller et rajouter un espace au début de mon fichier, ou encore rajouter une colonne après l'import de mon CSV (avant de le recopier) mais j'aimerais avoir la solution la plus propre et évolutive (si j'ai un fichier CSV qui ne commence par ce délimiteur par exemple).
J'espère avoir été clair, si besoin je rajouterai un fichier d'exemple.
Merci d'avance pour votre aide
Bonjour
Dans VBA, la propriété UsedRange représente la plage dans une feuille de calcul qui contient des données. La plage utilisée commence à partir de la première cellule de la feuille de calcul où vous avez une valeur jusqu'à la dernière cellule où vous avez une valeur.
Si la première colonne est vide elle n'est pas prise en compte.
Merci pour ta réponse yal_excel. Néanmoins je ne vois pas comment cette propriété peut être appliquée à l’instruction OpenText.
J’ai l’impression que ça ne répond pas à mon problème
Bonjour,
Personne n’aurait la réponse à ce problème ?
Merci par avance
"csvWB.Sheets(1).UsedRange.Copy maWS.Cells(maWS.Range("A" & Rows.Count).End(xlUp).Row + 1, 1)"
Cette ligne copie "UsedRange" donc mon post précédent répond bien à la question. tu peux d'ailleurs ajouter :
csvWB.Sheets(1).UsedRange.Select
juste avant la ligne citée plus haut pour t'en convaincre.
Voici un code qui me semble répondre à ton besoin. J'ai juste défini autrement la plage à copier.
Private Sub ImportCSV()
Dim monWB As Workbook, csvWB As Workbook, maWS As Worksheet, f As Worksheet
Dim dl%, dc%, i%
Dim csv As Variant
Set monWB = ActiveWorkbook
Set maWS = Worksheets("Ma feuille de travail")
csv = Application.GetOpenFilename(, , , , True)
maWS.Activate
For i = 1 To UBound(csv)
Workbooks.OpenText Filename:=csv(i), Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, Local:=True, Semicolon:=True
Set csvWB = ActiveWorkbook
For Each f In csvWB.Worksheets
' csvWB.Sheets(1).UsedRange.Copy maWS.Cells(maWS.Range("A" & Rows.Count).End(xlUp).Row + 1, 1)
dl = Range("B" & Rows.Count).End(xlUp).Row
dc = Cells(1, Columns.Count).End(xlToLeft).Column
csvWB.Sheets(1).Range(Cells(1, 1), Cells(dl, dc)).Copy maWS.Cells(maWS.Range("A" & Rows.Count).End(xlUp).Row + 1, 1)
Next f
Application.CutCopyMode = False
csvWB.Close False
Next i
End Sub