Bonjour Le Suisse, Sousou
Je ne pense pas que l'erreur provienne de la plage de destination, on peut avoir besoin de copier des ligne entière et il n'est nécessaire dans ce cas de préciser une ligne de destination, on peut ne préciser que la celllule de destination.
Non à mon avis les problèmes de notre ami Suisse (qui ne l'est pas en fait ! ) viennent de plusieurs choses...
Premièrement tu ne dois pas oublier l'extention ".xls" quand tu fais référence à un WorkBook.
Secondement quand tu écrit ceci :
For Each cell In Workbooks("Previous Statement").Sheets("Data").Range("K2:K65536")
Tu dimensionne la plage sur 65535 cellules qui vont être scanées peut être pour rien, alors qu'il vaut mieux donner les dimension réélles.
Troisièmement quand tu écrit ceci :
cell.EntireRow.Copy Workbooks("Working File").Sheets("Test").Range("A" & Sheets("Test").Range("A65536").End(xlUp).Row + 1)
Si par malheur tu as un autre workbook actif que "Working File" et qu'il contient une sheet "Test", alors ton dimensionement de la dernière cellule (Sheets("Test").Range("A65536")) sera pris sur ce classeur et non le bon ...
Voici deux versions de ton code corrigés, la première sans instance aux Objets et moins lisible et probablement plus longue d'exécution...
Option Explicit
Sub TheMethodeNumberOne()
Dim Cell As Range
For Each Cell In Workbooks("Previous Statement.xls").Sheets("Data").Range("K2:K" & Workbooks("Previous Statement.xls").Sheets("Data").Range("K65536").End(xlUp).Row)
If Not IsEmpty(Cell) Then
If Cell.Value <> "M" Then
Cell.EntireRow.Copy Workbooks("Working File.xls").Sheets("Test").Range("A" & Workbooks("Working File.xls").Sheets("Test").Range("A65536").End(xlUp).Row + 1)
End If
End If
Next Cell
End Sub
Sub TheMethodeNumberTwo()
Dim WBSource As Workbook, WBCible As Workbook
Dim WSSource As Worksheet, WSCible As Worksheet
Dim Cell As Range
Set WBSource = Workbooks("Previous Statement.xls")
With WBSource
Set WSSource = .Worksheets("Data")
End With
Set WBCible = Workbooks("Working File.xls")
With WBCible
Set WSCible = .Worksheets("Test")
End With
With WSSource
For Each Cell In .Range("K2:K" & .Range("K65536").End(xlUp).Row)
If Not IsEmpty(Cell) Then
If Cell.Value <> "M" Then
Cell.EntireRow.Copy WSCible.Range("A" & WSCible.Range("A65536").End(xlUp).Row + 1)
End If
End If
Next Cell
End With
End Sub
Bonne Journée
@+Thierry