CountIf argument multiple

Résolu/Fermé
pou pouille Messages postés 207 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 20 juillet 2012 - 26 oct. 2009 à 15:24
pou pouille Messages postés 207 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 20 juillet 2012 - 28 oct. 2009 à 15:06
Bonjour,
je vais essayer d'etre le plus clair possible ,
je souhaiterais compter le nombre de cellules avec plusieurs critère le premier est la vaiable K ( je cherche cette valeur dans la colonne B), le deuxième est qu'il ne doit pas compter lorsqu'il trouve "* B" dans la colonne C (en regard avec la ligne)
petit exemple
A B C
1 toto B
1 1
1 1
1 toto B

je veux qu'il me renvoie 2 puisque ma variable k ici sera à 1
dans l'attente de réponse je poste aussi la fonction tel que je l'ais écrite :
qte = Application.WorksheetFunction.CountIf(Sheets("Recap").Range("B2:B" & lignes), k And "C:C" <> "* B")

3 réponses

ladameblanche Messages postés 309 Date d'inscription mardi 5 septembre 2006 Statut Membre Dernière intervention 3 novembre 2023 88
26 oct. 2009 à 15:55
Peut-être ça
http://www.cijoint.fr/cjlink.php?file=cj200910/cijsOwc6Ns.xls
0
pou pouille Messages postés 207 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 20 juillet 2012 31
26 oct. 2009 à 16:06
cela pourai fonctionner oui mais jme suis mal exprimer
il n'y as rien dans la colonne C , la colonne B est "toto B"
et il y as un petit problème d'automatisation j'ai cré une macro pour ce que je souhaite faire parce que j'ai au moins 300 lignes avec des nombres qui varie ( K ).

en tout cas merci pour la réponse rapide ^^
0
pou pouille Messages postés 207 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 20 juillet 2012 31
28 oct. 2009 à 15:06
bon avec l'aide d'un autre forum j'ai enfin solution à mon problème , je post le code si des fois cela pouvais servire à quelqun.

Sub Macro1()
Dim DicoBoite As Object, Boite As Range, DerLig As Integer, Lig As Integer, Elmnt As Variant
Dim Qte As Integer, QteB As Integer, QteC As Integer
Application.ScreenUpdating = False
[E2:E65000].ClearContents
Set DicoBoite = CreateObject("Scripting.Dictionary")
DerLig = [B65000].End(xlUp).Row
'on identifie la liste unique des boites
For Each Boite In Range([B2], [B65000].End(xlUp))
If Not DicoBoite.Exists(Boite.Value) Then DicoBoite.Add Boite.Value, Boite.Value
Next Boite

For Each Elmnt In DicoBoite.items
Lig = [E65536].End(xlUp).Row + 1
Qte = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)<>""C"")*(RIGHT(C2:C" & DerLig & ",1)<>""B""))")
QteB = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)=""B""))")
QteC = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)=""C""))")
If Qte > 0 Then
Range("E" & Lig).Value = Elmnt
Range("F" & Lig).Value = Qte
Range("G" & Lig).Value = Columns(2).Find(Elmnt, LookIn:=xlValues, lookat:=xlWhole).Offset(0, -1).Value
Lig = Lig + 1
End If
If QteB > 0 Then
Range("E" & Lig).Value = Elmnt & "B"
Range("F" & Lig).Value = QteB
Lig = Lig + 1
End If
If QteC > 0 Then
Range("E" & Lig).Value = Elmnt & "C"
Range("F" & Lig).Value = QteC
Lig = Lig + 1
End If
' Range("E" & Lig).Value = Elmnt: Range("E" & Lig + 1).Value = Elmnt & "B": Range("E" & Lig + 2).Value = Elmnt & "C"
' Range("F" & Lig).Value = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)<>""C"")*(RIGHT(C2:C" & DerLig & ",1)<>""B""))")
' Range("F" & Lig + 1).Value = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)=""B""))")
' Range("F" & Lig + 2).Value = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)=""C""))")
Next
End Sub
0