Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche indirecte valeur plage et compter les résultats

8 réponses
Avatar
smr78
Bonjour,

Mon exemple :

A B C D
E F
1 prod1 prod1 cat1
cat1 ?nombre

2 prod3 prod2 cat3

3 prod5 prod3 cat4

4 prod4 cat1

5 prod5 cat1

En colonne A, j'ai une liste de produits pris parmi une liste du tableau
colonne C
Le tableau colonnes C:D donne la catégorie de chaque produit (possibilité de
doublons)

En E1, le nom de la catégorie pour laquelle je désire compter le nombre de
produits de cette catégorie, présents dans la colonne A et mettre ce nombre
en F1

Je sais trouver la catégorie de chaque produit de la colonne A par la
fonction :
=index(D;Equiv(A1;C;0))
Je sais tester si cette catégorie est égale à E1, mais je ne sais pas itérer
pour balayer toutes les lignes de A1 à A3 et sommer les résultats.

Merci par avance pour toute suggestion.

Cordialement

8 réponses

Avatar
Youky
Salut,
J'ai trouvé mais seulement avec une macro.
tu fais 1 click droit sur l'onglet de la feuille et copie ceci
la macro s'effectue lors du changement de E1 ou toutes modifs en col A
Youky

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Or Target.Address = "$E$1" Then
For Each c In Range("A1:A" & [A65000].End(3).Row)
For k = 1 To [D65000].End(3).Row
If Cells(k, 4) = [E1] And c.Value = Cells(k, 3).Value Then
tx = tx + 1
End If
Next
Next
[F1] = tx
End If
End Sub

"smr78" a écrit dans le message de news:

Bonjour,

Mon exemple :

A B C D
E F
1 prod1 prod1 cat1
cat1 ?nombre

2 prod3 prod2 cat3

3 prod5 prod3 cat4

4 prod4 cat1

5 prod5 cat1

En colonne A, j'ai une liste de produits pris parmi une liste du tableau
colonne C
Le tableau colonnes C:D donne la catégorie de chaque produit (possibilité
de
doublons)

En E1, le nom de la catégorie pour laquelle je désire compter le nombre de
produits de cette catégorie, présents dans la colonne A et mettre ce
nombre
en F1

Je sais trouver la catégorie de chaque produit de la colonne A par la
fonction :
=index(D;Equiv(A1;C;0))
Je sais tester si cette catégorie est égale à E1, mais je ne sais pas
itérer
pour balayer toutes les lignes de A1 à A3 et sommer les résultats.

Merci par avance pour toute suggestion.

Cordialement



Avatar
JB
Bonjour,

Dans un module:

Function NbSiCritere(champ, champcritere, critere)
NbSiCritere = 0
For i = 1 To champ.Count
If champ(i) <> "" Then
cat = Application.VLookup(champ(i), champcritere, 2, False)
If Not IsError(cat) And UCase(cat) = UCase(critere) Then
NbSiCritere = NbSiCritere + 1
End If
Next i
End Function

=NbsiCritere(A1:A6;C1:D8;E1)

http://boisgontierjacques.free.fr/fichiers/fonctionsperso/Fonction_NbSiCrit ere.xls

JB

On 10 août, 19:24, smr78 wrote:
Bonjour,

Mon exemple :

A B C D
E F
1 prod1 prod1 cat1
cat1 ?nombre

2 prod3 prod2 cat3

3 prod5 prod3 cat4

4 prod4 cat1

5 prod5 cat1

En colonne A, j'ai une liste de produits pris parmi une liste du tableau
colonne C
Le tableau colonnes C:D donne la catégorie de chaque produit (possibili té de
doublons)

En E1, le nom de la catégorie pour laquelle je désire compter le nomb re de
produits de cette catégorie, présents dans la colonne A et mettre ce nombre
en F1

Je sais trouver la catégorie de chaque produit de la colonne A par la
fonction :
=index(D;Equiv(A1;C;0))
Je sais tester si cette catégorie est égale à E1, mais je ne sais p as itérer
pour balayer toutes les lignes de A1 à A3 et sommer les résultats.

Merci par avance pour toute suggestion.

Cordialement


Avatar
Trirème
Bonjour vous 2,
Si tu préfères une solution par formule, je te propose ceci :
=SOMME(--ESTNUM(EQUIV(EQUIV(A1:A3;C1:C5;0);LIGNE(D1:D5)*(D1:D5á);0)))
avec validation matricielle,
où A1:A3 représente l'extrait de ta liste de produits
où C1:C5 représente la liste des produits et
où D1:D5 représente la catégorie de chacun des produits

Autre formule pour flatter mon égocentrisme démesuré selon Rex ;-) :
=SOMME(--ESTNUM(EQUIV(EQUIV(A1:A3;C1:C5;0);LIGNE(D1:D5)*(D1:D5á);0));N("Formule par
Trirème"))

Cordialement,
Trirème

Bonjour,

Mon exemple :

A B C D
E F
1 prod1 prod1 cat1
cat1 ?nombre

2 prod3 prod2 cat3

3 prod5 prod3 cat4

4 prod4 cat1

5 prod5 cat1

En colonne A, j'ai une liste de produits pris parmi une liste du tableau
colonne C
Le tableau colonnes C:D donne la catégorie de chaque produit (possibilité de
doublons)

En E1, le nom de la catégorie pour laquelle je désire compter le nombre de
produits de cette catégorie, présents dans la colonne A et mettre ce nombre
en F1

Je sais trouver la catégorie de chaque produit de la colonne A par la
fonction :
=index(D;Equiv(A1;C;0))
Je sais tester si cette catégorie est égale à E1, mais je ne sais pas itérer
pour balayer toutes les lignes de A1 à A3 et sommer les résultats.

Merci par avance pour toute suggestion.

Cordialement



Avatar
Trirème
Petit ajustement si tes données ne commencent pas à la 1ère ligne, ce qui fort probable :
=SOMME(--ESTNUM(EQUIV(EQUIV(A1:A3;C1:C5;0);(LIGNE(D1:D5)-MIN(LIGNE(D1:D5)+1))*(D1:D5á);0)))

Cordialement,
Trirème
Avatar
smr78
Bonsoir,
Merci pour toutes ces réponses, j'ai eu peur, je pensais que tout le monde
était en vacances.
J'adore et préfère les solutions avec formule, faire une itération avec
macro, je sais faire. Par contre, merci, je viens de découvrir que l'on
pouvait créer sa propre formule basée sur une macro.
Humh, reste petit problème avec la formule de Trirème, j'ai l'impression que
la formule ne fonctionne qu'avec les mêmes lignes pour l'extrait de liste et
la liste des produits, je veux dire que ces deux listes doivent commencer sur
un même numéro de ligne.
Un petit coup de pouce encore, car mes deux listes sont à des endroits
différents?

J'ai trouvé un bout de formule matricielle rigolote :
{ÞCALER(C1:C5;0;0;5;D1:D5á)}
qui me donne des valeurs #REF! et #VALEUR!, selon que le produit est de la
catégorie cherchée ou pas. Reste à savoir comment compter et distignuer les
valeurs #REF! ?
Merci bien
Cordialement


Petit ajustement si tes données ne commencent pas à la 1ère ligne, ce qui fort probable :
=SOMME(--ESTNUM(EQUIV(EQUIV(A1:A3;C1:C5;0);(LIGNE(D1:D5)-MIN(LIGNE(D1:D5)+1))*(D1:D5á);0)))

Cordialement,
Trirème



Avatar
JB
Bonjour,

=SOMME(ESTNUM(EQUIV(A1:A10;SI(cateá;produit);0))*1)
Valider avec Maj+Ctrl+Entrée

http://cjoint.com/?imsPAn6auq

JB

On 12 août, 18:16, smr78 wrote:
Bonsoir,
Merci pour toutes ces réponses, j'ai eu peur, je pensais que tout le mo nde
était en vacances.
J'adore et préfère les solutions avec formule, faire une itération avec
macro, je sais faire. Par contre, merci, je viens de découvrir que l'on
pouvait créer sa propre formule basée sur une macro.
Humh, reste petit problème avec la formule de Trirème, j'ai l'impress ion que
la formule ne fonctionne qu'avec les mêmes lignes pour l'extrait de lis te et
la liste des produits, je veux dire que ces deux listes doivent commencer sur
un même numéro de ligne.
Un petit coup de pouce encore, car mes deux listes sont à des endroits
différents?

J'ai trouvé un bout de formule matricielle rigolote :
{ÞCALER(C1:C5;0;0;5;D1:D5á)}
qui me donne des valeurs #REF! et #VALEUR!, selon que le produit est de la
catégorie cherchée ou pas. Reste à savoir comment compter et distig nuer les
valeurs #REF! ?
Merci bien
Cordialement




Petit ajustement si tes données ne commencent pas à la 1ère ligne , ce qui fort probable :
=SOMME(--ESTNUM(EQUIV(EQUIV(A1:A3;C1:C5;0);(LIGNE(D1:D5)-MIN(LIGNE(D1 :D5)+1­))*(D1:D5á);0)))

Cordialement,
Trirème- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
smr78
Je pense avoir trouvé la correction, il fallait mettre -1 au lieu de +1 dans
la formule. Ca marche avec
=SOMME(--ESTNUM(EQUIV(EQUIV(A1:A3;C1:C5;0);(LIGNE(D1:D5)-MIN(LIGNE(D1:D5)-1))*(D1:D5á);0)))

Merci encore, c'est super


Bonsoir,
Merci pour toutes ces réponses, j'ai eu peur, je pensais que tout le monde
était en vacances.
J'adore et préfère les solutions avec formule, faire une itération avec
macro, je sais faire. Par contre, merci, je viens de découvrir que l'on
pouvait créer sa propre formule basée sur une macro.
Humh, reste petit problème avec la formule de Trirème, j'ai l'impression que
la formule ne fonctionne qu'avec les mêmes lignes pour l'extrait de liste et
la liste des produits, je veux dire que ces deux listes doivent commencer sur
un même numéro de ligne.
Un petit coup de pouce encore, car mes deux listes sont à des endroits
différents?

J'ai trouvé un bout de formule matricielle rigolote :
{ÞCALER(C1:C5;0;0;5;D1:D5á)}
qui me donne des valeurs #REF! et #VALEUR!, selon que le produit est de la
catégorie cherchée ou pas. Reste à savoir comment compter et distignuer les
valeurs #REF! ?
Merci bien
Cordialement


Petit ajustement si tes données ne commencent pas à la 1ère ligne, ce qui fort probable :
=SOMME(--ESTNUM(EQUIV(EQUIV(A1:A3;C1:C5;0);(LIGNE(D1:D5)-MIN(LIGNE(D1:D5)+1))*(D1:D5á);0)))

Cordialement,
Trirème





Avatar
smr78
Waouh, c'est parfait,
Merci à tous


Bonjour,

=SOMME(ESTNUM(EQUIV(A1:A10;SI(cateá;produit);0))*1)
Valider avec Maj+Ctrl+Entrée

http://cjoint.com/?imsPAn6auq

JB

On 12 août, 18:16, smr78 wrote:
Bonsoir,
Merci pour toutes ces réponses, j'ai eu peur, je pensais que tout le monde
était en vacances.
J'adore et préfère les solutions avec formule, faire une itération avec
macro, je sais faire. Par contre, merci, je viens de découvrir que l'on
pouvait créer sa propre formule basée sur une macro.
Humh, reste petit problème avec la formule de Trirème, j'ai l'impression que
la formule ne fonctionne qu'avec les mêmes lignes pour l'extrait de liste et
la liste des produits, je veux dire que ces deux listes doivent commencer sur
un même numéro de ligne.
Un petit coup de pouce encore, car mes deux listes sont à des endroits
différents?

J'ai trouvé un bout de formule matricielle rigolote :
{ÞCALER(C1:C5;0;0;5;D1:D5á)}
qui me donne des valeurs #REF! et #VALEUR!, selon que le produit est de la
catégorie cherchée ou pas. Reste à savoir comment compter et distignuer les
valeurs #REF! ?
Merci bien
Cordialement




Petit ajustement si tes données ne commencent pas à la 1ère ligne, ce qui fort probable :
=SOMME(--ESTNUM(EQUIV(EQUIV(A1:A3;C1:C5;0);(LIGNE(D1:D5)-MIN(LIGNE(D1:D5)+1­))*(D1:D5á);0)))

Cordialement,
Trirème- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -