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

Compter des nombres avec des listes

8 réponses
Avatar
Andre
Bonjour,

Petit casse tête :

Soit les valeurs sur une feuille

A1 : 1
A2 : 10
A3 : 8
A4 : 15, 10, 8 La cellule A4 contient 3 nombres séparés par une virgule.
A5 : 8
A6 : 6

Question : Comment compter le nombre d'occurence de chaque nombre


Dans l'exemple

je trouve le nombre 1 : 1 fois
je trouve le nombre 6 : 1 fois
je trouve le nombre 8 : 3 fois
je trouve le nombre 10: 2 fois
je trouve le nombre 15: 1 fois

Comment puis-je compter ?

J'ai déjà essayé cross table, vlookup, une macro

Le problème avec la macro, si j'utilise la fonction " .Find( ) " avec le
paramètre xlPart, il trouve le nombre "1" 4 fois.

A1 : 1 le 1 ici ==> OK
A2 : 10 le 1 ici ==> pas bon.

Si j'utilise xlWhole, il ne trouve pas le nombre 10 au milieu de la liste.

Merci pour votre aide

André

8 réponses

Avatar
MichD
Bonjour,

Pour trouver le nombre de 1 dans la plage de cellules:
Si tu veux trouver d'autres valeurs, tu modifies dans la formule le 1 pour le chiffre à
identifier.

Tu peux utiliser cette formule : =SOMMEPROD((NBCAR(A1:A6)-NBCAR(SUBSTITUE(A1:A6;1;""))))
Avatar
gmlsteph
Bonjour,

C'est tout à fait normal, la cellule A4 ne contient pas une valeur mais u ne chaine de caractères: "15, 10, 8"

Cordialement.

--
LSteph

Le vendredi 11 mai 2012 15:30:01 UTC+2, Andre a écrit :
Bonjour,

Petit casse tête :

Soit les valeurs sur une feuille

A1 : 1
A2 : 10
A3 : 8
A4 : 15, 10, 8 La cellule A4 contient 3 nombres séparés par une virg ule.
A5 : 8
A6 : 6

Question : Comment compter le nombre d'occurence de chaque nombre


Dans l'exemple

je trouve le nombre 1 : 1 fois
je trouve le nombre 6 : 1 fois
je trouve le nombre 8 : 3 fois
je trouve le nombre 10: 2 fois
je trouve le nombre 15: 1 fois

Comment puis-je compter ?

J'ai déjà essayé cross table, vlookup, une macro

Le problème avec la macro, si j'utilise la fonction " .Find( ) " avec l e
paramètre xlPart, il trouve le nombre "1" 4 fois.

A1 : 1 le 1 ici ==> OK
A2 : 10 le 1 ici ==> pas bon.

Si j'utilise xlWhole, il ne trouve pas le nombre 10 au milieu de la liste .

Merci pour votre aide

André
Avatar
bcar
Bonjour,

voilà toujours un début de réponse, je ne sais pas si cela répondra
parfaitement à ta problématique mais bon :

On admettra pour la suite que le séparateur des nombres dans une liste
est le caractère "," et qu'il n'y a pas d'espace entre la virgule et le
nombre suivant (c'est possible de le gérer mais plus compliqué)

Soit
- les cellules A1-An remplies chacune avec une liste de nombre
- en B1 le nombre dont tu veux connaitre l’occurrence

- la formule suivante calcule le nombre d’occurrence de "b1" dans la
cellule A1 :
=(NBCAR(A1)+2
-NBCAR(SUBSTITUE(","&A1&"," ; ","&B1&"," ; "")))
/(NBCAR(B1)+2)
(on ajoute un caractère "," comme caractère de début et de terminaison
des listes (d'où les "+2")

- la formule suivante calcule le nombre d’occurrence de "b1" dans A1:A100
{=SOMME((NBCAR(A1:A100)+2
-NBCAR(SUBSTITUE(","&A1:A100&"," ;","&B1&"," ; "")))
/(NBCAR(B1)+2))}
({} car Validation matricielle (obtenue par ctrl+maj+enter))

cela alimentera peut être un peu ta réflexion.



Le 11/05/2012 15:30, Andre a écrit :
Bonjour,

Petit casse tête :

Soit les valeurs sur une feuille

A1 : 1
A2 : 10
A3 : 8
A4 : 15, 10, 8 La cellule A4 contient 3 nombres séparés par une virgule.
A5 : 8
A6 : 6

Question : Comment compter le nombre d'occurence de chaque nombre


Dans l'exemple

je trouve le nombre 1 : 1 fois
je trouve le nombre 6 : 1 fois
je trouve le nombre 8 : 3 fois
je trouve le nombre 10: 2 fois
je trouve le nombre 15: 1 fois

Comment puis-je compter ?

J'ai déjà essayé cross table, vlookup, une macro

Le problème avec la macro, si j'utilise la fonction " .Find( ) " avec le
paramètre xlPart, il trouve le nombre "1" 4 fois.

A1 : 1 le 1 ici ==> OK
A2 : 10 le 1 ici ==> pas bon.

Si j'utilise xlWhole, il ne trouve pas le nombre 10 au milieu de la liste.

Merci pour votre aide

André

Avatar
Jacquouille
Bonsoir Denis
Dans l'exemple donné, je teste sur le 10; Il me donne 4 comme réponse.
Peux-tu confirmer chez toi, svp?
grand merci et bonne soirée

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
joj6s9$dj8$

Bonjour,

Pour trouver le nombre de 1 dans la plage de cellules:
Si tu veux trouver d'autres valeurs, tu modifies dans la formule le 1 pour
le chiffre à
identifier.

Tu peux utiliser cette formule :
=SOMMEPROD((NBCAR(A1:A6)-NBCAR(SUBSTITUE(A1:A6;1;""))))
Avatar
MichD
La réponse est bien adaptée à ce que tu demandes à la formule.

Dans la section "Substitute" de la formule, si tu demandes de substituer un chiffre de 2
caractères,
pour chaque chiffre, tu "substitute" 2 caractères au lieu d'un seul. Par conséquent, la
réponse sera le double de ce qui est recherché.

Tu n'as qu'à diviser le résultat obtenu par la formule par le nombre de caractères de ton
chiffre.
dans ton cas, cela donnerait ceci :

=SOMMEPROD((NBCAR(A1:A6)-NBCAR(SUBSTITUE(A1:A6;10;""))))/2
Avatar
Jacquouille
Finesse dont je vais essayer de me souvenir.
Encore merci
Bonne nuit
Jacques



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
jojm6g$opc$

La réponse est bien adaptée à ce que tu demandes à la formule.

Dans la section "Substitute" de la formule, si tu demandes de substituer un
chiffre de 2
caractères,
pour chaque chiffre, tu "substitute" 2 caractères au lieu d'un seul. Par
conséquent, la
réponse sera le double de ce qui est recherché.

Tu n'as qu'à diviser le résultat obtenu par la formule par le nombre de
caractères de ton
chiffre.
dans ton cas, cela donnerait ceci :

=SOMMEPROD((NBCAR(A1:A6)-NBCAR(SUBSTITUE(A1:A6;10;""))))/2
Avatar
isabelle
bonjour André,

j'ai utilisé la méthode "scripting.dictionary"
il se peut que tu doives activer la bibliothèque Microsoft Scripting Runtime au menu(VBA)OutilsRéférences
j'ai mis le résultat du tableau de récapitulation en colonne G:H

[code]

Dim data, tx, tablo()

Sub Test()
Dim i As Integer, c As Range
Set data = CreateObject("scripting.dictionary")

For Each c In Range("A1:A" & Range("A65536").End(xlUp).Row)
tx = c.Value
If Not IsError(Application.Find(",", tx)) Then
sStr = Split(tx, ",")
For i = LBound(sStr) To UBound(sStr)
tx = Application.Trim(sStr(i)) * 1
liste
Next
Else
liste
End If
Next c

Range("G1").Resize(UBound(tablo, 2), 2) = Application.Transpose(tablo) ' <------ RESULTAT
Set data = Nothing
End Sub

Private Sub liste()
Dim y As Integer, n As Integer
If Not data.Exists(tx) Then
data.Add tx, tx
y = UBound(data.keys) + 1
ReDim Preserve tablo(1 To 2, 1 To y)
tablo(1, y) = tx
tablo(2, y) = 1
Else
n = Application.Match(tx, data.keys, 0)
tablo(2, n) = tablo(2, n) + 1
End If
End Sub


[/code]


--
isabelle




Le 2012-05-11 09:30, Andre a écrit :
Bonjour,

Petit casse tête :

Soit les valeurs sur une feuille

A1 : 1
A2 : 10
A3 : 8
A4 : 15, 10, 8 La cellule A4 contient 3 nombres séparés par une virgule.
A5 : 8
A6 : 6

Question : Comment compter le nombre d'occurence de chaque nombre


Dans l'exemple

je trouve le nombre 1 : 1 fois
je trouve le nombre 6 : 1 fois
je trouve le nombre 8 : 3 fois
je trouve le nombre 10: 2 fois
je trouve le nombre 15: 1 fois

Comment puis-je compter ?

J'ai déjà essayé cross table, vlookup, une macro

Le problème avec la macro, si j'utilise la fonction " .Find( ) " avec le
paramètre xlPart, il trouve le nombre "1" 4 fois.

A1 : 1 le 1 ici ==> OK
A2 : 10 le 1 ici ==> pas bon.

Si j'utilise xlWhole, il ne trouve pas le nombre 10 au milieu de la liste.

Merci pour votre aide

André

Avatar
bcar
Je reprend le message d'"Andre" trouvé sur un forum web suite à cette
proposition (réponse en dessous)

Bonjour,
Je l'emploi peut être mal, mais cela n'a pas l'air de fonctionner.
J'utilise Excel 2003 version Anglais. J'ai mis à jour votre formule
avec les
termes anglais. Ce qui donne:

=(LEN(A1)+2)-LEN(SUBSTITUTE(","&A1&",";","&B1&",";""))/(LEN(B1)+2)

Lorsque j'encode
A1 5, 6
A2 5, 6 et
A3 4, 5
B1 5
C1 votre formule. Resultat : 5.
Je mets en attachement mon fichier Excel. Il contient une macro.
Je ne suis pas encore certain à 100% s'il fonctionne dans tous les cas.
Mais certainnement à 95%.

Merci beaucoup pour votre aide
André



Bonjour,

vous trouvez 5 (ou plutôt 4.33...) car il y a une erreur de parenthésage
dans votre formule
ce n'est pas
=(LEN(A1)+2)-LEN(SUBSTITUTE(","&A1&",";","&B1&",";""))/(LEN(B1)+2)
mais
=(LEN(A1)+2-LEN(SUBSTITUTE(","&A1&",";","&B1&",";"")))/(LEN(B1)+2)
qui donnera bien 1 dans le cas évoqué ici

pour la suite du calcul (sur toute la colonne et pas uniquement sur une
cellule), voir la réponse initiale.

bcar