Votre problème est que, parce que les références de Cell
à l'intérieur des plages de la Range
ne sont pas qualifiées, elles font référence à une feuille par défaut, qui peut ne pas être la feuille que vous avez l'intention de viser. Pour les modules standard, le module ThisWorkbook
, les classes personnalisées et les modules de formulaire utilisateur, la feuille par défaut est la feuille active (ActiveSheet
). Pour les modules de code derrière les Worksheet
, c'est cette feuille.
Pour les modules autres que les modules de code derrière les feuilles de calcul, votre code signifie en fait
Sheets("Temp").Range(ActiveSheet.Cells(1), ActiveSheet.Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial
Pour les modules de code derrière les feuilles de calcul, votre code signifie en fait
Sheets("Temp").Range(Me.Cells(1), Me.Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial
Dans les deux cas, la solution est la même : qualifier entièrement 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
Remarque: Lors de l'utilisation de .End(xlDown)
, il y a un risque que cela entraîne une plage s'étendant plus loin que prévu. Il est préférable d'utiliser .End(xlUp)
si la disposition de votre feuille le permet. Sinon, vérifiez d'abord la cellule référencée et la cellule en dessous pour vérifier si elles sont Empty
.
0 votes
J'ai trouvé une solution qui fonctionne : Sheets("Temp").Range("A1:A1000").Copy , mais je ne l'aime pas. Je ne veux pas d'un script avec des limitations.