En essayant d'éviter d'utiliser Sheet.Activate lors de la copy de données

Exécuter sur Excel 2013 et je suis perplexe. J'essaie d'éviter d'avoir à activer la feuille de calcul (sans parler de plusieurs lignes de code) simplement pour copyr datatables. Pourquoi cela fonctionnerait-il?

Sheets("DataDump").Activate Range(Cells(startJobRow, 1), Cells(lastJobRow, 5)).Copy Sheets("DataRaw").Cells(lastDataRawRow + 1, 1) 

Mais ce n'est pas le cas:

 Sheets("DataDump").Range(Cells(startJobRow, 1), Cells(lastJobRow, 5)).Copy Sheets("DataRaw").Cells(lastDataRawRow + 1, 1) 

Le deuxième code me donne "Erreur d'exécution" 1004 ': erreur définie par l'application ou définie par l'object ". Si je sélectionne manuellement la feuille de calcul "DataDump" en mode Débogage et dis-le pour continuer, ça marche très bien.

Dans le deuxième exemple, votre utilisation de Cells () n'est pas qualifiée et cela peut causer des problèmes.

Dans ce cas, Cells () fait reference à la feuille de chaque feuille active à l'instant où la ligne de code est évaluée.

Vous devez absolument qualifier Cells () dans ce cas.

Cela devrait le faire:

 With Sheets("DataDump") .Range(.Cells(startJobRow, 1), .Cells(lastJobRow, 5)).Copy Sheets("DataRaw").Cells(lastDataRawRow + 1, 1) End With