Excel: concaténer des valeurs différentes

Fermé
saend - 28 déc. 2011 à 17:57
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 - 29 déc. 2011 à 23:51
Bonjour,

Je souhaite concaténer des valeurs dans une plage de données, mais uniquement les valeurs différentes (en éviter les doublons, donc !)
Exemple; dans ma colonnne A j'ai :
A1: pierre
A2: ciseau
A3: pierre
A4: caillou

je voudrais concaténer tout ca en B2 comme suit:
B2: pierre-ciseau-caillou (et donc ignorer le doublon de la cellule A3)!

c'est un exemple bien sur, après je devrai adapter la formule à chaque plage de données concernée (parfois 2 cellules, parfois 10, etc.) Ma feuille excel fait 15.000 lignes !

Est-ce possible ? (je précise que je me débrouille sous excel mais suis pas non plus une pro des macros, etc. !!)
Merci d'avance !

A voir également:

1 réponse

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 311
Modifié par michel_m le 28/12/2011 à 19:18
Bonjour

On pourrait le faire avec une matricielle-doliprane, mais avec 15000 lignes, tu aurais largement le temps d'aller papoter devant la machine à café

avec une tite macro
Sub transposer_uniques() 
Dim dico As Object, derlig As Integer, cptr As Integer, ref As String, liste 

derlig = Columns("A").Find("*", , , , , xlPrevious).Row 
Set dico = CreateObject("scripting.dictionary") 

For cptr = 1 To derlig 
     ref = Cells(cptr, "A") 
     If Not dico.exists(ref) Then dico.Add ref, 1 
Next 
liste = dico.keys 
Range("B2") = Join(liste, "-") 

End Sub

Michel
0
dingue! j'essaie, merci !
par contre, en l'occurrence c'était un exemple mais mon cas ne se limite pas à concaténer des donnees en colonne A, mais sur pls colonnes différentes, donc plutot en colonne "-1". Est il possible d'adapter la macro pour qu'elle agisse sur les données de la colonne d'avant sans fixer le n° de la colonne?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 311
29 déc. 2011 à 11:40
en l'occurrence c'était un exemple mais mon cas ne se limite pas à concaténer des donnees en colonne A, mais sur pls colonnes différentes, donc plutot en colonne "-1".


1/ Pourquoi ne pas l'avoir écrit au 1° post ? :-((

2/ nouvelle demande incompréhensible
0
ah désolée, en fait je pensais que la réponse serait une formule et que je pourrais l'adapter aux plages de donnes concernées dans ma feuille excel !
:(
donc: j'ai donné l'exemple pour le cas où mes données à concaténer sont en colonne A, mais j'ai plusieurs plages de données à concaténer, qui sont dans différentes colonnes, et je les concatène dans la colonne à droite de celle où se trouvent les données!
Le nombre de lignes n'est pas fixe non plus :-(

En résumé: parfois je dois concaténer les cellules A1 à A4 (et le résultat de la concaténation va en cellule B1) comme ds mon exemple initial, et parfois je cherche à concaténer les cellules F6 à F14 en cellule G6... etc... je sais c pas simple.... en tout cas j'espère avoir été plus claire et te remercie pour ton aide!!

bonnes fêtes !
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
29 déc. 2011 à 23:51
Bonsoir à vous deux.

Saend : as-tu un moyen d'identifier les colonnes à traiter et les lignes de début et de fin des zones à concaténer sans doublon?
Sans une telle identification, même avec une fonction vba avec sélection de la zone à traiter, tu vas passer un sacré temps avec tes 15.000 lignes!
Par défaut, et en reprenant la solution de michel_m, voici la fonction que tu peux utiliser :
Function concat_zone(vZone As Range) As String
    Dim dico As Object, vCell As Range, liste
    Set dico = CreateObject("scripting.dictionary")
    For Each vCell In vZone
         If Not dico.exists(vCell.Value2) Then dico.Add vCell.Value2, 1
    Next
    liste = dico.keys
    concat_zone = Join(liste, "-")
End Function
Cordialement
0