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:
Join, fonction

Lien supprimé Lien supprimé Lien supprimé

Description

Renvoie une chaîne créée par la jonction de plusieurs sous-chaînes contenues dans un Lien supprimé.

Syntaxe

Join(sourcearray
[, delimiter])

La syntaxe de la fonction Join comprend les Lien supprimé suivants :

ÉlémentDescription
sourcearrayTableau à une dimension contenant les sous-chaînes à joindre.
delimiterFacultatif. Caractère de chaîne utilisé pour séparer les sous-chaînes dans la chaîne renvoyée. S'il est omis, le caractère espace (" ") est employé. Si l'argument delimiter est une chaîne de longueur nulle (""), tous les éléments de la liste sont concaténés sans séparateur.
 
- 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
Retour