Bonjour à tous,
Je viens vers vous avec une colle que je n'ai pas su résoudre même en cherchant sur le net.
Certains trouveront ça certainement facile. mais bon, j'en ai assez de chercher sans succès.
Contrainte : je dois utiliser la fonction à partir de VBA car le fichier à traiter a plus de 35 000 lignes. et une formule appliquée à chaque cellule de la colonne K prend énormément de temps à calculer. Voici la macro du fichier :
Sub Formule()
Dim cell As Range
Set cell = Range("K2")
'formule qui ne donne pas le même résultat que sous la forme excel
MsgBox WorksheetFunction.CountIfs(cell.Offset(0, -2).EntireColumn, "Oui", _
cell.Offset(0, 1).EntireColumn, cell.Offset(0, 1).Value, _
cell.Offset(0, 2).EntireColumn, ">=" & (cell.Offset(0, -8).Value + 0.01), _
cell.Offset(0, 2).EntireColumn, "<" & (cell.Offset(0, -8).Value + Range("A1").Value))
Exit Sub '< pour ne pas lancer la boucle ci-dessous
' formule à appliquer sous la forme de boucle.
For Each cell In Range("K2:K" & Range("A1").CurrentRegion.Rows.Count)
cell.Value = WorksheetFunction.CountIfs(cell.Offset(0, -2).EntireColumn, "Oui", _
cell.Offset(0, 1).EntireColumn, cell.Offset(0, 1).Value, _
cell.Offset(0, 2).EntireColumn, ">=" & (cell.Offset(0, -8).Value + 0.01), _
cell.Offset(0, 2).EntireColumn, "<" & (cell.Offset(0, -8).Value + Range("A1").Value))
Next
' formule sous la forme Excel (à copier en "K2" et étendre jusqu'à la currentregion)
'=SI(I2="Oui";NB.SI.ENS(I:I;"Oui";L:L;L2;M:M;">="&C2+0,01;M:M;"<"&C2+$A$1);"")
End Sub
Ma problématique c'est que l'application de la formule en VBA ne me ressort pas la même valeur que la formule sous excel.
Quelqu'un peut m'aider à trouver pourquoi ?
Merci à tous !