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

XL 2010 Concatener selon valeurs

  • Initiateur de la discussion Initiateur de la discussion alfredo2000
  • Date de début Date de début
  • Mots-clés Mots-clés
    concatener

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

A

alfredo2000

Guest
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

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

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

Dernière édition:
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

Dernière édition:
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
 
Re,

Extrait de l'aide VBA:
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…