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

XL 2010 Concatener selon valeurs

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 !

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

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

Discussions similaires

  • Question Question
Microsoft 365 Power Query
Réponses
8
Affichages
245
  • Question Question
Microsoft 365 Formule Excel
Réponses
4
Affichages
259
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…