[Résolu]
Bonjour à tous,
Après une longue et fastidieuse recherche sur google, je n'ai pas trouvé de formule ou macro pouvant résoudre mon problème.
Si quelqu'un a déjà vu une solution sur une page web ou veut bien s'intéresser à ce problème, j'aprécierai vraiment.
Voici le problème:
Sur une feuille Excel j'ai de nombreuses données rangée en plage à selectionner facultativement du type E8:H11 ou F8:I12 (ex.):
col/ligne.-E--------F-------G--------H---------------I
8-----Chocolat---rouge----1--------Bière----------caramel
9-----Banane----6---------Poulet---Camembert----Brie
10----8----------27-------Frite-----Poulet---------Sucre
11----Rouge-----Banane---Poulet---6--------------Camembert
12----Bière------8---------Rouge---Banane--------Poulet
Quand je veux connaître le nombre de chaque tout va bien, ex:
Nombre de Poulet: =NB.SI($E$8:$I$12;"Poulet") > 4
Nombre de Camembert: =NB.SI($E$8:$I$12;"Camembert") > 2
Nombre de 6: =NB.SI($E$8:$I$12;"6") > 2
Le problème se corse lorsque je cherche combien de ligne contiennent à la fois Poulet, Camembert et 6; ou autrement dit comment pour chaque ligne de la plage sélectionnée quel est le nombre de fois ou apparaissent ces trois valeurs.
Le résultat devrait être 2 dans cet exemple.
Je peux bien sur employer une formule du type:
=SI(ET(NB.SI(E8:I8;"Poulet");NB.SI(E8:I8;"Camembert");NB.SI(E8:I8;"6"))=VRAI;1;"")
L'incrémenter dans la colonne K et en dessous ajouter la formule:
=SOMME(K9:K12)
Mais ce n'est pas ce que je cherche car ceci a tendance a alourdir le fichier surtout si la plage de recherche contient jusqu'à 1000 lignes et 20 colonnes et si il faut répéter l'opération pour de nombreuse valeurs différentes (augmentées) cherchées. Je ne veux pas non plus utiliser un tableau croisé dynamique car je veux utiliser le résultat dans d'autre formule. Je recherche une formule qui fait ce calcul sans l'incrémenter puis qu'il soit possible d'incrémenter cette formule à une liste de plusieurs valeurs cherchée. ex:
Valeurs cherchée:
Camembert / Chocolat / 6-------------Formule
Bière / Saumon / Moutarde / Beurre----Incrémenter formule
25 / 4 / 2 / 7-------------------------etc.
etc.
La fonction NB.SI ne permet pas de chercher plusieurs valeurs sur plusieurs colonnes et lignes en même temps ou bien je suis vraiment nul.
J'ai bien tenté d'autre type de formules vue sur internet mais elles ne prennent pas en compte une plage avec plusieurs arguments de recherche, ex:
{=SOMME(NB.SI(E8:I12;G9)*NB.SI(E8:I12;I11)*NB.SI(E8:I12;H11))} > 16
=NB.SI(E8:I12;G9)*NB.SI(E8:I12;I11)*NB.SI(E8:I12;H11) > 16
=NB.SI(E8:I12;G9)+NB.SI(E8:I12;I11)+NB.SI(E8:I12;H11) > 8
Ou encore des formules avec =OU, =ET, NB.SI, =BDNB, NB.SI.ENS, SOMMEPROD,SOMME.SI etc.
Rien n'est satisfaisant car cela fonctionne souvent en tant que comparaisons de deux plages et non une recherche dans une plage pour chaque ligne.
Je ne suis pas un pro des Macros. Je n'y comprends pas grand chose. Je m'essayerais bien à une fonction du type:
Ps: Svp ne rigolez pas sur ma fonction car je n'y connait rien aussi je vais écrire de très grosses bétises et des nom des variables ou actions qui n'existe pas. C'est sans doute n'importe quoi.
-----
Function NB.SI.VALIGNES(Plage;Valeur1;Valeur2;...)
Dim Plage = Selection.PlageRange.ActiveCells
Dim Valeur = Selection.ActiveCell
'Comment permettre d'augmenter le nombre de argument à choix?
Dim nb As Integer
nb=1
ActiveCell.Offset(1, 0) .FirstRow("Plage").Select
'ou Selection.FirstRow.ActivePlage
While
If (And ( NB.SI(Plage;"Valeur1")=True , NB.SI(Plage;"Valeur2")=True , NB.SI(Plage;"Valeur3")=True ) = True Then
nb = nb + 1
Else
ActiveCell.Offset(1 +1, 0) .Row("Plage").Select
End If
Loop
' Comment arrêter la boucle ou autrement dit comment faire une boucle
' pour les lignes d'une plage sélectionné par la souri.
NB.SI.VALIGNES = nb
End Function
----
Bon c'est vraiment n'importe quoi, mais quand on ne sait pas autant demander. Il y a peut-être une fonction existante qui fait déjà quelque chose très proche et voir le code serait déjà super aussi je suis prenneur ou une formule simple sur le tableur me va très bien aussi.
En fait je recherche à voir combien de fois une certaine combinaison de valeur apparait mais je ne cherche pas toutes les combinaisons existantes possibles qu'on puisse obtenir car c'est ce que j'ai trouvé sur internet.
Merci à tous ceux qui prendront part à la discussion.
Peanuts!
Bonjour à tous,
Après une longue et fastidieuse recherche sur google, je n'ai pas trouvé de formule ou macro pouvant résoudre mon problème.
Si quelqu'un a déjà vu une solution sur une page web ou veut bien s'intéresser à ce problème, j'aprécierai vraiment.
Voici le problème:
Sur une feuille Excel j'ai de nombreuses données rangée en plage à selectionner facultativement du type E8:H11 ou F8:I12 (ex.):
col/ligne.-E--------F-------G--------H---------------I
8-----Chocolat---rouge----1--------Bière----------caramel
9-----Banane----6---------Poulet---Camembert----Brie
10----8----------27-------Frite-----Poulet---------Sucre
11----Rouge-----Banane---Poulet---6--------------Camembert
12----Bière------8---------Rouge---Banane--------Poulet
Quand je veux connaître le nombre de chaque tout va bien, ex:
Nombre de Poulet: =NB.SI($E$8:$I$12;"Poulet") > 4
Nombre de Camembert: =NB.SI($E$8:$I$12;"Camembert") > 2
Nombre de 6: =NB.SI($E$8:$I$12;"6") > 2
Le problème se corse lorsque je cherche combien de ligne contiennent à la fois Poulet, Camembert et 6; ou autrement dit comment pour chaque ligne de la plage sélectionnée quel est le nombre de fois ou apparaissent ces trois valeurs.
Le résultat devrait être 2 dans cet exemple.
Je peux bien sur employer une formule du type:
=SI(ET(NB.SI(E8:I8;"Poulet");NB.SI(E8:I8;"Camembert");NB.SI(E8:I8;"6"))=VRAI;1;"")
L'incrémenter dans la colonne K et en dessous ajouter la formule:
=SOMME(K9:K12)
Mais ce n'est pas ce que je cherche car ceci a tendance a alourdir le fichier surtout si la plage de recherche contient jusqu'à 1000 lignes et 20 colonnes et si il faut répéter l'opération pour de nombreuse valeurs différentes (augmentées) cherchées. Je ne veux pas non plus utiliser un tableau croisé dynamique car je veux utiliser le résultat dans d'autre formule. Je recherche une formule qui fait ce calcul sans l'incrémenter puis qu'il soit possible d'incrémenter cette formule à une liste de plusieurs valeurs cherchée. ex:
Valeurs cherchée:
Camembert / Chocolat / 6-------------Formule
Bière / Saumon / Moutarde / Beurre----Incrémenter formule
25 / 4 / 2 / 7-------------------------etc.
etc.
La fonction NB.SI ne permet pas de chercher plusieurs valeurs sur plusieurs colonnes et lignes en même temps ou bien je suis vraiment nul.
J'ai bien tenté d'autre type de formules vue sur internet mais elles ne prennent pas en compte une plage avec plusieurs arguments de recherche, ex:
{=SOMME(NB.SI(E8:I12;G9)*NB.SI(E8:I12;I11)*NB.SI(E8:I12;H11))} > 16
=NB.SI(E8:I12;G9)*NB.SI(E8:I12;I11)*NB.SI(E8:I12;H11) > 16
=NB.SI(E8:I12;G9)+NB.SI(E8:I12;I11)+NB.SI(E8:I12;H11) > 8
Ou encore des formules avec =OU, =ET, NB.SI, =BDNB, NB.SI.ENS, SOMMEPROD,SOMME.SI etc.
Rien n'est satisfaisant car cela fonctionne souvent en tant que comparaisons de deux plages et non une recherche dans une plage pour chaque ligne.
Je ne suis pas un pro des Macros. Je n'y comprends pas grand chose. Je m'essayerais bien à une fonction du type:
Ps: Svp ne rigolez pas sur ma fonction car je n'y connait rien aussi je vais écrire de très grosses bétises et des nom des variables ou actions qui n'existe pas. C'est sans doute n'importe quoi.
-----
Function NB.SI.VALIGNES(Plage;Valeur1;Valeur2;...)
Dim Plage = Selection.PlageRange.ActiveCells
Dim Valeur = Selection.ActiveCell
'Comment permettre d'augmenter le nombre de argument à choix?
Dim nb As Integer
nb=1
ActiveCell.Offset(1, 0) .FirstRow("Plage").Select
'ou Selection.FirstRow.ActivePlage
While
If (And ( NB.SI(Plage;"Valeur1")=True , NB.SI(Plage;"Valeur2")=True , NB.SI(Plage;"Valeur3")=True ) = True Then
nb = nb + 1
Else
ActiveCell.Offset(1 +1, 0) .Row("Plage").Select
End If
Loop
' Comment arrêter la boucle ou autrement dit comment faire une boucle
' pour les lignes d'une plage sélectionné par la souri.
NB.SI.VALIGNES = nb
End Function
----
Bon c'est vraiment n'importe quoi, mais quand on ne sait pas autant demander. Il y a peut-être une fonction existante qui fait déjà quelque chose très proche et voir le code serait déjà super aussi je suis prenneur ou une formule simple sur le tableur me va très bien aussi.
En fait je recherche à voir combien de fois une certaine combinaison de valeur apparait mais je ne cherche pas toutes les combinaisons existantes possibles qu'on puisse obtenir car c'est ce que j'ai trouvé sur internet.
Merci à tous ceux qui prendront part à la discussion.
Peanuts!
Dernière édition: