XL 2016 Utiliser une plage de cellule comme critère dans NB.SI.ENS ou SOMMEPROD

  • Initiateur de la discussion Initiateur de la discussion Fabinou62
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Fabinou62

XLDnaute Occasionnel
Bonjour,

J'ai 2 feuilles de calculs dans le même classeur.
Une avec des numéros de bus et des taux d'attentes au feu (par exemple, ils attendent environ 30% des feu ou +....)
Une autre avec des numéros de bus et la ligne de bus correspondante (exemple : Lens > Lille).
J'aimerais compter le nombre de bus qui ont un taux d'attente au feu < 90 .

J'avais l'idée de faire :

- 1 ) Les bus (se trouvant dans la 2ème feuille avec leurs destinations) qui sont égaux au bus normal
- 2 ) La destination = (exemple : Lens >Lille)
- 3 ) Le taux d'attentes < 90

J'ai mis un fichier d'exemple 🙂
 

Pièces jointes

Solution
Bonjour Fabinou62, Jean-Eric,
vous aurez une technique + rapide, les tableaux ont potentiellement + de 16 000 lignes.
D'accord, utilisez cette fonction VBA :
VB:
Function CompteInf90&(plage1 As Range, plage2 As Range)
Dim d As Object, tablo, i&, x$
Set d = CreateObject("Scripting.Dictionary")
tablo = Intersect(plage1, plage1.Parent.UsedRange).Resize(, 2) 'matrice, plus rapide
For i = 1 To UBound(tablo)
    x = CStr(tablo(i, 1))
    If x <> "" Then If tablo(i, 2) < 90 Then d(x) = ""
Next
tablo = Intersect(plage2, plage2.Parent.UsedRange).Resize(, 2) 'matrice, plus rapide
For i = 1 To UBound(tablo)
    If d.exists(CStr(tablo(i, 1))) Then CompteInf90 = CompteInf90 + 1 'comptage
Next
End Function
Le code est à placer...
Bonjour Fabinou62, Jean-Eric,
vous aurez une technique + rapide, les tableaux ont potentiellement + de 16 000 lignes.
D'accord, utilisez cette fonction VBA :
VB:
Function CompteInf90&(plage1 As Range, plage2 As Range)
Dim d As Object, tablo, i&, x$
Set d = CreateObject("Scripting.Dictionary")
tablo = Intersect(plage1, plage1.Parent.UsedRange).Resize(, 2) 'matrice, plus rapide
For i = 1 To UBound(tablo)
    x = CStr(tablo(i, 1))
    If x <> "" Then If tablo(i, 2) < 90 Then d(x) = ""
Next
tablo = Intersect(plage2, plage2.Parent.UsedRange).Resize(, 2) 'matrice, plus rapide
For i = 1 To UBound(tablo)
    If d.exists(CStr(tablo(i, 1))) Then CompteInf90 = CompteInf90 + 1 'comptage
Next
End Function
Le code est à placer impérativement dans un module standard, fichier .xlsm joint.

A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour