Compter les noms différent
Mrgeek
-
Mike-31 Messages postés 18406 Date d'inscription Statut Contributeur Dernière intervention -
Mike-31 Messages postés 18406 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
je voudrai trouver une formule qui me permet de compter le nombre de noms différent dans différente ligne (par exemple compter les noms différent dans les ligne A1;G1 et A5;G5)
j'ai trouver cette formule: =SOMMEPROD((A1:A10<>"")/NB.SI(A1:A10;A1:A10&"")) sauf que elle me permet de compter que dans une seul ligne ou colonne .
quelqu'un peut m'aider????
je voudrai trouver une formule qui me permet de compter le nombre de noms différent dans différente ligne (par exemple compter les noms différent dans les ligne A1;G1 et A5;G5)
j'ai trouver cette formule: =SOMMEPROD((A1:A10<>"")/NB.SI(A1:A10;A1:A10&"")) sauf que elle me permet de compter que dans une seul ligne ou colonne .
quelqu'un peut m'aider????
A voir également:
- Compter les noms différent
- Les noms des animaux - Télécharger - Études & Formations
- Excel différent de 0 - Forum Excel
- Excel différent de vide - Forum Excel
- Son différent notification android - Guide
- Excel compter cellule couleur sans vba - Guide
6 réponses
Bonsoir,
il s'agit d'une formule matricielle, pour compter les valeurs entre A1 et G1 la formule est
=SOMME(SI(A1:G1<>"";1/NB.SI(A1:G1;A1:G1)))
mais cette formule doit être validée en cliquant en même temps sur les trois touche Ctrl, Shift et Entrée si tu fais bien le formule se placera entre {}
comme ceci
{=SOMME(SI(A1:G1<>"";1/NB.SI(A1:G1;A1:G1)))}
et pour compter les valeurs de A1 à G1 et de A5 à G5
=SOMME(SI(A1:G1<>"";1/NB.SI(A1:G1;A1:G1)))+SOMME(SI(A5:G5<>"";1/NB.SI(A5:G5;A5:G5)))
et valider la formule en matricielle
il s'agit d'une formule matricielle, pour compter les valeurs entre A1 et G1 la formule est
=SOMME(SI(A1:G1<>"";1/NB.SI(A1:G1;A1:G1)))
mais cette formule doit être validée en cliquant en même temps sur les trois touche Ctrl, Shift et Entrée si tu fais bien le formule se placera entre {}
comme ceci
{=SOMME(SI(A1:G1<>"";1/NB.SI(A1:G1;A1:G1)))}
et pour compter les valeurs de A1 à G1 et de A5 à G5
=SOMME(SI(A1:G1<>"";1/NB.SI(A1:G1;A1:G1)))+SOMME(SI(A5:G5<>"";1/NB.SI(A5:G5;A5:G5)))
et valider la formule en matricielle
le problème avec cette formule c'est que sa compte les noms différent dans chaque ligne indépendamment, et additionne tout les résulta pour donner le nombre totale pour tout les ligne, et que du coup si un même nom apparaît dans plusieurs ligne différente il sera comptabiliser plusieurs fois.
Re,
l'idéal serait d'avoir une plage de cellules contigües ce qui donnerait
=SOMME(SI(A1:G5<>"";1/NB.SI(A1:G5;A1:G5))) toujours en matricielle, je regarde s'il est possible de contourner le problème
l'idéal serait d'avoir une plage de cellules contigües ce qui donnerait
=SOMME(SI(A1:G5<>"";1/NB.SI(A1:G5;A1:G5))) toujours en matricielle, je regarde s'il est possible de contourner le problème
Re,
Les cellules non contiguës posent un réel problème pour ce genre de calcul, le plus simple serait le traitement par VBA et encore que ?
le plus simple serait de regrouper tes données sur deux lignes contigües ou mieux deux colonnes pour gagner en place. et là plusieurs possibilités soit tu fais un copier/Collage spécial et transposer chaque ligne pour les avoir en colonne
ou on automatise l'ensemble
par exemple si tu as les colonnes L et M vide, en L1 tu peux coller cette formule
=INDIRECT(CAR(COLONNE()+64-11+LIGNE()-1)&1)
explication CAR(COLONNE()+64 te donne l'index colonne active soit L pour avoir A soit tu mets -11 soit tu changes 64-11 ce qui fera CAR(COLONNE()+53
+LIGNE()-1) cette partie te donnera l'index ligne et s'ajoutera à l'index colonne A pour obtenir dans la formule B à la ligne suivante puis C etc ... et &1 est le numéro ligne
en M1 tu colles la même formule adaptée soit =INDIRECT(CAR(COLONNE()+64-12+LIGNE()-1)&5)
ou
=INDIRECT(CAR(COLONNE()+52+LIGNE()-1)&5)
tu prends les deux cellule L1 et M1 et tu incrémentes vers le bas
ensuite tu reprends ma formule matricielle en modifiant le >1 par >0 pour ne pas compter les zéros résultant de la formule
=SOMME(SI(L1:M19>0;1/NB.SI(L1:M19;L1:M19)))
les colonnes L et M peuvent être masquées et si tu as besoin d'un montage fait signe
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Les cellules non contiguës posent un réel problème pour ce genre de calcul, le plus simple serait le traitement par VBA et encore que ?
le plus simple serait de regrouper tes données sur deux lignes contigües ou mieux deux colonnes pour gagner en place. et là plusieurs possibilités soit tu fais un copier/Collage spécial et transposer chaque ligne pour les avoir en colonne
ou on automatise l'ensemble
par exemple si tu as les colonnes L et M vide, en L1 tu peux coller cette formule
=INDIRECT(CAR(COLONNE()+64-11+LIGNE()-1)&1)
explication CAR(COLONNE()+64 te donne l'index colonne active soit L pour avoir A soit tu mets -11 soit tu changes 64-11 ce qui fera CAR(COLONNE()+53
+LIGNE()-1) cette partie te donnera l'index ligne et s'ajoutera à l'index colonne A pour obtenir dans la formule B à la ligne suivante puis C etc ... et &1 est le numéro ligne
en M1 tu colles la même formule adaptée soit =INDIRECT(CAR(COLONNE()+64-12+LIGNE()-1)&5)
ou
=INDIRECT(CAR(COLONNE()+52+LIGNE()-1)&5)
tu prends les deux cellule L1 et M1 et tu incrémentes vers le bas
ensuite tu reprends ma formule matricielle en modifiant le >1 par >0 pour ne pas compter les zéros résultant de la formule
=SOMME(SI(L1:M19>0;1/NB.SI(L1:M19;L1:M19)))
les colonnes L et M peuvent être masquées et si tu as besoin d'un montage fait signe
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Bonjour Mrgeek, bonjour Mike,
Traitement possible par VBA pour 2 plages horizontales (qui peuvent être de longueur différentes) :
Sub comptage()
c1 = UCase(InputBox("Indiquer lettre 1ere colonne de la 1ere plage"))
c2 = UCase(InputBox("Indiquer lettre dernière colonne de la 1ere plage"))
l1 = InputBox("Indiquer la ligne de la 1ere plage")
c3 = UCase(InputBox("Indiquer lettre 1ere colonne de la 2eme plage"))
c4 = UCase(InputBox("Indiquer lettre dernière colonne de la 2eme plage"))
l2 = InputBox("Indiquer la ligne de la 2eme plage ")
x = Asc(c2) - Asc(c1) + 1 'nbre de colonnes 1ere plage
Z = Asc(c4) - Asc(c3) + 1 'nbre de colonne 2eme plage
For n = 1 To x ' boucle sur les x colonnes de la 1ere plage
'A= 1/nbre de fois ou la valeur est répétée 1ere plage + nbre de fois où la valeur est présente en plage 2
' ex : une valeur répétée 3 fois en plage 1 et présente 2 fois en ligne 2 se verra attribuer le poids de 1/5 ou 0,2
A = 1 / (Application.WorksheetFunction.CountIf(Range(c1 & l1 & ":" & c2 & l1), Cells(l1, n)) + Application.WorksheetFunction.CountIf(Range(c3 & l2 & ":" & c4 & l2), Cells(l1, n)))
tot1 = tot1 + A 'additionne les poids des valeurs
Next
For n = 1 To Z ' boucle sur les Z colonnes de la 2eme plage
' même calcul que precedement mais inversé
A = 1 / (Application.WorksheetFunction.CountIf(Range(c3 & l2 & ":" & c4 & l2), Cells(l2, n)) + Application.WorksheetFunction.CountIf(Range(c1 & l1 & ":" & c2 & l1), Cells(l2, n)))
tot2 = tot2 + A
Next
tot3 = tot1 + tot2
MsgBox ("Noms différents : " & tot3)
End Sub
Cdlmnt
Traitement possible par VBA pour 2 plages horizontales (qui peuvent être de longueur différentes) :
Sub comptage()
c1 = UCase(InputBox("Indiquer lettre 1ere colonne de la 1ere plage"))
c2 = UCase(InputBox("Indiquer lettre dernière colonne de la 1ere plage"))
l1 = InputBox("Indiquer la ligne de la 1ere plage")
c3 = UCase(InputBox("Indiquer lettre 1ere colonne de la 2eme plage"))
c4 = UCase(InputBox("Indiquer lettre dernière colonne de la 2eme plage"))
l2 = InputBox("Indiquer la ligne de la 2eme plage ")
x = Asc(c2) - Asc(c1) + 1 'nbre de colonnes 1ere plage
Z = Asc(c4) - Asc(c3) + 1 'nbre de colonne 2eme plage
For n = 1 To x ' boucle sur les x colonnes de la 1ere plage
'A= 1/nbre de fois ou la valeur est répétée 1ere plage + nbre de fois où la valeur est présente en plage 2
' ex : une valeur répétée 3 fois en plage 1 et présente 2 fois en ligne 2 se verra attribuer le poids de 1/5 ou 0,2
A = 1 / (Application.WorksheetFunction.CountIf(Range(c1 & l1 & ":" & c2 & l1), Cells(l1, n)) + Application.WorksheetFunction.CountIf(Range(c3 & l2 & ":" & c4 & l2), Cells(l1, n)))
tot1 = tot1 + A 'additionne les poids des valeurs
Next
For n = 1 To Z ' boucle sur les Z colonnes de la 2eme plage
' même calcul que precedement mais inversé
A = 1 / (Application.WorksheetFunction.CountIf(Range(c3 & l2 & ":" & c4 & l2), Cells(l2, n)) + Application.WorksheetFunction.CountIf(Range(c1 & l1 & ":" & c2 & l1), Cells(l2, n)))
tot2 = tot2 + A
Next
tot3 = tot1 + tot2
MsgBox ("Noms différents : " & tot3)
End Sub
Cdlmnt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
j'ai pas tout compris Mike-31 mais voila se que j'ai fait:
je prend d'autre ligne contigu du genre J1;P1 et J2;P2 ensuite je fait afficher dans la ligne J1;P1 les noms présent en A1;G1 et dans la ligne J2;P2 les noms présent en A5;G5, puis j'applique la formule du début; =SOMMEPROD((J1;P2<>"")/NB.SI(J1;P2;J1;P2&"")) dans la zone J1;P2. et le tour est jouer !!!!
je prend d'autre ligne contigu du genre J1;P1 et J2;P2 ensuite je fait afficher dans la ligne J1;P1 les noms présent en A1;G1 et dans la ligne J2;P2 les noms présent en A5;G5, puis j'applique la formule du début; =SOMMEPROD((J1;P2<>"")/NB.SI(J1;P2;J1;P2&"")) dans la zone J1;P2. et le tour est jouer !!!!
Re,
Reprends mes explication avec le fichier joint tu devrais avancer, en cellule J3 le nombre d'occurrences
https://www.cjoint.com/?DEcvcVCAm6G
Reprends mes explication avec le fichier joint tu devrais avancer, en cellule J3 le nombre d'occurrences
https://www.cjoint.com/?DEcvcVCAm6G