Concaténer sans doublon

[Fermé]
Signaler
Messages postés
2
Date d'inscription
mardi 18 juillet 2017
Statut
Membre
Dernière intervention
19 juillet 2017
-
Messages postés
2
Date d'inscription
mardi 18 juillet 2017
Statut
Membre
Dernière intervention
19 juillet 2017
-
Bonjour à tous,

Je vais essayer d'expliquer le plus précisément mon problème car pour moi il est loi d'être simple. Et en plus il m'est ultra important (pour le travail).

Lors d'une inscription à une conférence, les étudiants sélectionnent leurs intérêts pour différents domaines d’études.
J'ai donc pour un même étudiant, plusieurs colonnes avec des domaines études sélectionnés (Commerce en colonne A, Digital en B, etc.). Sauf qu'au vue de la base qui m'a été transmis par le presta, il peut y avoir doublon dans les domaines pour une même personne. Exemple : A2=Digital, B2=Commerce, C2=Digital, D2=Commerce, etc.
Pour pouvoir intégrer cette base à notre outil, je dois concaténer dans une même cellule, l'ensemble des domaines sélectionnés par une personne :
- sans doublon (sachant que l'on peut avoir en colonne F le même domaine qu'en A)
- en séparant les domaines par une virgule
- en prenant en compte que si la colonne est vide, ne rien mettre. Ne mettre qu'une virgule lorsque le domaine est ajouté à l'ensemble des domaines car non présent dans les cellules précédentes.

Au départ, j'avais, laborieusement, regroupé tous les domaines dans une cellule, en prenant en compte que certaines cellules étaient vides (donc ne rien ajouter), sinon ajouter une virgule, puis de nouveau formule SI pour ajouter le domaine. Voici la formule :

=CONCATENER(H2;SI(ESTVIDE(I2);"";",");SI(ESTVIDE(I2);"";I2);SI(ESTVIDE(J2);"";",");SI(ESTVIDE(J2);"";J2);SI(ESTVIDE(K2);"";",");SI(ESTVIDE(K2);"";K2);SI(ESTVIDE(L2);"";",");SI(ESTVIDE(L2);"";L2);SI(ESTVIDE(M2);"";",");SI(ESTVIDE(M2);"";M2);SI(ESTVIDE(N2);"";",");SI(ESTVIDE(N2);"";N2))

Je dois donc concaténer l'ensemble des colonnes en une seule, sans doublon dans les domaines, les séparant par une virgule quand un domaine est ajouté (sinon rien), et appliquer cela à tous les étudiants (donc lignes)

Merci d'avance pour votre aide précieuse,
William

5 réponses

Messages postés
26242
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
23 octobre 2021
6 090
Bonjour
voyez ici

https://www.cjoint.com/c/GGspQcmAMkv

la seule chose à admettre pour ne pas compliquer la formule est que l'édition se termine pas une virgule si le dernier titre est un doublon

crdlmnt

La qualité de la réponse dépend surtout de la clarté de la question, merci!
Messages postés
26242
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
23 octobre 2021
6 090
... et pour suivre, un second modèle, sans virgule avec une édition en colonne
https://www.cjoint.com/c/GGsp1nXbl7v
la cellule doit être formatée en "alignement" retour à la ligne
crdlmnt
Messages postés
26242
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
23 octobre 2021
6 090
... et on complète avec celui ci, j'avais omis de prendre en compte qu'il pouvait y avoir des cellules vides

Classeur3 seul valable donc

https://www.cjoint.com/c/GGsqokjeynv

crdlmnt
Messages postés
24202
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 octobre 2021
6 937
Bonjour,

avec une fonction personnalisée :
Function concat(plage As Range) As String
        Dim c As Range, dict
        Set dict = CreateObject("Scripting.Dictionary")
        For Each c In plage
              If Not dict.exists(c.Value) And c <> "" Then dict(c.Value) = 1
        Next c
        concat = Join(dict.keys, ", ")
        Set dict = Nothing
End Function

=concat(B2:G2)

https://www.cjoint.com/c/GGsqpmBQWbG
eric

PS : remplacer ", " par "," si tu ne veux pas d'espace après la ,
En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Messages postés
54884
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
24 octobre 2021
16 779
Bonjour.

Il est dommage que ta liste de domaines soit en ligne 1, et ta liste d'étudiants en colonne A. En effet l'outil DONNÉES/Supprimer les doublons ne fonctionne que sur des données en colonne !
Si tu as la possibilité de refaire ta base en permutant lignes et colonnes, tant mieux.

Sinon, il te faut sélectionner ta base A1:N6 en Feuil1, faire Copier, aller en A1 de Feuil2, et faire Collage option Transposer.
Puis faire un Copier-Coller de B8:F14 en B16, en prenant bien soin que la ligne 15 reste parfaitement vide.
Sélectionner B16:B22 et faire DONNÉES/Supprimer les doublons/Continuer avec la sélection en cours
En B24 saisir la formule
=B16 & SI(B17="";"";"," & B17 & SI(B18="";"";"," & B18 & SI(B19="";"";"," & B19 
& SI(B20="";"";"," & B20 & SI(B21="";"";"," & B21 & SI(B22="";"";"," & B22))))))
(j'ai ajouté les espaces uniquement pour la lisibilité ; tu peux t'en passer).
Messages postés
54884
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
24 octobre 2021
16 779
Illustrations du post 5 :


Messages postés
2
Date d'inscription
mardi 18 juillet 2017
Statut
Membre
Dernière intervention
19 juillet 2017

Merci beaucoup à tous pour vos solutions.
Effectivement supprimer les doublons n'est que par colonne, ca aurait pu être plus simple si j'y avait pensé au début. Mais j'ai appris des choses :) Donc pas plus mal !