Compter les noms différent
Fermé
Mrgeek
-
1 mai 2014 à 20:16
Mike-31 Messages postés 18345 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 8 novembre 2024 - 2 mai 2014 à 21:03
Mike-31 Messages postés 18345 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 8 novembre 2024 - 2 mai 2014 à 21:03
A voir également:
- Compter les noms différent
- Les noms des animaux - Télécharger - Études & Formations
- Les logos et leurs noms - Télécharger - Jeux vidéo
- Symbole différent ✓ - Forum Clavier
- Signe différent - Forum Bureautique
- Comment faire le signe = barré? ✓ - Forum Bureautique
6 réponses
Mike-31
Messages postés
18345
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
8 novembre 2024
5 104
1 mai 2014 à 22:33
1 mai 2014 à 22:33
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.
Mike-31
Messages postés
18345
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
8 novembre 2024
5 104
2 mai 2014 à 08:35
2 mai 2014 à 08:35
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
Mike-31
Messages postés
18345
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
8 novembre 2024
5 104
Modifié par Mike-31 le 2/05/2014 à 10:10
Modifié par Mike-31 le 2/05/2014 à 10:10
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.
via55
Messages postés
14495
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 novembre 2024
2 734
2 mai 2014 à 13:30
2 mai 2014 à 13:30
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 !!!!
Mike-31
Messages postés
18345
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
8 novembre 2024
5 104
2 mai 2014 à 21:03
2 mai 2014 à 21:03
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