Excel - Nbre Cellules diff ac 2 conditions

Upside Down -  
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. melanie1324
     
    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
  2. melanie1324
     
    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
  3. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  4. Upside Down
     
    Bonjour,

    Merci à tous les deux pour vos propositions qui fonctionnent. Vous m'enlevez une belle épine du pied!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question