Actuellement, je copie depuis une feuille et je la colle sur une autre feuille à un emplacement spécifique. Je veux que les valeurs de la colonne sur la nouvelle feuille aient 28 ajoutées à leur valeur existante. Ces valeurs sont des dates.
C'est ce que j'ai jusqu'à présent. Je ne sais pas où insérer l'addition. Y a-t-il un moyen de faire cela sans boucle? Comme je peux copier la plage exactement, il existe peut-être un moyen plus simple de le faire.
endRowDevelopment = wsOut.Cells(Rows.Count, 1).End(xlUp).Row
Set r1 = ws.Range(.Cells(2, 1), .Cells(endRowSheet1, 1))
r1.Copy Destination:=wsOut.Range("A" & endRowDevelopment + 1)
3 Réponses :
Vous pouvez le faire avec une cellule d'assistance que vous définissez avec une valeur, copiez la cellule, puis utilisez Collage spécial avec l'option Ajouter pour ajouter la valeur copiée à toutes les cellules spécifiées.
Range("E1") = 28
Range("E1").Copy
Range("A1:A10").PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Range("E1").ClearContents
Pour aucune boucle, vous pouvez utiliser la réponse teylin. Mais la boucle ne devrait pas prendre autant de temps à moins que vous ne disposiez d'une quantité extraordinaire de données. Si vous pouvez accepter le bouclage, voici une solution possible intégrant votre question précédente.
Sub test()
Set ws = Application.Worksheets("Sheet1")
endRowSheet1 = ws.Cells(Rows.Count, 1).End(xlUp).Row
Set wsOut = Application.Worksheets("Load File")
With ws
Set r1 = .Range(.Cells(2, 1), .Cells(endRowSheet1, 1))
r1.Copy Destination:=wsOut.Range("A2")
Set r2 = .Range(.Cells(2, 6), .Cells(endRowSheet1, 6))
r2.Copy Destination:=wsOut.Range("E2")
End With
endRowDevelopment = wsOut.Cells(Rows.Count, 1).End(xlUp).Row
r1.Copy Destination:=wsOut.Range("A" & endRowDevelopment + 1)
r2.Copy Destination:=wsOut.Range("E" & endRowDevelopment + 1)
'--- adding 28 to the pasted ranges
With wsOut
Set r3 = .Range(.Cells(endRowDevelopment + 1, "A"), .Cells(endRowDevelopment + endRowSheet1 - 1, "A"))
Set r4 = .Range(.Cells(endRowDevelopment + 1, "E"), .Cells(endRowDevelopment + endRowSheet1 - 1, "E"))
End With
For Each rngCell In r3.Cells
rngCell.Value = rngCell.Value + 28
Next rngCell
For Each rngCell In r4.Cells
rngCell.Value = rngCell.Value + 28
Next rngCell
End Sub
Parfois, ce qui apparaît comme "pas de bouclage" dans le code est en fait une boucle lorsque Excel compile le code. La seule façon de savoir ce qui est le plus efficace est d'écrire différents codes et de les chronométrer. Dans ce cas, la boucle peut être un peu plus propre.