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 Sub

Olivier

Bonjour,

Essaie :

With Sheets("A")
  .Range("A7", .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 4).Copy _
    ThisWorkbook.Sheets(1).Cells(nbf, 1)
End With

au 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 With

Je 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 Sub

Encore merci et bonne journée à toi.

Rechercher des sujets similaires à "importation donnees connaitre derniere ligne"