Excel: concaténer des valeurs différentes
saend
-
JvDo Messages postés 1924 Date d'inscription Statut Membre Dernière intervention -
JvDo Messages postés 1924 Date d'inscription Statut Membre Dernière intervention -
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 !
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 !
1 réponse
-
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 macroSub 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-
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? -
-
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 ! -
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 FunctionCordialement
-