Votre problème est que le parce que le Cell
à l'intérieur du Range
ne sont pas qualifiées, elles font référence à une feuille par défaut, qui peut ne pas être celle que vous souhaitez. Pour les modules standard, les ThisWorkbook
les classes personnalisées et les modules de formulaire utilisateur, le défaut est le module ActiveSheet
. Pour Worksheet
le code derrière les modules, c'est cette feuille de travail.
Pour les modules autres que le code de la feuille de calcul derrière les modules, votre code dit en fait
Sheets("Temp").Range(ActiveSheet.Cells(1), ActiveSheet.Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial
Pour le code de la feuille de calcul derrière les modules, votre code dit en fait
Sheets("Temp").Range(Me.Cells(1), Me.Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial
Dans un cas comme dans l'autre, la solution est la même : qualifier complètement les références de plage avec le classeur requis :
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = ActiveWorkbook.Sheets("Temp")
Set sh2 = ActiveWorkbook.Sheets("Overview")
With sh1
.Range(.Cells(1,1), .Cells(1,1).End(xlDown)).Copy
End With
sh2.Range("C40").PasteSpecial
Note : Lorsque vous utilisez .End(xlDown)
il y a un risque de voir la portée s'étendre plus loin que prévu. Il est préférable d'utiliser .End(xlUp)
si la mise en page de votre feuille le permet. Si ce n'est pas le cas, vérifiez que la cellule référencée et la cellule située en dessous ne contiennent pas d'erreurs. Empty
d'abord.