Positionner des données sur la prochaine colonne vide
Bonjour,
Nous devons importer le contenu de plusieurs CSV dans un fichier Excel.
Nous avons trouvé une macro qui fait ça assez bien, mais le problème est que le contenu de chaque CSV est mis l'un en-dessous de l'autre.
Nous aimerions en fait que dès qu'il prend un autre CSV, le contenu soit mis sur la colonne libre suivante.
Voici le code actuel de la macro :
Sub ImportCSVsWithReference()
'UpdatebyKutoolsforExcel20151214
Dim xSht As Worksheet
Dim xWb As Workbook
Dim xStrPath As String
Dim xFileDialog As FileDialog
Dim xFile As String
On Error GoTo ErrHandler
Set xFileDialog = Application.FileDialog(msoFileDialogFolderPicker)
xFileDialog.AllowMultiSelect = False
xFileDialog.Title = "Select a folder [Kutools for Excel]"
If xFileDialog.Show = -1 Then
xStrPath = xFileDialog.SelectedItems(1)
End If
If xStrPath = "" Then Exit Sub
Set xSht = ThisWorkbook.ActiveSheet
If MsgBox("Clear the existing sheet before importing?", vbYesNo, "Kutools for Excel") = vbYes Then xSht.UsedRange.Clear
Application.ScreenUpdating = False
xFile = Dir(xStrPath & "\" & "*.csv")
Do While xFile <> ""
Set xWb = Workbooks.Open(xStrPath & "\" & xFile)
Columns(1).Insert xlShiftToRight
Columns(1).SpecialCells(xlBlanks).Value = ActiveSheet.Name
ActiveSheet.UsedRange.Copy xSht.Range("A" & Rows.Count).End(xlUp).Offset(1)
xWb.Close False
xFile = Dir
Loop
Application.ScreenUpdating = True
Exit Sub
ErrHandler:
MsgBox "no files csv", , "Kutools for Excel"
End Sub
Je joins un dossier avec des csv que nous devons importer.
Je vous remercie mille fois pour votre aide.
Bonne journée.
dadub
Essaye avec ça
Dim CL% 'déclare la variable CL pour identifier la dernière colonne
range("a:a").copy
With Sheets("Feuille1") 'on fait la boule
CL = Columns(256).End(xlToLeft).Column + 1 'on recherche la dernière colonne active, puis on ajoute une colonne
.Paste .Cells(CL) 'on colle la colonne
End With
Ppplll a écrit :Essaye avec ça
Dim CL% 'déclare la variable CL pour identifier la dernière colonne
range("a:a").copy
With Sheets("Feuille1") 'on fait la boule
CL = Columns(256).End(xlToLeft).Column + 1 'on recherche la dernière colonne active, puis on ajoute une colonne
.Paste .Cells(CL) 'on colle la colonne
End With
Salut,
Un grand merci pour ta réponse.
Je le mets où ton code ? au début ou la fin de ma boucle ?
Encore merci.
David
C'est difficile à dire sans fichier, mais c'est cette ligne qui fait que ton code colle à la ligne en dessous:
"ActiveSheet.UsedRange.Copy xSht.Range("A" & Rows.Count).End(xlUp).Offset(1)"
En fait ça va jusqu’à la fin de ta colonne A, ça décale d'une cellule en dessous (la première vide du coup), et ça colle.
Avec le code que je t'ai mis, ça va chercher la dernière colonne non vide et ça décale d'une colonne sur la droite, donc la première vide.
En gros supprime la ligne qui ne va pas dans ton code (celle que je t'ai indiqué), met mon code, et personnalise le avec tes besoins.
Essaye et dis moi si ça fonctionne