Bonjour luky-luke,
quel dommage que ton code vba ne tourne pas plus vite que ton ombre !
je te propose celui-ci :
Option Explicit
Dim cel As Range, nb&
Function NVert(Plg As Range) As Integer
Application.Volatile
nb = 0
For Each cel In Plg
If cel.Interior.ColorIndex = 14 _
Then nb = nb + 1 Else Exit For
Next cel
NVert = nb
End Function
* note que Next cel
au lieu de Next
accélère l'exécution, car VBA n'a pas à chercher à quelle variable correspond le Next pour pouvoir l'incrémenter (vu qu'ici, on l'indique explicitement)
* j'ai mis la déclaration des variables au niveau global du module : ça évite que ce soit lu à chaque appel de la fonction, donc ça évite aussi que VBA fasse à chaque appel une allocation de mémoire (y compris l'initialisation par défaut des variables)
* le seul travail de la fonction Couleur() est : Couleur = cl.Interior.ColorIndex
; aussi, je l'ai intégré dans la fonction NVert() : ça évite donc tous les multiples appels de la sub Couleur() par la sub NVert() ! (si la plage de cellules transmise est conséquente)
* pour totaliser le nombre de cellules de couleur 14, l'utilisation de la variable locale nb est peut-être plus rapide que les multiples affectations de la valeur de la fonction ; d'où le nb à la place du NVert (sauf à la fin, bien sûr, juste avant la sortie de sub)
* si ça suffit pas, j'te propose d'acheter un PC plus puissant (processeur i7 dopé aux MHz, avec overclocking et tout l'toutim) ; n'oublie pas d'y atteler Jolly Jumper, le cheval le plus rapide de l'Ouest ! seul Tornado, le cheval de Zorro, peut aller aussi vite que lui !
dhany