Bonjour Robert, Banzai,
Au vu du code de robert voici une proposition avec quelques explications pour optimiser le code :
Ceci :
Range("T3").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 2).Select
Derlign = ActiveCell.Address
équivaut à :
Derlign = [T3].End(xlDown).Offset(, 2).Address
Ceci :
Range("U3").Select
Selection.End(xlDown).Select
Premcel = ActiveCell.Address
équivaut à :
Premcel = [U3].End(xlDown).Address
Ce code est inutile :
[barrer]ActiveWindow.SmallScroll Down:=13[/barrer]
Il permet de faire défiler la fenêtre (inutile en général).
Ensuite, tu peux remplacer ceci :
Selection.AutoFill Destination:=ActiveCell.Range(Cells(1, Premcel), Cells(2, Derlign)), Type:=xlFillDefault
par ceci :
Range(Premcel).Resize(, 2).AutoFill Range(Premcel, Derlign), xlFillDefault
De manière générale tu peux éviter les Select, ça ralentit le code. Et dans la mesure du possible, déclare tes variables en mettant le bon type de donnée.
Ton code optimisé :
Sub Prolonge()
Dim Derlign As String, Premcel As String
Derlign = [T3].End(xlDown).Offset(, 2).Address
Premcel = [U3].End(xlDown).Address
On Error Resume Next 'cette instruction te permet ici d'éviter le cas où la plage est déjà remplie
Range(Premcel).Resize(, 2).AutoFill Range(Premcel, Derlign), xlFillDefault
End Sub