Excel VBA définissant un .Range avec .Cells

Je suis en train de tenter de sélectionner / copyr certaines gammes dans ma feuille de calcul. Je l'ai réduit autant que possible.

Cela fonctionne bien:

dataSheet.Cells(dRow, dataSheet.Range("IO_MODULES").Column).Select 

Cela ne fonctionne pas:

 dataSheet.Range(Cells(dRow, dataSheet.Range("IO_MODULES").Column), Cells(dRow, dataSheet.Range("IO_MODULES").Column)).Select 

C'est ce que j'essaie de faire:

 dataSheet.Range(Cells(dRow, dataSheet.Range("IO_MODULES").Column), Cells(dRow, dataSheet.Range("MODULE_END").Column)).Copy Destination:= _ dataSheet.Range(Cells(dataSheet.Range("MODULE_1").Row + i - 1, dataSheet.Range("D_COUNT").Column + 1), Cells(dataSheet.Range("MODULE_1").Row + i - 1, dataSheet.Range("DATA_COL_END").Column)) 

Je semble mal comprendre la relation entre Worksheet.Cells et Worksheet.Range. Ce que je dois faire, c'est pouvoir sélectionner une gamme de cellules en fonction des nombres de lignes et de colonnes des cellules que j'ai nommées.

NON TEST pour essayer de copyr d'une Range à l'autre:

 '... Dim Source As Range, Dest As Range With dataSheet Set Source = .Range(.Cells(dRow, .Range("IO_MODULES").Column), _ .Cells(dRow, .Range("MODULE_END").Column)) Set Dest = .Range(.Cells(.Range("MODULE_1").Row + i - 1, .Range("D_COUNT").Column + 1), _ .Cells(.Range("MODULE_1").Row + i - 1, .Range("DATA_COL_END").Column)) Source.Copy Dest End With 
  1. Le With...End With est en place pour vous permettre de fonctionner plusieurs fois sur un seul object (dans ce cas, dataSheet ) sans l'appeler explicitement à chaque fois. Chaque ligne de code que vous écrivez est une ligne qui doit être maintenue et potentiellement débogée , de sorte que lorsque vous pouvez être plus concis sans perdre la lisibilité, vous devriez le faire. (Plus d'informations sur With...End With déclarations ici: http://msdn.microsoft.com/en-us/library/office/gg264723(v=office.15).aspx )
  2. En nommant les Ranges vous pouvez utiliser la méthode Super-friendly Range.Copy , décrite ici: http://msdn.microsoft.com/en-us/library/office/ff837760(v=office.15).aspx . Cela vous permet de contourner un .Activate ou .Activate , ce qui, selon mon expérience, constitue une source majeure d'erreurs d'exécution.