De: Laurent longre Objet: Re: Création d'une Fonction logique Date : samedi 8 juillet 2000 14:06 Philippe, Pour faire ce genre de fonction, il faut en principe utiliser une boucle: la variable compteur doit tester successivement chaque élément du tableau dans une boucle For (ou For Each-Next) et s'incrémenter si la condition est remplie pour chaque élément. Mais il y a beaucoup plus simple. Sous Excel, pour dénombrer les cellules >= 20 et < 80, on peut utiliser cette formule reposant sur la fonction FREQUENCE: =INDEX(FREQUENCE(Plage;{20;80});2) Cette formule peut être traduite sous VBA de la manière suivante: function Fct2080(X, BorneInf As double, BorneSup As double) As long Fct2080 = Application.Frequency(X, Array(BorneInf, BorneSup))(2, 1) End function C'est très rapide à l'exécution, et ça ne nécessite aucune boucle. Si ta plage et tes critères peuvent contenir des valeurs alphanumériques, tu peux aussi adapter la formule suivante: =NB.SI(Plage;">=20")-NB.SI(Plage;">=80") Ce qui donne en VBA : function Fct2080(X, BorneInf As double, BorneSup As double) As long With Application Fct2080 = .CountIf(X, ">=" & BorneInf) _ - .CountIf(X, ">=" & BorneSup) End With End function Si tu as Excel 97 ou 2000, tu peux remplacer Application par Worksheetfunction: c'est plus pratique à utiliser, mais légèrement plus lent à l'exécution. Laurent Philippe Lhermie a écrit : > > -- > Bonjour , > > je cherche à crér une fonction qui me permet de trouver le Nombre de > cellules dont la valeur X est > 20 >=X<80. > > Sachant que l'on sélectionne plusieurs cellules (comme la fonction somme), > j'ai essayé d'utiliser une Array qui contiendrait toutes les valeurs X mais > je n'arrive pas. > > J'ai aussi déclaré mon compteur en tant que Static, mais cela ne marche pas > non plus > =========== > Option Explicit > > Public function Fct2080(X, BorneInf, BorneSup) > Dim Counter As Integer > Dim MyArray(100) As double > > MyArray = X > > If IsNumeric(X) And X >= BorneInf And X < BorneSup Then > If Counter = 0 Then Counter = 1 Else: Counter = Counter + 1 > Fct2080 = Counter > > End If > > End function > > ========== > Quelqu'un a t'il une idé??? > Merci d'avance > > A bientôt, > Phil > > °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° > philippe.lhermie@freesbee.fr > > ICQ: 59740501 > > °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°