Bonsoir le forum,
Je reviens vers vous pour une simplification de code VBA et si possible une accélaration.
Dans la macro, j'ai plusieurs passages de ce type:
Range("B36").Select
Application.Calculation = xlAutomatic
'repérage dernière ligne agents
derliZ = Range("Q65536").End(xlUp).Row
'repérage dernière ligne Analyse
derliw = Range("a65536").End(xlUp).Row
Range("A36").Select
Cells(36, 2).FormulaLocal = "=RECHERCHEV(Q36;Agent!$A$2:$d$65536;4;0)"
Range("b36:b" & derliZ).Select
Application.CutCopyMode = False
Selection.FillDown
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Cells(36, 3).FormulaLocal = "=SI(B36<>0;SOMMEPROD((ALE=$B$6)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1)+SOMMEPROD((ALE=$B$7)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1)+SOMMEPROD((ALE=$B$8)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1)+SOMMEPROD((ALE=$B$9)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1)+SOMMEPROD((ALE=$B$10)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1)+SOMMEPROD((ALE=$B$11)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1)+SOMMEPROD((ALE=$B$12)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1)+SOMMEPROD((ALE=$B$13)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1);"""")"
Range("c36:c" & derliZ).Select
Application.CutCopyMode = False
Selection.FillDown
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Cells(36, 1).FormulaLocal = "=RECHERCHEV(B36;Agent!$n$2:$o$1000;2;0)"
Range("a36:a" & derliZ).Select
Application.CutCopyMode = False
Selection.FillDown
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Comment faire pour traiter en FOR ... NEXT ou autre solution qui m'éviterait de positionner le calcul en automatique, ce qui ralentit considérablement le temps de traitement.
Je vous remercie de votre aide.
Bernard
Je reviens vers vous pour une simplification de code VBA et si possible une accélaration.
Dans la macro, j'ai plusieurs passages de ce type:
Range("B36").Select
Application.Calculation = xlAutomatic
'repérage dernière ligne agents
derliZ = Range("Q65536").End(xlUp).Row
'repérage dernière ligne Analyse
derliw = Range("a65536").End(xlUp).Row
Range("A36").Select
Cells(36, 2).FormulaLocal = "=RECHERCHEV(Q36;Agent!$A$2:$d$65536;4;0)"
Range("b36:b" & derliZ).Select
Application.CutCopyMode = False
Selection.FillDown
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Cells(36, 3).FormulaLocal = "=SI(B36<>0;SOMMEPROD((ALE=$B$6)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1)+SOMMEPROD((ALE=$B$7)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1)+SOMMEPROD((ALE=$B$8)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1)+SOMMEPROD((ALE=$B$9)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1)+SOMMEPROD((ALE=$B$10)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1)+SOMMEPROD((ALE=$B$11)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1)+SOMMEPROD((ALE=$B$12)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1)+SOMMEPROD((ALE=$B$13)*(Refs='Analyse'!B36)*(PARC<>""ENT"")*1);"""")"
Range("c36:c" & derliZ).Select
Application.CutCopyMode = False
Selection.FillDown
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Cells(36, 1).FormulaLocal = "=RECHERCHEV(B36;Agent!$n$2:$o$1000;2;0)"
Range("a36:a" & derliZ).Select
Application.CutCopyMode = False
Selection.FillDown
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Comment faire pour traiter en FOR ... NEXT ou autre solution qui m'éviterait de positionner le calcul en automatique, ce qui ralentit considérablement le temps de traitement.
Je vous remercie de votre aide.
Bernard