OVH Cloud OVH Cloud

Calcul

9 réponses
Avatar
NicolasB
Salut,

J'aimerais compter le nbre de cellule non vide qui=20
contiennent 2004 dans une cha=EEne de caract=E8res.

Ma formule =3Dnb.si('table enregistrement'!D8:D200;Trouve
('table enregistrement'!D8:D200;"2004";1)) me renvoi 0=20
alors qu'il y en a au moins 1)

Merci pour votre aide

9 réponses

Avatar
Xav
Bonjour NicolasB

Tout d'abord, je pense qu'il y a une erreur de paramètre dans ta fonction
Trouve. Trouve(txt cherché:texte).

Ensuite, je ne pense pas qu'on puisse donner une plage de cellule comme
argument (si quelqu'un sait le faire, cela m'interesse aussi :-o

Enfin sachant que si le texte n'est pas trouvé, la valeur retournée est
#Valeur!, il faudrait pouvoiur gérer cette erreur.

Je proposerai donc de rajouter dans la colonne E par exemple et sur chaque
ligne de 8 à 200 la formule

=SI(ESTERR(TROUVE("2004";D8));"0";TROUVE("2004";D8))

et ensuite de faire ta formule NB.SI sur la plage E8:E200



--
@+

Xav
"NicolasB" a écrit dans le message de
news:346b01c48f3c$10559370$
Salut,

J'aimerais compter le nbre de cellule non vide qui
contiennent 2004 dans une chaîne de caractères.

Ma formule =nb.si('table enregistrement'!D8:D200;Trouve
('table enregistrement'!D8:D200;"2004";1)) me renvoi 0
alors qu'il y en a au moins 1)

Merci pour votre aide
Avatar
Nicolas B.
Salut,

Dans NB.SI, le critère est un chaine de caractères ("10", "",
">10"...). Tu ne peux pas mettre de fonctions. En plus Trouve renvoie
une erreur lorsqu'il ne trouve rien.

En formule matricielle :
=-SOMME(ESTERREUR(TROUVE("2004";A1:A10))-1)


A+
Nicolas B.

NicolasB wrote:
Salut,

J'aimerais compter le nbre de cellule non vide qui
contiennent 2004 dans une chaîne de caractères.

Ma formule =nb.si('table enregistrement'!D8:D200;Trouve
('table enregistrement'!D8:D200;"2004";1)) me renvoi 0
alors qu'il y en a au moins 1)

Merci pour votre aide


Avatar
Alain CROS
Bonjour

En essayant sans succès de comprendre la logique de la formule de Nicolas B.
J'ai trouvé ça.
=SOMME(NB(TROUVE("2004";A1:A10)))
en matricielle

Alain CROS

"Nicolas B." a écrit dans le message de news:
Salut,

Dans NB.SI, le critère est un chaine de caractères ("10", "",
">10"...). Tu ne peux pas mettre de fonctions. En plus Trouve renvoie
une erreur lorsqu'il ne trouve rien.

En formule matricielle :
=-SOMME(ESTERREUR(TROUVE("2004";A1:A10))-1)


A+
Nicolas B.



Avatar
Nicolas B.
Salut Alain,

En effet, ta formule est plus courte et plus simple (elle évite le
disgracieux ESTERREUR :-)


Pour la logique, quelques explications :

TROUVE renvoie un nombre si 2004 est trouvé, sinon une erreur (Valeur!).
Il suffit donc de compter le nombre de cellules pour lesquelles il n'y a
pas d'erreur. On pourrait écrire :
=SOMME(NON(ESTERREUR(TROUVE("2004";A1:A10))))

Mais pour gagner quelques caractères, on peut faire autrement. La
fonction ESTERREUR renvoie VRAI ou FAUX, soit 1 ou 0. On voudrait en
fait compter 1 quand il y a 0 et 0 quand il y a 1.
En soustrayant 1 à la condition, on a -1 quand ESTERREUR renvoie FAUX et
0 quand c'est VRAI :
=SOMME(ESTERREUR(TROUVE("2004";A1:A10))-1)

La somme donne le nombre de cellules contenant 2004 en négatif et il
faut donc prendre l'opposé :
=-SOMME(ESTERREUR(TROUVE("2004";A1:A10))-1)


Pffff, tout ça pour deux caractères...
;-)


A+
Nicolas B.


Alain CROS wrote:
Bonjour

En essayant sans succès de comprendre la logique de la formule de Nicolas B.
J'ai trouvé ça.
=SOMME(NB(TROUVE("2004";A1:A10)))
en matricielle

Alain CROS


Avatar
AV
Pour, dans la plage D8:D200, compter le nbre de cellules contenant (au moins une
fois) la chaîne "2004" :
=NB.SI(D8:D200;"*2004*")

AV
Avatar
NicolasB
Merci pour toutes les réponses, la dernière solution de AV
me renvoi 0
j'ai réussi à réaliser une boucle en vba comme suit et
cela semble fonctionner

for each c in [D8:D200]
if c.text like "*2004" then
compte=compte+1
end if
next

Je vous remercie pour votre aide.

-----Message d'origine-----
Pour, dans la plage D8:D200, compter le nbre de cellules
contenant (au moins une

fois) la chaîne "2004" :
=NB.SI(D8:D200;"*2004*")

AV



.



Avatar
AV
Merci pour toutes les réponses, la dernière solution de AV
me renvoi 0


Tu peux me donner un exemple des valeurs de la plage examinée ?
S'agit-il vraiment, comme dans ta question originelle, de "cellule non vide qui
contiennent 2004 dans une chaîne de caractères." ?

PS : la solution par macro (boucle) ne me parait pas une bonne alternative même
si, dans ton exemple, le temps d'exécution n'est pas "visiblement" inférieur

AV

Avatar
NicolasB
Les valeurs de la plages examinées sont des dates, mais
auusi des cellules vides. et je souhaite compter toutes
les dates contenant 2004.
-----Message d'origine-----
Merci pour toutes les réponses, la dernière solution de
AV


me renvoi 0


Tu peux me donner un exemple des valeurs de la plage
examinée ?

S'agit-il vraiment, comme dans ta question originelle,
de "cellule non vide qui

contiennent 2004 dans une chaîne de caractères." ?

PS : la solution par macro (boucle) ne me parait pas une
bonne alternative même

si, dans ton exemple, le temps d'exécution n'est
pas "visiblement" inférieur


AV


.




Avatar
AV
Les valeurs de la plages examinées sont des dates, mais
auusi des cellules vides. et je souhaite compter toutes
les dates contenant 2004.


Comme ça je comprends mieux car ça n'est plus la question d'origine !
"compter le nbre de cellule non vide qui
contiennent 2004 dans une chaîne de caractères."
Par ailleurs, s'il s'agit de vraies dates, la formule proposée par A.CROS ne
peut fonctionner....

Quid de vraies/fausses dates...?
Pas grave...

AV



-----Message d'origine-----
Merci pour toutes les réponses, la dernière solution de
AV


me renvoi 0


Tu peux me donner un exemple des valeurs de la plage
examinée ?

S'agit-il vraiment, comme dans ta question originelle,
de "cellule non vide qui

contiennent 2004 dans une chaîne de caractères." ?

PS : la solution par macro (boucle) ne me parait pas une
bonne alternative même

si, dans ton exemple, le temps d'exécution n'est
pas "visiblement" inférieur


AV


.