Nombre d'occurence de valeurs

Résolu/Fermé
kvjld35 Messages postés 22 Date d'inscription jeudi 12 mai 2016 Statut Membre Dernière intervention 13 juin 2016 - 27 mai 2016 à 09:12
kvjld35 Messages postés 22 Date d'inscription jeudi 12 mai 2016 Statut Membre Dernière intervention 13 juin 2016 - 27 mai 2016 à 11:43
Bonjour à tous,

Je travaille actuellement sur un projet en VBA et je rencontre une difficulté que je n'arrive pas à résoudre. Je précise que je travaille sous Excel 2003 (Et oui..).
J'ai dans une première colonne une plage de valeurs de longueur variable.
Dans les deux colonne suivantes je définis des intervalles de valeurs avec un min et un max. Je voudrais alors que ma macro me dise combien de valeurs parmi la plage dans la 1ere colonne appartiennent à chaque classe. Par exemple ici combien de valeurs sont comprises entre 9 et 12, puis entre 12 et 15 etc..

Je ne trouve pas de fonctions ou de commandes adaptées.


decal freq rej [MHz]
9 Min max
23
45 9 12
55 12 15
22 15 18
12 18 21
54 21 24
32
28
33
12
44


Merci d'avance à tous pour le temps que vous prendrez à me répondre !
A voir également:

3 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
27 mai 2016 à 10:43
Bonjour,

Avec Excel 2003, tu ne peux pas utiliser la fonction NB.SI.ENS (ou la méthode WorksheetFunction.CountIfs avec VBA).

Par contre, tu peux utiliser SOMMEPROD dans une formule Excel :
=SOMMEPROD(($A$2:$A$13>=B2)*($A$2:$A$13<C2)*1)

Ou avec VBA :
Sub Test()
Dim PlageS As Range, Nb As Range, Cel As Range
Set PlageS = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
Set Nb = Range("D2:D" & Range("B" & Rows.Count).End(xlUp).Row)
For Each Cel In Nb
Cel.Formula = Evaluate("SUMPRODUCT((" & PlageS.Address & ">=" & Cel.Offset(, -2).Address & ")*(" & PlageS.Address & "<" & Cel.Offset(, -1).Address & ")*1)")
Next Cel
End Sub


A+
1
kvjld35 Messages postés 22 Date d'inscription jeudi 12 mai 2016 Statut Membre Dernière intervention 13 juin 2016
27 mai 2016 à 10:55
Merci beaucoup Gyrus, je vais essayer ta proposition :-)
J'ai du mal à comprendre toutes les instructions de ton code mais je vais tenter de le comprendre et de l'adapter à mon programme.

Je te tiens au courant.
0
kvjld35 Messages postés 22 Date d'inscription jeudi 12 mai 2016 Statut Membre Dernière intervention 13 juin 2016
27 mai 2016 à 11:26
Merci Gyrus ta solution marche du tonnerre ! Je me prenais la tête à trouver comment faire et tu m'as bien aidé ;-)

Je te remercie pour ton aide et te souhaite une bonne continuation ! :-)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
27 mai 2016 à 10:07
Bonjour,

par ex:
si Valeur=15 on va dans l'intervalle 12-15 ou 15-18 ?
0
kvjld35 Messages postés 22 Date d'inscription jeudi 12 mai 2016 Statut Membre Dernière intervention 13 juin 2016
27 mai 2016 à 10:34
Dans l'intervalle 15-18, les valeurs max sont exclues je ne l'ai pas précisé pardon :-)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > kvjld35 Messages postés 22 Date d'inscription jeudi 12 mai 2016 Statut Membre Dernière intervention 13 juin 2016
27 mai 2016 à 10:43
OK, merci
sois patient !
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 395
Modifié par Vaucluse le 27/05/2016 à 10:48
Bonjour

vous avez sans doute vos raisons pour souhaiter une macro, mais une simple formule répond à la question
si on reporte votre tableau en A2:C13

il suffit de tirer à partir de D2:

=SI(OU(B2="";C2="");"";NB.SI.ENS($A$2:$A$13;">"&B2;$A$2:$A$13;"<"&C2))

crdlmnt

La qualité de la réponse dépend surtout de la clarté de la question, merci!
0
kvjld35 Messages postés 22 Date d'inscription jeudi 12 mai 2016 Statut Membre Dernière intervention 13 juin 2016
27 mai 2016 à 11:25
Bonjour Vaucluse,

La fonction NB.SI.ENS n'existe pas sous Excel 2003, je l'aurai simplement utilisé sinon :-)

Cordialement
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 395
Modifié par Vaucluse le 27/05/2016 à 11:35
fallait le dire :....enfin il aurait fallu que je le lise ;-))))

=SI(OU(B2="";C2="");"";SOMMEPROD(($A$2:$A$13>B2)*($A$2:$A$13<C2)))

crdlmnt
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
27 mai 2016 à 11:37
une solution macro + classique pour peu de lignes...
https://www.cjoint.com/c/FEBjHE7upct

mais en remplaçant nb.si.ens proposé par Vaucluse par sommeprod, ce serait Ok

mais si il y a plusieurs milliers de lignes il faudrait passer par une autre méthode en VBA car sommeprod est lent sur de grandes listes
0
kvjld35 Messages postés 22 Date d'inscription jeudi 12 mai 2016 Statut Membre Dernière intervention 13 juin 2016
27 mai 2016 à 11:43
Merci beaucoup, vos solutions sont top :-)
Non il y aura tout au plus plusieurs dizaines de lignes ça devrait aller.

Bonne continuation !
0