Bonjour à tous,
Je suis un peut embêter car avec plusieurs tests, plusieurs essais et plusieurs heures de travail sur ma macro, je n'arrive pas à diminuer le temps d'exécutions de celle ci.
le problème étant que il y a 3 boucles et que l'une d'entre elle monte jusqu'à 102 ( la variable D).
J'ai déjà fait un premier essai en remplaçant D par 22 pour évité de perdre trop de temps, et grâce au screenUpdating j'ai diviser ce temps par 6.
Je voudrais donc savoir si vous pouviez m'aider à trouver une application (comme screenUpdating) qui me permettra de gagné du temps d'exécution ou tout simplement simplifier les formule ou la macro.
Merci d'avance :)
Sub Macro1()
'
Application.ScreenUpdating = False
Dim start As Single
'Timer pour temps d'exécution
start = Timer
'copier-coller de la colonne marque
Windows("Extrateur.xlsm").Activate
Sheets("Feuil1").Activate
D = Range("C2") ' Nb de marque TOTAL
A0 = 1 'Compteur de boucle
Windows("Lista Applicazioni RAPID modifié _ test.xls").Activate
B5 = 2 'colonne
Do While A0 < D
Sheets("Feuil1").Select
Cells(1, B5).Select 'Nom de la marque
Range(Selection, Selection.End(xlDown)).Select 'Sélection jusqu'en bas (Ctrl+(flèche du bas))
Application.CutCopyMode = False
Selection.Copy
Sheets("Feuil2").Select 'Collage en inversant ligne-colonne
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Cells.Select
Columns("C:AZ").Select
Selection.ColumnWidth = 17.5 'largeur des colonne à 17.5
Range("B1").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(Sheet1!C3,RC[-1])"
Range("B2").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[1]:RC[50])"
Range("B3").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(R[1]C[1]:R[47]C[50],""*"")"
Range("B4").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(R[-3]C:R[-3]C[50],""*"")"
'Définitions des 4 variables
B1 = Range("B1") 'NB de lignes TOTAL pour la marque
B2 = Range("B2") 'Somme du Nombre de Type par modèle
B3 = Range("B3") 'Somme des Types pour la marque
B4 = Range("B4") 'Somme des modèle dans la marque
'Application d'une formule pour compter le NB de fois que se répète le modèle dans la marque.
C = 3 'changement de colonne
A = 0 'compteur de boucle
Do While A < B4
'activation de la boucle temps que A est inférieur à la cellule B4
Cells(2, C).Select
ActiveCell.FormulaR1C1 = "=COUNTIFS(Sheet1!C3,R1C1,Sheet1!C4,R[-1]C)" 'Formule pour le NB de fois que se répète le modèle dans la marque
C = C + 1
A = A + 1
Loop
A = 0 'compteur de boucle
B = 3 'colonne
N = 0 'variable
O = 0 'Ligne
C = 0 'Ligne dans la formule F
C0 = 0
Do While A < B4
Z = Cells(2, B) 'NB modèle actuel
S = "=COUNTIF(R4C:R[" & Z & "]C,""*"")" 'Formule pour somme des modèles/marques
Cells(3, B).Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = S
N = Cells(3, B)
Do While N < Z
F = "=IF(Sheet1!R[" & C + C0 & "]C3=R1C1,IF(Sheet1!R[" & C + C0 & "]C4=R1C,Sheet1!R[" & C & "]C5,0),0)"
Cells(4 + O, B).Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = F
M = Cells(4 + O, B)
'M = Case précédente
If M <= 0 Then
C = C + 1
Else
Cells(4 + O, B).Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = F
M = Cells(4 + O, B)
O = O + 1
End If
S = "=COUNTIF(R4C:R[" & Z & "]C,""*"")" 'Formule pour somme des modèles/marques
Cells(3, B).Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = S
N = Cells(3, B)
Loop
C0 = C
C = 0
A = A + 1
B = B + 1
O = 0
Loop
C0 = 0
Sheets("Feuil2").Select
M1 = Range("A1")
Cells.Select
Selection.Cut
With Sheets.Add
.Name = M1
End With
ActiveSheet.Paste
B5 = B5 + 1
A0 = A0 + 1
Loop
Application.ScreenUpdating = True
'Affichage du temps d'exécution
MsgBox "durée du traitement: " & Timer - start & " secondes"
End Sub