Bonjour,
Je cherche à savoir si mon code disponible ci-dessous peut être optimisé. Certes, je traite environ 40 000 lignes mais cela demande plus de 5 min de traitement sur mon PC qui ne me semble pas si mauvais. Je me dis du coup qu'il doit y avoir une meilleure syntaxe, plus efficace (voire plus propre).
Pour info, le tableau se décompose de la manière suivante:
Colonne C Colonne G Colonne K Colonne V numéro de commande numéro de document code de validation du document résultat de la formule Commande_1 doc_123 3 33,3% Commande_1 doc_124 2 33,3% Commande_1 doc_125 2 33,3% Commande_2 doc_126 3 100%
L'idée est d'obtenir en colonne V le pourcentage de documents traités par commande (si traité alors code 3 dans la colonne K).
Je me suis dit qu'il fallait diviser le nombre de références par commande en code 3 PAR le nombre de références totale par commande.
Je suis même allé jusqu'à me dire qu'il fallait juste diviser le nombre d'occurences d'une commande en code 3 par le nombre total d'occurences de cette même commande (plus besoin d'utiliser le numéro de document).
Voici le code qui en découle :
Il fonctionne bien mais je me dis que cela peut être plus concis, plus efficace.
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 Sub Test_countif() Application.ScreenUpdating = False Dim i As Long With Sheets("EntireList") i = .UsedRange.Rows.Count Range("V2:V" & i).Formula = "=COUNTIFS(C:C,C2,K:K,""3"")/COUNTIF(C:C,C2)" End With With Sheets("EntireList").Range("V:V") .Value = .Value End With ActiveSheet.Range("V:V").NumberFormat = "0.00%" Application.ScreenUpdating = True End Sub
J'ai vu que certains utilisent l' Application.CountIf mais je n'arrive pas à savoir si une façon de faire est bien mieux conseillée que les autres.
Merci de votre attention.
Camzo
Partager