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 :


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
Il fonctionne bien mais je me dis que cela peut être plus concis, plus efficace.

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