CountIf argument multiple
Résolu
pou pouille
Messages postés
212
Statut
Membre
-
pou pouille Messages postés 212 Statut Membre -
pou pouille Messages postés 212 Statut Membre -
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")
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")
A voir également:
- CountIf argument multiple
- Ecran multiple pc - Guide
- Excel cellule choix multiple - Guide
- Copier coller multiple - Guide
- Paris multiple 2/6 explication - Forum Excel
- Paris Sportifs Combinés - Forum Loisirs / Divertissements
3 réponses
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 ^^
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 ^^
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
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