Excel VBA – Avoir une boucle de script VBA à travers des lignes

J'ai un script VBA qui copy datatables d'une feuille à l'autre. Les données copiées sont placées dans une formule et le montant calculé est copié sur la feuille d'origine. J'essaie de l'get de sorte que le script VBA le fasse pour chaque ligne. J'ai 1000 lignes de données.

Sub Rating() Dim ws1 As Worksheet, ws2 As Worksheet Set ws1 = Worksheets("SoapUI - Single") Set ws2 = Worksheets("STpremcalc") ws2.Range("B3").Value = ws1.Range("B3").Value ws2.Range("B4").Value = ws1.Range("C3").Value ws2.Range("B5").Value = ws1.Range("D3").Value ws2.Range("B6").Value = ws1.Range("E3").Value ws2.Range("E3").Value = ws1.Range("F3").Value ws2.Range("E4").Value = ws1.Range("G3").Value ws2.Range("E5").Value = ws1.Range("H3").Value ws2.Range("E6").Value = ws1.Range("I3").Value ws2.Range("G3").Value = ws1.Range("J3").Value ws2.Range("G4").Value = ws1.Range("K3").Value ws2.Range("G5").Value = ws1.Range("L3").Value ws2.Range("J3").Value = ws1.Range("N3").Value ws2.Range("J4").Value = ws1.Range("O3").Value ws2.Range("J6").Value = ws1.Range("P3").Value ws2.Range("B9").Value = ws1.Range("Q3").Value ws2.Range("C9").Value = ws1.Range("R3").Value ws2.Range("D9").Value = ws1.Range("S3").Value ws2.Range("E9").Value = ws1.Range("T3").Value ws2.Range("B10").Value = ws1.Range("U3").Value ws2.Range("C10").Value = ws1.Range("V3").Value ws2.Range("D10").Value = ws1.Range("W3").Value ws2.Range("E10").Value = ws1.Range("X3").Value ws2.Range("B11").Value = ws1.Range("Y3").Value ws2.Range("C11").Value = ws1.Range("Z3").Value ws2.Range("D11").Value = ws1.Range("AA3").Value ws2.Range("E11").Value = ws1.Range("AB3").Value ws1.Range("AW3").Value = ws2.Range("M4").Value ws1.Range("AX3").Value = ws2.Range("M5").Value ws1.Range("AY3").Value = ws2.Range("M6").Value End Sub 

Je comprends également que cela peut être un moyen très inefficace d'effectuer cette tâche, mais je ne sais pas comment l'améliorer. Donc, si vous avez un moyen de rendre cela plus efficace, il serait grandement apprécié.

Modifier: Mettre à jour le code selon les consignes @ user3598756

Je ne suis pas fan de la procédure copy / paste, mais si vous devez l'utiliser, puis les instructions suivantes

 Sheets("SoapUI - Single").Range("B3").Copy Sheets("STpremcalc").Range("B3").PasteSpecial Paste:=xlValues Sheets("SoapUI - Single").Range("C3").Copy Sheets("STpremcalc").Range("B4").PasteSpecial Paste:=xlValues Sheets("SoapUI - Single").Range("D3").Copy Sheets("STpremcalc").Range("B5").PasteSpecial Paste:=xlValues Sheets("SoapUI - Single").Range("E3").Copy Sheets("STpremcalc").Range("B6").PasteSpecial Paste:=xlValues 

peut être simplifié en

 Sheets("SoapUI - Single").Range("B3:E3").Copy Sheets("STpremcalc").Range("B3").PasteSpecial Paste:=xlValues, Transpose:=True 

Autre que ci-dessus, vous pouvez simplifier

  Sheets("SoapUI - Single").Range("Q3").Copy Sheets("STpremcalc").Range("B9").PasteSpecial Paste:=xlValues Sheets("SoapUI - Single").Range("R3").Copy Sheets("STpremcalc").Range("C9").PasteSpecial Paste:=xlValues Sheets("SoapUI - Single").Range("S3").Copy Sheets("STpremcalc").Range("D9").PasteSpecial Paste:=xlValues Sheets("SoapUI - Single").Range("T3").Copy Sheets("STpremcalc").Range("E9").PasteSpecial Paste:=xlValues 

dans

  Sheets("SoapUI - Single").Range("Q3:T3").Copy Sheets("STpremcalc").Range("B9:E9").PasteSpecial Paste:=xlValues 

Je pense que vous pouvez faire le rest par vous-même.


EDIT: puisque le OP modifie sa question. Les éléments suivants peuvent être simplifiés

  ws2.Range("B3").Value = ws1.Range("B3").Value ws2.Range("B4").Value = ws1.Range("C3").Value ws2.Range("B5").Value = ws1.Range("D3").Value ws2.Range("B6").Value = ws1.Range("E3").Value ws2.Range("E3").Value = ws1.Range("F3").Value ws2.Range("E4").Value = ws1.Range("G3").Value ws2.Range("E5").Value = ws1.Range("H3").Value ws2.Range("E6").Value = ws1.Range("I3").Value 

en utilisant la procédure de boucle comme celle-ci

 For i = 1 To 4 ws2.Cells(i + 2, 2) = ws1.Cells(3, i + 1) 'Or you can use `ws1.Cells(3, i + 1).Value2` if you only need the value without its format like date or currency ws2.Cells(i + 2, 5) = ws1.Cells(3, i + 5) Next i 

Le rest est à vous.

peu de choses à faire que ce peu peut être:

  • utiliser des variables pour referencer les feuilles de travail et améliorer la lisibilité et l'efficacité du code

     Dim ws1 As Worksheet, ws2 As Worksheet Set ws1 = Worksheets("SoapUI - Single") Set ws2 = Worksheets("STpremcalc") 
  • utilisez Range1.Value = Range2.Value pattern pour copyr / coller des valeurs entre les gammes '

     ws2.Range("B3").Value = ws1.Range("B3").Value ws2.Range("B4").Value = ws1.Range("C4").Value ...