Bonjour à tous,
Voici ma problématique : J'ai un fichier excel pour analyse des traces, pour cela j'utilise beaucoup de "NB.SI.ENS" permettant de filtrer par Date / Numero / Critère.
Mais le fichier contient aujourd'hui 500 lignes à analyser, bientot ... 10 000 !!!
Et le traitement est plutot long, pour l'instant quelques secondes, mais quand il sera plein ce ne sera plus gérable !
J'ai voulu donc optimiser en créant un fonction pour remplacer le NB.SI.ENS
Malheureusement je n'ai pas du bien m'y prendre car pour l'instant c'est plus long que par formule.
En PJ le fichier avec la macro "NB_APPEL" qui est celle qui m'interesse.
- Je parcours l'ensemble des lignes, et suivant si la Date et Numéro correspond , je fais un "Like" Mais c'est trop lent.
Vous auriez une idée pour booster le traitement ?
Merci à vous
Voici la tête de la function :
Function NB_APPEL(debut As Date, fin As Date, num As String, valeur As String) As Integer
Dim Lig As Integer ' N° ligne traitée
Dim Nb As Integer ' N° ligne traitée
Dim NbLigne As String
'Lig = Worksheets("Traces").Range("D1048576").End(xlUp).Row
Nb = 0
NbLigne = Worksheets("Traces").Range("D1048576").End(xlUp).Row
If num = "" Then
For Lig = 2 To NbLigne
ddate = Sheets("Traces").Cells(Lig, 2).Value
' ----- Date DEBUT -----
If Sheets("Traces").Cells(Lig, 5).Value >= debut Then
If Sheets("Traces").Cells(Lig, 5).Value <= fin Then
If Sheets("Traces").Cells(Lig, 4).Value Like valeur Then
'MsgBox "valeur OK"
Nb = Nb + 1
End If
End If
End If
Next Lig
Else
For Lig = 2 To NbLigne
ddate = Sheets("Traces").Cells(Lig, 2).Value
' ----- Date DEBUT -----
If Sheets("Traces").Cells(Lig, 6).Value = num Then
If Sheets("Traces").Cells(Lig, 5).Value >= debut Then
If Sheets("Traces").Cells(Lig, 5).Value <= fin Then
If Sheets("Traces").Cells(Lig, 4).Value Like valeur Then
'MsgBox "valeur OK"
Nb = Nb + 1
End If
End If
End If
End If
Next Lig
End If
NB_APPEL = Nb
End Function