Ce script fonctionne bien lorsque je regarde la feuille "Temp". Mais quand je suis dans une autre feuille, alors la commande de copie échoue
Sheets("Temp").Range(Cells(1), Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial
Je peux utiliser ce script à la place, mais j'ai du mal à le coller.
Sheets("Temp").Columns(1).Copy
Sheets("Overview").Range("C40").PasteSpecial
Que puis-je faire d'autre
Votre problème est que, parce que les références Cell
à l’intérieur des 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, le module ThisWorkbook
, les classes personnalisées et les modules de formulaire utilisateur, la valeur par défaut est la ActiveSheet
. Pour le code Worksheet
derrière les modules, c'est cette feuille de travail.
Pour les modules autres que le code de la feuille de travail derrière les modules, votre code indique en réalité
Sheets("Temp").Range(ActiveSheet.Cells(1), ActiveSheet.Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial
Pour le code de feuille de travail 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 les deux cas, la solution est la même: qualifiez 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
J'ai moi-même rencontré un problème comme celui-ci: j'essayais de rechercher dans une feuille de calcul distincte pour voir si la couleur d'une cellule correspond à la couleur d'une cellule dans une liste et renvoie une valeur de chaîne: si vous utilisez .Cells (row, column ), vous avez seulement besoin de ceci: Feuilles ("nom_feuille"). Cellules (rangée, colonne) pour référencer cette plage de cellules.
Je parcourais un bloc de 500 cellules et cela fonctionne étonnamment vite pour moi.
Je n'ai pas essayé avec .Copy, mais je suppose que cela fonctionnerait de la même manière.
Cela ira, je n'aime pas utiliser (xlDown) dans le cas où une cellule est vide.
Dim lRow As Long
lRow = Sheets("Temp").Cells(Cells.Rows.Count, "A").End(xlUp).Row
With Sheets("Temp")
.Range("A1:A" & lRow).Copy Sheets("Overview").Range("C40")
End With
Ou si vous voulez simplement utiliser des colonnes ...
Sheets("Temp").Columns(1).SpecialCells(xlCellTypeConstants).Copy Destination:=Sheets("Overview").Range("C40")