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

Ordonner et grouper compter

5 réponses
Avatar
Did
Bonjour à tous,

Je souhaiterais calculer automatiquement des effectifs sur une série de
valeurs et les classer par ordre croissant

Exemple :

Sur cette plage de valeurs :
2
3
4
5
4
3
2
4
etc.

Résultat souhaité

Valeurs effectifs
2 2
3 2
4 3
5 1
etc.

Merci

5 réponses

Avatar
JièL Goubert
Bonjoir© Did

c'est pas la fonction RANG que vous cherchez ?
=RANG(A1;$A$1:$A$8;1)
mais bon, je trouve pas le même résultat que vous

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

Le 21/12/2005 17:08 vous avez écrit... :
Bonjour à tous,

Je souhaiterais calculer automatiquement des effectifs sur une série de
valeurs et les classer par ordre croissant

Exemple :

Sur cette plage de valeurs :
2
3
4
5
4
3
2
4
etc.

Résultat souhaité

Valeurs effectifs
2 2
3 2
4 3
5 1
etc.

Merci





Avatar
JB
Bonjour,

http://cjoint.com/?mvrTTGtRfj

A1:A8 est le champ qui contient les valeurs de départ:

=NB.SI($A$1:$A$8;E1) ' E1 contient 2

=FREQUENCE(A1:A8;E8:E12) ' E8:E12 contient 2,3,4,5,6

=SOMMEPROD((A1:A8á5)*1) ' E15 contient 2

Cordialement JB
Avatar
PMO
Bonjour,

Une piste avec le code ci-dessous

1) Copiez le code dans un module standard
'************
Sub PMO_TriGroupCompt()
Dim R As Range
Dim bool As Boolean
Dim var
Dim var2
Dim i&
Dim j&
Dim n&
Dim S As Worksheet
Dim V()
Dim T&()
Dim T2()
Set R = Range(Selection.Address)
If R.Rows.Count = 1 Or R.Columns.Count > 1 Then Exit Sub
var = R
For i& = 1 To UBound(var, 1)
If Not IsEmpty(var(i&, 1)) Then
bool = True
Exit For
End If
Next i&
If Not bool Then Exit Sub
Set S = Sheets.Add
Set R = Range(Cells(1, 1), Cells(UBound(var, 1), 1))
R = var
R.Sort key1:=[a1], order1:=xlAscending
Set R = R.Resize(R.Rows.Count + 1, 1)
var2 = R
n& = 1
For i& = 1 To UBound(var, 1)
If i& = UBound(var2, 1) Then Exit For
If var2(i&, 1) <> (var2(i& + 1, 1)) Then
j& = j& + 1
ReDim Preserve V(1 To j&)
V(j&) = var2(i&, 1)
ReDim Preserve T&(1 To j&)
T&(j&) = n&
n& = 0
End If
n& = n& + 1
Next i&
ReDim T2(1 To UBound(V) + 1, 1 To 2)
T2(1, 1) = "Valeurs"
T2(1, 2) = "Effectifs"
For i& = 1 To UBound(V)
T2(i& + 1, 1) = V(i&)
T2(i& + 1, 2) = T&(i&)
Next i&
Range(Cells(1, 1), Cells(UBound(var, 1), 1)) = var
Range(Cells(1, 3), Cells(UBound(T2, 1), 4)) = T2
End Sub
'************

2) Cette macro ne fonctionne qu'avec une sélection sur une
SEULE colonne.
Supposons vos données en A3:A227.
Sélectionnez cette plage et lancez la macro PMO_TriGroupCompt

3) Une nouvelle feuille apparaît avec
en colonne A les données d'origine
en colonne C les valeurs en ordre croissant
en colonne D le nombre total de chaque valeur
Si des cellules de la plage sélectionnée sont vides, elles ne sont
pas comptabilisées.

Cordialement.
--
PMO
Patrick Morange



Bonjour à tous,

Je souhaiterais calculer automatiquement des effectifs sur une série de
valeurs et les classer par ordre croissant

Exemple :

Sur cette plage de valeurs :
2
3
4
5
4
3
2
4
etc.

Résultat souhaité

Valeurs effectifs
2 2
3 2
4 3
5 1
etc.

Merci






Avatar
Did
Merci, à vous
la première méthode fonctionne =NB.SI($A$1:$A$8;E1) ' E1
contient 2

pas la seconde, =FREQUENCE(A1:A8;E8:E12) ' E8:E12 contient 2,3,4,5,6

(pas su faire marcher) et pas testé la 3ème

Quoi qu'il en soit il faut passer par une première étape de tri par ordre
croissant puis virer les doublons
Pratiquement on a aussi vite fait de le faire à la main, non ?

cordialement


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

Bonjour,

http://cjoint.com/?mvrTTGtRfj

A1:A8 est le champ qui contient les valeurs de départ:

=NB.SI($A$1:$A$8;E1) ' E1 contient 2

=FREQUENCE(A1:A8;E8:E12) ' E8:E12 contient 2,3,4,5,6

=SOMMEPROD((A1:A8á5)*1) ' E15 contient 2

Cordialement JB
Avatar
JB
Autre solution simple avec TCD

http://cjoint.com/?mvuNGvpwxA

A B
1 Nb Nombre de Nb
2 4 Nb Total
3 3 2 2
4 2 3 2
5 5 4 3
6 4 5 1
7 3 Total 8
8 2
9 4

-Cliquer en A2
-Données/Rapport de Tableau Croisé
-Nb en ligne
-Nb dans données
-Double-clic sur NB puis Nombre

Cordialement JB