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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
' ici 40x la même instrction de copier/coller de colonnes
With Sheets("MajSmartG")
    .Range("U1", .Range("U65536").End(xlUp).MergeArea).Copy Destination:=Sheets("MajSGStock").Range("BC1")
End With
 
'puis je vide le presse papier
Application.CutCopyMode = False
LastLign = Sheets("MajSGStock").Range("A65536").End(xlUp).Row
 
 
For i = 2 To LastLign
 
Contacteur1 = Sheets("MajSGStock").Range("H" & i)
Contacteur1 = Right(Contacteur1, 2)
 
 If Contacteur1 = "01" Then
    Sheets("MajSGStock").Range("K" & i & ":AA" & i).ClearContents
 
 ElseIf Contacteur1 = "02" Then
    Sheets("MajSGStock").Range("H" & i & ":J" & i).ClearContents
    Sheets("MajSGStock").Range("N" & i & ":AB" & i).ClearContents
    Sheets("MajSGStock").Range("AC" & i & ":AF" & i).Copy Destination:=Sheets("MajSGStock").Range("AG" & i & ":AJ" & i)
    Sheets("MajSGStock").Range("AC" & i & ":AF" & i).ClearContents
 
 ElseIf Contacteur1 = "03" Then
    Sheets("MajSGStock").Range("H" & i & ":M" & i).ClearContents
    Sheets("MajSGStock").Range("Q" & i & ":AB" & i).ClearContents
    Sheets("MajSGStock").Range("AC" & i & ":AF" & i).Copy Destination:=Sheets("MajSGStock").Range("AK" & i & ":AN" & i)
    Sheets("MajSGStock").Range("AC" & i & ":AF" & i).ClearContents
 
 ElseIf Contacteur1 = "04" Then
    Sheets("MajSGStock").Range("H" & i & ":P" & i).ClearContents
    Sheets("MajSGStock").Range("T" & i & ":AB" & i).ClearContents
    Sheets("MajSGStock").Range("AC" & i & ":AF" & i).Copy Destination:=Sheets("MajSGStock").Range("AO" & i & ":AR" & i)
    Sheets("MajSGStock").Range("AC" & i & ":AF" & i).ClearContents
 
 ElseIf Contacteur1 = "05" Then
    Sheets("MajSGStock").Range("H" & i & ":S" & i).ClearContents
    Sheets("MajSGStock").Range("W" & i & ":AB" & i).ClearContents
 ElseIf Contacteur1 = "06" Then
    Sheets("MajSGStock").Range("H" & i & ":V" & i).ClearContents
    Sheets("MajSGStock").Range("Z" & i & ":AB" & i).ClearContents
 Else
    'MsgBox i
 End If
 
Sheets("SMARTGEO_B").Range("A1:BC1").Copy Destination:=Sheets("MajSGStock").Range("A1:BC1")
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 !