Importation de données sans connaitre la dernière ligne
Bonjour,
J'ai actuellement adapté un code qui me permet d'importer plusieurs fois à la suite les données de fichiers à l'architecture identique.
Plage de données de 3 lignes
Range("A7:D9")Dans l'onglet "A".
En prenant en compte que j'ai 3 lignes à chaque copies et me renvoyant un message m'indiquant le nombre de fichiers traités.
ActiveWorkbook.Close
NbF = NbF + 3
Next f
MsgBox (NbF - 2) / 3 & " fichiers traités"Je vais avoir à traiter des fichiers avec des nombres de lignes variables (
Range("A7:D ??")) et je ne sais pas comment adapter mon code pour qu'il aille chercher la dernière ligne et reprenne la copie du suivant au bon endroit (La boite de dialogue m'indiquant le nombre de fichiers importé est optionnelle la priorité reste la copie).
Je vous remercie par avance je me remet doucement au VBA.
Code complet :
Public Repertoire As FileDialog
Public Chemin, AncienNom, NewFich, NewName As String
Public Cpt, CptKill, NBFich
Public NbFichier As Integer
Sub Bouton2_Cliquer()
Dim Fso As Object
Dim MonRepertoire As String, f As Object, x As Integer
Dim f1 As Object, f2 As Object
Dim chemin_complet As String
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
Repertoire.Show
If Repertoire.SelectedItems.Count > 0 Then
MonRepertoire = Repertoire.SelectedItems(1) ' & "\"
onglet = "A"
NbF = 2
For Each f In Fso.GetFolder(MonRepertoire).Files
chemin_complet = MonRepertoire & "\" & f.Name
Workbooks.Open Filename:=chemin_complet
Sheets("A").Range("A7:D9").Copy ThisWorkbook.Sheets(1).Cells(NbF, 1)
ActiveWorkbook.Close
NbF = NbF + 3
Next f
MsgBox (NbF - 2) / 3 & " fichiers traités"
End If
End SubOlivier
Bonjour,
Essaie :
With Sheets("A")
.Range("A7", .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 4).Copy _
ThisWorkbook.Sheets(1).Cells(nbf, 1)
End Withau lieu de :
Sheets("A").Range("A7:D9").Copy ThisWorkbook.Sheets(1).Cells(NbF, 1)Daniel
Bonjour Daniel,
Merci pour ton aide, cela fonctionne presque.
Le soucis vient du fait que j'ai pris NbF = 2 pour commencer à la seconde ligne et que j'incrémentais NbF = NbF + 3 à chaque boucles pour mes tests avec des fichiers de 3 lignes.
Essaie :
With Sheets("A")
.Range("A7", .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 4).Copy _
ThisWorkbook.Sheets(1).Cells(nbf, 1)
nbf = nbf + .Range("A7", .Cells(.Rows.Count, 1).End(xlUp)).Rows.Count
End WithJe te remercie.
Je vais tester ca dans la journée.
J'ai trouvé une autre solution un peu "bourrin" que je met ci dessous au cas ou quelqu'un soit intéressé.
Sub Bouton2_Cliquer()
Application.ScreenUpdating = False
Dim Fso As Object
Dim MonRepertoire As String, f As Object, x As Integer
Dim f1 As Object, f2 As Object
Dim chemin_complet As String
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
Repertoire.Show
If Repertoire.SelectedItems.Count > 0 Then
MonRepertoire = Repertoire.SelectedItems(1) ' & "\"
onglet = "A"
NbF = 2
Count_Files = 0
For Each f In Fso.GetFolder(MonRepertoire).Files
chemin_complet = MonRepertoire & "\" & f.Name
Workbooks.Open Filename:=chemin_complet
Sheets("A").Range("A7:JQ100").Copy ThisWorkbook.Sheets(1).Cells(NbF, 1)
ActiveWorkbook.Close
NbF = NbF + 100
Count_Files = Count_Files + 1
Next f
MsgBox Count_Files & " fichiers importés"
End If
Application.ScreenUpdating = True
End SubEncore merci et bonne journée à toi.