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 !![]()
Partager