Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Concatener selon valeurs

alfredo2000

XLDnaute Nouveau
Bonjour,

Je suis nouveau sur le forum et je vous remercie d'avance pour votre aide.

J'ai 2 colonnes "compte" et "musicien". les valeurs peuvent etre identiques et se repeter

Je souhaite obtenir les colonnes "occurance" et "concatenation"

J'ai essayé avec des formules mais en vain.
A noter que mon fichier fait 4000 lignes

comment faire ?
 

Pièces jointes

  • Question.xlsx
    11.8 KB · Affichages: 9

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Une approche avec le complément Power Query ( page de téléchargement ) qui est très très bien pour traiter les données.
La prise en main est un peu ardue mais une fois qu'on a compris c'est too much. La seule chose à faire lorsque les données de la table changent est de cliquer sur actualiser dans l'onglet 'Données' d'excel.

Cordialement
 

Pièces jointes

  • alfredo2000-Rob.xlsx
    22.1 KB · Affichages: 8

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @alfredo2000, @Roblochon,

Une autre piste en VBA. Cliquer sur le bouton Hop. Le code est dans le module de la feuille Feuil1.
VB:
Sub test()
Dim t, d, i&, s
t = Range("a4:b" & Cells(Rows.Count, "a").End(xlUp).Row)
Set d = CreateObject("scripting.dictionary")
d.comparemode = vbTextCompare
For i = 1 To UBound(t)
  If Not d.exists(t(i, 1)) Then
    d.Add t(i, 1), t(i, 2)
  Else
    s = d(t(i, 1))
    s = s & ", " & t(i, 2)
    d(t(i, 1)) = s
  End If
Next i
For i = 1 To UBound(t)
  s = d(t(i, 1))
  t(i, 2) = s
  t(i, 1) = UBound(Split(s, ",")) + 1
Next i
Range("c4").Resize(UBound(t), 2) = t
Range("a:d").EntireColumn.AutoFit
End Sub
 

Pièces jointes

  • alfredo2000- concatener- v1.xlsm
    19.6 KB · Affichages: 7
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Préférez cette version v2 en cas de doublons !
VB:
Sub test()
Dim t, d, i&, s, xcompte
t = Range("a4:b" & Cells(Rows.Count, "a").End(xlUp).Row)
Set d = CreateObject("scripting.dictionary")
d.comparemode = vbTextCompare
For i = 1 To UBound(t)
  If Not d.exists(t(i, 1)) Then
    d.Add t(i, 1), CreateObject("scripting.dictionary")
    d(t(i, 1)).comparemode = vbTextCompare
  End If
  If Not d(t(i, 1)).exists(t(i, 2)) Then d(t(i, 1)).Add t(i, 2), ""
Next i

For i = 1 To UBound(t)
  t(i, 2) = Join(d(t(i, 1)).keys(), ",")
  t(i, 1) = d(t(i, 1)).Count
Next i

Range("c3:d" & Cells(Rows.Count, "c").End(xlUp).Row).Offset(1).ClearContents
Range("c4").Resize(UBound(t), 2) = t
Range("a:d").EntireColumn.AutoFit
End Sub
 

Pièces jointes

  • alfredo2000- concatener- v2.xlsm
    20.6 KB · Affichages: 8
Dernière édition:

alfredo2000

XLDnaute Nouveau
Bonjour,

Merci Roblochon et mapomme pour vos retours.
La solution de mapomme m'est un peu plus familière (mais je me renseignerai sur power query)

Une question : dans ce script, le "join" correspond t-il à une concaténation ?

For i = 1 To UBound(t)
t(i, 2) = Join(d(t(i, 1)).keys(), ",")
t(i, 1) = d(t(i, 1)).Count
Next i
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Extrait de l'aide VBA:
 

Discussions similaires

Réponses
4
Affichages
460
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…