Compter des noms et prénoms mis sur deux colonnes......

Clademar Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   -
Je m'explique, j'ai un tableau avec une colonne "nom" et une colonne "prénom". Des mêmes noms et prénoms sont répétés plusieurs fois dans ces colonnes ( par exemple j'ai plusieurs fois Donald Duck, Mickey Mouse, etc......). Il s'agit de clients qui sont passés plusieurs fois dans notre établissement. Je désire faire le total des clients que nous avons eus, sans compter les doublons. Je désire avoir une méthode qui ne nécessite pas de rajouter une colonne où les noms sont reportés, si possible. Merci de votre réponse.

11 réponses

Gyrus Messages postés 3334 Date d'inscription   Statut Membre Dernière intervention   526
 
Bonjour,

Le plus simple me semble d'utiliser un filtre avancé avec une extraction sans doublon.

A+
0
Fahora Messages postés 814 Date d'inscription   Statut Membre Dernière intervention   68
 
Bonjour , Clademar , Gyrus ,

Pourquoi avoir retirer le "bonjour" écrit d'office ?

En faisait une simple recherche sur Google , qui m'a pris certainement moins de temps que toi pour écrire ton sujet :

https://support.microsoft.com/en-us/office/count-unique-values-among-duplicates-8d9a69b3-b867-490e-82e0-a929fbc1e273?redirectsourcepath=%252ffr-fr%252farticle%252fcompter-des-valeurs-uniques-parmi-des-doublons-7889942d-824e-4469-893c-191d1efde950&ui=en-us&rs=en-us&ad=us

=SOMME(SI(FREQUENCE(EQUIV(A2:A12&B2:B12;A2:A12&B2:B12;0);EQUIV(A2:A12&B2:B12;A2:A12&B2:B12;0))>0;1))


A adapter , celle ci est faite pour 12 lignes.

Cordialement,
0
PHILOU10120 Messages postés 6445 Date d'inscription   Statut Contributeur Dernière intervention   824
 
Bonjour à vous trois

Une précision si les lignes sélectionnées comprennent une ligne vide cela compte un élément en plus
0
Clademar Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
Merci Fahora, Je suis vraiment désolée si j'ai enlevé le bonjour, je ne m'en suis même par aperçue, c'est une première pour moi ! En tout cas je vous remercie déjà tous pour vos réponses.
Cordiales salutations
0
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Bonjour le fil,

pour ma part j'aurais concatené les données colonne A et B exemple en colonne E qui pourra être masquée avec =A2&B2

et cette formule si on prend soin de limiter la plage à la zone de données si non les cellule comtenant les formules seront comptabilisées
=SOMME(SI(FREQUENCE(EQUIV(E2:E8;E2:E8;0);EQUIV(E2:E8;E2:E8;0))>0;1))


dans le cas de cellule vide ou contenant des formules, utiliser la même formule en remplaçant la borne E8 par une détection de cellule non vide avec formule retournant rien ""
remplacer E2:E8 par E2:INDIRECT(ADRESSE(MAX(LIGNE(E:E)*(E:E<>""));5;4))
ce qui donne
=SOMME(SI(FREQUENCE(EQUIV(E2:INDIRECT(ADRESSE(MAX(LIGNE(E:E)*(E:E<>""));5;4));E2:INDIRECT(ADRESSE(MAX(LIGNE(E:E)*(E:E<>""));5;4));0);EQUIV(E2:INDIRECT(ADRESSE(MAX(LIGNE(E:E)*(E:E<>""));5;4));E2:INDIRECT(ADRESSE(MAX(LIGNE(E:E)*(E:E<>""));5;4));0))>0;1))

0
Fahora Messages postés 814 Date d'inscription   Statut Membre Dernière intervention   68
 
Bonjour Mike , c'est effectivement ce que je fais aussi , sauf que je concatène directement dans la formule.
0
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Bonjour,

je travaillais également sur la même formule que tu as proposée avec un résultat erroné c'est pour cela que je suis passé par une colonne supplémentaire, c'est d'ailleurs ce que dénonçait Philou que je salue, compte manuelle les données et tu verras par toi même si tu as des lignes vides

Cordialement
0
PHILOU10120 Messages postés 6445 Date d'inscription   Statut Contributeur Dernière intervention   824 > Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention  
 
Bonjour à vous tous

Autre problème si toutes les lignes sont renseignées de noms et prénom différents le résultat est erroné, il en manque 1
0
Fahora Messages postés 814 Date d'inscription   Statut Membre Dernière intervention   68
 
Bonjour Philou ,

Je n'ai pas ce problème, j'ai bien le nombre exact quand il n'y a aucun doublon.

@Mike effectivement, j'ai bien vu que lorsqu'il y a une ou plusieurs lignes vides, la formule compte 1. En toute logique, il ne devrait pas y avoir, mais si il y a, il faut juste retirer 1 :)
0
PHILOU10120 Messages postés 6445 Date d'inscription   Statut Contributeur Dernière intervention   824 > Fahora Messages postés 814 Date d'inscription   Statut Membre Dernière intervention  
 
Erreur de ma part ma liste démarrait en A1 et la formule copiée en A2
0
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Re,

Si entre l'adresse de la première et dernière cellule il n'y a pas de cellule vide exemple entre A2 et B10 il est possible d'utiliser cette formule qui sera figée à la plage
=SOMME(SI(FREQUENCE(EQUIV(A2:A10&B2:B10;A2:A10&B2:B10;0);EQUIV(A2:A10&B2:B10;A2:A10&B2:B10;0))>0;1))

si la est appelée a varier il faut remplacer la borne de fin par une recherche de dernière cellule non vide par colonne et donc remplacer A2:A10 par A2:INDIRECT(ADRESSE(EQUIV(RECHERCHEV(CAR(255);A:A;1);A:A);1;4))
et idem pour B2:B10 par
B2:INDIRECT(ADRESSE(EQUIV(RECHERCHEV(CAR(255);B:B;1);B:B);2;4))
ou
B2:INDIRECT(ADRESSE(EQUIV(RECHERCHEV(CAR(255);A:A;1);A:A);2;4))
ce qui donne comme formule finie
=SOMME(SI(FREQUENCE(EQUIV(A2:INDIRECT(ADRESSE(EQUIV(RECHERCHEV(CAR(255);A:A;1);A:A);1;4))&B2:INDIRECT(ADRESSE(EQUIV(RECHERCHEV(CAR(255);A:A;1);A:A);2;4));A2:INDIRECT(ADRESSE(EQUIV(RECHERCHEV(CAR(255);A:A;1);A:A);1;4))&B2:INDIRECT(ADRESSE(EQUIV(RECHERCHEV(CAR(255);A:A;1);A:A);2;4));0);EQUIV(A2:INDIRECT(ADRESSE(EQUIV(RECHERCHEV(CAR(255);A:A;1);A:A);1;4))&B2:INDIRECT(ADRESSE(EQUIV(RECHERCHEV(CAR(255);A:A;1);A:A);2;4));A2:INDIRECT(ADRESSE(EQUIV(RECHERCHEV(CAR(255);A:A;1);A:A);1;4))&B2:INDIRECT(ADRESSE(EQUIV(RECHERCHEV(CAR(255);A:A;1);A:A);2;4));0))>0;1))


il est possible de raccourcir la formule et faire plus technique en mettant des formule dans des champs nommé
pour cela activer la cellule destinée à contenir la formule finale et Formule/Gestionnaire de noms/Définir un nom
exemple pour la plage colonne A nommer un champ Col_A et saisir cette formule
=ADRESSE(EQUIV(RECHERCHEV(CAR(255);Sheet2!A:A;1);Sheet2!A:A);1;4)
nommer un nouveau champ pour la plage en colonne B exemple Col_B et saisir cette formule
=ADRESSE(EQUIV(RECHERCHEV(CAR(255);Sheet2!A:A;1);Sheet2!A:A);2;4)

la formule finale à coller dans la cellule active est
=SOMME(SI(FREQUENCE(EQUIV(A2:INDIRECT(Col_A)&B2:INDIRECT(Col_B);A2:INDIRECT(Col_A)&B2:INDIRECT(Col_B);0);EQUIV(A2:INDIRECT(Col_A)&B2:INDIRECT(Col_B);A2:INDIRECT(Col_A)&B2:INDIRECT(Col_B);0))>0;1))

et le tour est directement joué
A+
Mike-31

Pas savoir n'est pas un échec, l'échec est le refus d'apprendre.
0
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Re,

il est possible de faire plus court et plus simple, à la formule qui prend en compte les cellules vides
=SOMME(SI(FREQUENCE(EQUIV(A2:A100&B2:B100;A2:A100&B2:B100;0);EQUIV(A2:A100&B2:B100;A2:A100&B2:B100;0))>0;1))

il suffit d'ajouter une conditionnelle sur les cellules vides
SI(NB.VIDE(A2:A100)>0;1;0)

et soustraire la conditionnelle cellule vide à la formule ce qui donne
=SOMME(SI(FREQUENCE(EQUIV(A2:A100&B2:B100;A2:A100&B2:B100;0);EQUIV(A2:A100&B2:B100;A2:A100&B2:B100;0))>0;1))-SI(NB.VIDE(A2:A100)>0;1;0)


au passage heureusement que la discussion nous a passionnée plus qu'au demandeur Clademar
0
Clademar Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   > Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention  
 
Bonjour tout le monde,

Mais ça me passionne énormément, je suis juste un peu (beaucoup) dépassée par ces formules. Je suis rentrée du travail seulement à 19H00, mais j'ai essayé plusieurs formules et la formule ultra longue de Mike-31 fonctionne. Je vais essayé les autres. Déjà un grand merci à vous tous
0
Clademar Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   > Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention  
 
Bonjour Mike,

J'ai essayé cette formule
=SOMME(SI(FREQUENCE(EQUIV(A2:A100&B2:B100;A2:A100&B2:B100;0);EQUIV(A2:A100&B2:B100;A2:A100&B2:B100;0))>0;1))-SI(NB.VIDE(A2:A100)>0;1;0)

Elle fonctionne et est bien plus courte. Un grand merci encore

Vu que vous êtes des as, je me permets de vous poser encore un problème. En fait j'ai une troisième colonnes où il est ajouté si les clients font un long séjour ou un court séjour. Est-il possible de mettre une deuxième conditions à la première formule pour que j'aie un total des clients "long séjour" et un total des clients "court séjour",
Merci

PS: par contre je ne sais pas où je dois aller pour marquer ma première demande comme résolue
0

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

Posez votre question
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Re,

Si j'ai bien compris ta nouvelle demande, tu veux savoir combien tu as eu de
"long séjour" et "court séjour" pour chaque client,
et est il possible que certains clients puissent avoir un court séjour et un long
0
Clademar
 
Re,
Oui c'est possible, mais j'aimerai aussi que si des clients viennent plusieurs fois en long séjour ou court séjour, ils ne soient comptés qu'une fois par catégorie.
Merci et bonne journée
0
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Re,

Je ne t'ai pas oublié, seulement un peu boosté?
alors j'en reviens à mes colonnes intermédiaires qui simplifiera tout tes calculs
ces colonnes pourront être masquées, fait une concaténation de tes cellules Nom et Prénom avec un espace, dans mon exemple j'ai pris la colonne D avec cette simple formule
=A2&" "&B2
et incrémente vers le bas
en E2 cette formule matricielle
=INDEX(D$1:D$100;MIN(SI(NB.SI(E$1:E1;D$1:D$100)=0;SI(D$1:D$100<>"";LIGNE(D$1:D$100)))))&""

et incrémente vers le bas, il est possible d'éviter les formules de la colonne E avec des formule plus compliquées en F et G2 à toi de voir
ensuite pour ne pas utiliser des formules compliquées et compter tes fréquences évoquées précédemment utilise cette formule matricielle
=SOMME((FREQUENCE(SI(D2:D100="";"";EQUIV(D2:D100;D2:D100;0));LIGNE(D2:D100))>0)*1)


et pour ta dernière demande tu peux faire un tableau de deux colonnes pour extraire sans doublon et cellule vide les noms et prénom, exemple en F2 cette simple formule
=SIERREUR(GAUCHE($E2;CHERCHE(" ";$E2;1)-1);"")

en G2 cette formule
=SIERREUR(DROITE(E2;NBCAR(E2)-NBCAR(GAUCHE(E2;CHERCHE(" ";E2))));"")

ensuite pour compter les séjours qui par exemple sont zen colonne C tu colles en H2 cette formule
=SOMMEPROD((A2:A20=F2)*(B2:B20=G2)*(C2:C20="Long séjour")) 

et éviter les zéro dans le cas de cellule critère vide
=SI(F2="";"";SOMMEPROD((A2:A20=F2)*(B2:B20=G2)*(C2:C20="Long séjour")))

en I2
=SI(F2="";"";SOMMEPROD((A2:A20=F2)*(B2:B20=G2)*(C2:C20="Court séjour")))

et tu incrémentes ces formules vers le bas

A+
Mike-31

Pas savoir n'est pas un échec, l'échec est le refus d'apprendre.
0
Clademar
 
Bonjour Mike,

J'ai mis du temps, mais je faisais du baby-sitting pour mes petits-enfants.
Je te remercie de tes réponses, mais malheureusement ça ne fonctionne pas, car j'ai besoin de cette formule pour mon travail et mon patron ne veut pas que je reporte des noms et prénoms dans une autre colonnes.......Donc il me faut vraiment une formules qui me calcule le nombre de clients en court séjour et le nombre de client en long séjour, en sachant que si un client fait plusieurs courts séjours ou plusieurs longs séjours, il ne doit être compté qu'une fois par catégorie. Vraiment pas facile !
Un grand merci et amicalement

Clademar
0
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Re,

il est gentil ton boss de demander l'impossible ou de faire compliqué lorsqu'on peut faire simple
ce problème peut se traiter que par VBA ou formule matricielle, à savoir que les formules matricielles utilisent beaucoup de ressource et il est conseillé de les utiliser sur des plages limitées si on ne souhaite pas voir ralentir les mises à jour de formules
mais enfin regarde comme cela "formule matricielle"
=NB(1/FREQUENCE(SI((C2:C100="Long séjour")*(A2:A100<>"");EQUIV(A2:A100&B2:B100;A2:A100&B2:B100;0));LIGNE(INDIRECT("1:"&LIGNES(A2:A100)))))


A+
Mike-31

Pas savoir n'est pas un échec, l'échec est le refus d'apprendre.
0
Clademar
 
Salut Mike,

J'ai essayé ta formule, malheureusement ça me donne "'0" comme résultat et avec mon exemple je devrais arriver à "35". Je pense que c'est impossible de trouver une formule qui fonctionne.
Merci quand même pour ton aide.
A+

Clademar
0
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Re,

je viens de retester et pas de problème tu dois faire une erreur ou tu ne déclare pas la formule correctement en matricielle
https://www.cjoint.com/c/FIosbQL81Dj
0