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 ...