Excel - Nbre Cellules diff ac 2 conditions

Fermé
Upside Down - 4 févr. 2011 à 16:42
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 - 7 févr. 2011 à 13:44
Bonjour,

Je souhaiterais effectuer un calcul sur Excel du nombre de cellules différentes.
Voici ma situation :
- Je dispose de 3 colonnes: la première avec l'identité des personnes ( de 1 à 20), une deuxième avec leur classe de métier (A, B), une dernière avec leur tranche de revenu (<20k€ par an;20-50k€/an et >50k€).
- Je souhaiterais savoir le nombre de personnes vérifiant à chaque combinaison (A et <20k€; A et 20-50k€....)
- Jusqu'ici ce n'est pas très difficile mais le problème est que pour chaque personne je dispose parfois de plusieurs lignes identiques qui correspond en fait à différentes années.
- Je voudrait donc que chaque personne ne soit compter qu'une seule fois et non pas en fonction de ce nombre d'année.

Voici un exemple de ma situation

Personne n° Métier Impôt (k€/an)
1 A <20
1 A <20
1 A <20
1 A <20
2 A >50
2 A >50
2 A >50
3 B 20-50
3 B 20-50
3 B 20-50
4 B <20
5 A <20
5 A <20
5 A <20
6 B 20-50
6 B 20-50
7 A >50
8 B >50
9 B <20
9 B <20
10 A >50

Je souhaiterais donc que le cas "A et <20" devrait me donner 2 et non pas 7.


Je vous remercie par avance.

5 réponses

Bonjour,

Tu vas dans outils, macro, visual basic editor.
Tu fais Insertion, Module.
Tu copie et colles cette macro.
Tu appuies sur F8, ca exécutera ton code ligne par ligne.
Mets ta souris régulièrement sur i,j,cpteur,pers et impot, ca te donnera les valeurs au fur et à mesure.

sub nbre

i=2 ' 2e ligne
j=1 '1ere colonne
cpteur = 0
pers = cells(i,j) ' pers est une varaible = à la personne
do while cells(i,j) = pers
impot = cells(i,j+2)
do while cells(i,j+2) = impot
i=i+1
cpteur = cpteur+1
loop
cells(i,j+3) = cpteur
cpteur = 0
if cells(i,j) = "" then
pers = 1
else
cells(i,j) = pers
end if
loop
0
Bonjour,

je me suis trompée dans le code précédent, il faut le remplacer par :
il faut que tes personnes soient en colonne 1 et salaire en colonne 3

sub x

i=2
j=1
inférieur = 0
entre = 0
superieur = 0

pers = cells(i,j)
do while cells(i,j) = pers
impot = cells(i,j+2)
do while cells(i,j+2) = impot
i=i+1
loop

if cells(i-1,j+2)= "<20"
inferieur = inferieur +1
else
if cells(i-1,j+2) = "20-50"
entre = entre+1
else
superieur = superieur+1
end if
end if

if cells(i,j) = "" then
pers = 1
else
pers = cells(i,j)
end if
loop
a = msgbox("Nombre de personne < 20 : " & inferieur)
a = msgbox("Nombre de personne 20-50" & entre
a = msgbox("Nombre de personne >20 : " & superieur

end sub
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
7 févr. 2011 à 11:00
Salut,

On doit pouvoir le faire avec une simple formule, tu dis la première colonne avec l'identité des personnes ( de 1 à 20), l'identité est numérique de 1 à 20 comme tu dis la formule serait pour la plage A2 à C20


=SOMMEPROD(--(ESTNUM($A$2:$A$20))*(B2:B20="A")*(C2:C20="<20"))

par contre si l'identité de la personne est saisie en toute lettre dans ce cas la formule serait pour la plage A2 à C20

=SOMMEPROD(1*ESTTEXTE(A2:A20)*(B2:B20="A")*(C2:C20="<20"))

Mais il y aurait mieux à faire, dans deux cellules tu crées deux listes déroulantes (de validation) pour afficher la classe et la tranche de revenue ce qui te permettrait d'utiliser la formule pour tous les cas.
Si tu veux un exemple fais signe
0
Bonjour,

Merci à tous les deux pour vos propositions qui fonctionnent. Vous m'enlevez une belle épine du pied!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
7 févr. 2011 à 13:44
Re,

Un exemple avec liste déroulante

https://www.cjoint.com/?0chnSqmrRo8
0