Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Aide sur fonction 'Application.WorksheetFunction.CountIfs' multicritères

Mr.Nobody

XLDnaute Nouveau
Bonjour,

Après avoir épluché pas mal de topic et d'exemple sur cette fonction je viens demander votre aide car je coince sur mon projet.

Partons de la base,

J'ai un tableau sous forme de 'bloc' de 4 lignes avec un espace entre chaque. Chaque bloc se répète avec des données différentes dans certaines cellules mais parfois elles sont identiques.
J'aimerais dans un premier temps pouvoir 'compter' le nombre de bloc identique qui se répète en apposant le résultat dans une cellule adjacente.

Exemple :

Bloc 1 - 5x
Bloc 2 - 4x

Une fois cette somme obtenue, qui correspond plus ou moins à un nb.si.ens, je supprime les bloc 'doublons' pour n'avoir q'un seul bloc avec le nb de répétition à coté.

J'ai d'abord pensé à utiliser un compteur avec la fonction CPL mais j'ai coincé du fait qu'il faut plusieurs critères dans le compteur.

Par exemple dans mon cas précis ,

Sur plage H:L50000,

Si les valeurs des cellules H3, H4 et L5 se retrouvent en doublon sur l'ensemble de la plage, alors compter le nombre de fois ou elles se répètent et déposer le résultat en O3.

Dans un premier, j'ai donc voulu essayer la fonction ' Application.WorksheetFunction.CountIfs ' sur le premier bloc et voir si ça fonctionne pour ensuite l'étendre aux autres blocs.

Je suis donc parti ainsi :
VB:
Sub COUNT()


'declare la variable


Dim ws As Worksheet


Set ws = Worksheets("COUNTIFS")


' fonction Countifs


ws.Range("o3") = Application.WorksheetFunction.CountIfs(ws.Range("h3:h50000"), ("h3"), ws.Range("h3:h50000"), ("h4"), ws.Range("h3:h50000"), ("L5"))



End Sub



Ce résultat me renvoie la valeur "0", au lieu de la somme présente dans les données.
Je précise que les données en H3 et H4 sont du texte, et en L5 des chiffres. Peut-être le problème vient-il de là ?

J'obtiens le même résultat avec la fonction NB.SI.ENS qui m'affiche tout le temps zéro. Qui est pourtant censé compter Si Valeur_A ET Valeur_B sur plage X alors compter.

Je ne suis qu'un débutant qui bredouille et je sollicite votre aide pour une éventuelle piste.

D'avance merci
 

Mr.Nobody

XLDnaute Nouveau
Bonsoir Staple1600,

merci pour ta réponse rapide. Je viens d'apporter cette correction mais le résultat semble toujours le même. J'obtiens "0" en résultat.

Je me suis dit que c'était peut être un conflit entre valeur numérique et valeur texte, mais J'ai également essayé juste avec les valeurs L3 et L4 sur plage L3:L50000 qui sont des valeurs numériques et j'obtiens également 0.

Edit : J'ai remplacé la valeur de L4 par L3 et là j'ai bien un compteur d'activé. Mais dans mon cas mes valeurs sont différentes et cela correspond à un simple countif, je désire un compteur avec plusieurs critères différents
 

Staple1600

XLDnaute Barbatruc
Re

Regarde ce petit exemple (à tester sur une feuille vierge)
VB:
Sub mTest()
Dim P As Range
Set P = [H3:H20]: [H3] = 1: P.DataSeries
MsgBox Application.CountIfs(P, ">3", P, "<10")
[A1] = 5
[B1] = 10
MsgBox Application.CountIfs(P, ">=" & [A1], P, "<=" & [B1])
End Sub
Cela devrait éclairer ta lanterne, non ?
 

Mr.Nobody

XLDnaute Nouveau
Bonjour,

Je crois avoir compris l'idée, en repartant à la base juste avec la formule NB.SI.ENS, je me suis rendu compte que le compteur fonctionnait bien si les arguments sont sur la même ligne.

j'ai donc déplacé ma valeur en L5 en O3 comme ceci :

VB:
=NB.SI.ENS(H3:H30;H3;I3:I30;I3;O3:O30;O3)

J'obtiens donc la somme selon mes 3 critères.

Cependant mon document brut et les données de mon extraction sont par 'bloc' et cela ne fonctionne pas quand j'ajoute un argument qui n'est pas sur la même ligne, comme ceci :


Code:
=NB.SI.ENS(H3:H30;H3;H3:H30;H4;I3:I30;I3;O3:O30;O3)

J'ai également essayé ce genre de chose :
Code:
=NB.SI.ENS(H3:H30;H3+H4;I3:I30;I3;O3:O30;O3)

=NB.SI.ENS(H3:H30;H3*H4;I3:I30;I3;O3:O30;O3)

=NB.SI.ENS(H3:H30;H3&H4;I3:I30;I3;O3:O30;O3)


Mais résultat 0, ce qui semble logique vu la composition de la formule. Je crois qu'il y a quelque chose qui m'échappe ou je n'utilise pas la bonne formule, avant de l'utiliser en VBA j'aimerais faire fonctionner la formule basique.
 

Mr.Nobody

XLDnaute Nouveau
Re,

En cherchant un peu j'ai trouvé un bout de code permettant de rechercher et compter les doublons.
Il se compose ainsi :

VB:
Sub RechercherDoublons()

  Dim col, nbCells, i, j

  col = ActiveCell.Column

  nbCells = Application.WorksheetFunction.CountA(Range(Columns(col), Columns(col)))

  For i = 1 To nbCells - 1

    For j = i + 1 To nbCells

      If Cells(i, col) = Cells(j, col) Then

        Cells(j, col).Interior.Color = RGB(255, 0, 0)

      End If

    Next j

  Next i

End Sub

Serait-il possible de l'adapter en ajoutant d'autres critères et d'afficher un compteur plutôt qu'une couleur si doublons identifiés ?

Je comprends que le i correspond à la cellule juste au dessus du j, peut-on rajouter d'autres éléments comme k -2 (deux cellules au dessus), un peu comme la sélection via le offset ?
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…