Bonjour tout le monde,
Après quelques années sans trop utilisé le VBA, me voici sur un nouveau projet et je bloque sur l'optimisation d'une boucle.
Au début de ma macro (que je vous épargne), je fais des copier/coller de colonnes ( environ 40 colonnes de quasimenet 4000 lignes)
jusque la tout va bien, ensuite je lance une simple boucle for (voir ci dessous) et la c'est horrible, il arrive que l'application plante .... alors si vous avez une idée ou une autre facon de faire je suis preneur, merci par avance !!
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
Dim ShStk As Worksheet
Set ShStk = ThisWorkbook.Sheets("MajSGStock")
With ShStk
' ici 40x la même instrction de copier/coller de colonnes
With Sheets("MajSmartG")
.Range("U1", .Range("U65536").End(xlUp).MergeArea).Copy Destination:=.Range("BC1")
End With
'puis je vide le presse papier
Application.CutCopyMode = False
LastLign = .Range("A65536").End(xlUp).Row
For i = 2 To LastLign
Contacteur1 = .Range("H" & i)
Contacteur1 = Right(Contacteur1, 2)
Select Case Contacteur1
Case "01"
.Range("K" & i & ":AA" & i).ClearContents
Case "02"
Union(.Range("H" & i & ":J" & i), .Range("N" & i & ":AB" & i)).ClearContents
.Range("AG" & i & ":AJ" & i).Value = .Range("AC" & i & ":AF" & i).Value
.Range("AC" & i & ":AF" & i).ClearContents
Case "03"
Union(.Range("H" & i & ":M" & i), .Range("Q" & i & ":AB" & i)).ClearContents
.Range("AK" & i & ":AN" & i).Value = .Range("AC" & i & ":AF" & i).Value
.Range("AC" & i & ":AF" & i).ClearContents
Case "04"
Union(.Range("H" & i & ":P" & i), .Range("T" & i & ":AB" & i)).ClearContents
.Range("AO" & i & ":AR" & i).Value = .Range("AC" & i & ":AF" & i).Value
.Range("AC" & i & ":AF" & i).ClearContents
Case "05"
Union(.Range("H" & i & ":S" & i), .Range("W" & i & ":AB" & i)).ClearContents
Case "06"
Union(.Range("H" & i & ":V" & i), .Range("Z" & i & ":AB" & i)).ClearContents
Case Else
'MsgBox i
End Select
.Range("A1:BC1").Value = Sheets("SMARTGEO_B").Range("A1:BC1").Value
End With
Application.CutCopyMode = False
Next i |
Alors je ne sais pas si la ligne "Application.CutCopyMode = False" est vraiment utile, je ne vois pas différence avec ou sans.
EnjOy ! ;)