XL 2016 Regrouper cellule selon critere commun

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 !

bibbip35

XLDnaute Occasionnel
Bonjour à tous

Je cherche a faire une macro. afin de regrouper plusieurs cellule en une ( Valeurs mis a la ligne )
selon un critère commun
J'ai bien pensé en cancaner les cellules , mais au vue du nombre de ligne a traiter ca serait une Opération
longue et fastidieuse

Auriez-vous une idée commun procédé ?

Merci à tous pour votre aide

Bibbip
 

Pièces jointes

Bonjour bibibip35, djidji59430,

Le code de la feuille "Résultat" (clic droit sur l'onglet et Visualiser le code) :
Code:
Private Sub Worksheet_Activate()
Dim L#, tablo, d As Object, i&, x$, a, b, c$()
With Feuil1 'CodeName de la feuille
    .Columns(2).AutoFit 'ajustement largeur
    L = .Columns(2).ColumnWidth
    tablo = .[A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide
End With
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tablo)
    x = tablo(i, 1)
    d(x) = d(x) & IIf(d.exists(x), vbLf, "") & tablo(i, 2)
Next
Application.ScreenUpdating = False
If FilterMode Then ShowAllData 'si la feuille est filtrée
Cells.Delete 'RAZ
Columns(2).ColumnWidth = 66 'à adapter
'---transposition---
a = d.keys: b = d.items
ReDim c(UBound(a), 1) 'base 0
For i = 0 To UBound(c): c(i, 0) = a(i): c(i, 1) = b(i): Next
'---restitution---
Columns(2).WrapText = True 'renvoi à la ligne
Columns(2).ColumnWidth = L
[A1].Resize(i, 2) = c
End Sub
Fichier joint.

A+
 

Pièces jointes

Bonjour,

Code:
Private Sub Worksheet_Activate()
  Set f = Sheets("Fichier de Base")
  Set d1 = CreateObject("Scripting.Dictionary")
  Tbl = f.Range("a1:b" & f.[a65000].End(xlUp).Row).Value
  For i = 1 To UBound(Tbl)
  d1(Tbl(i, 1)) = d1(Tbl(i, 1)) & Tbl(i, 2) & vbCrLf
  Next i
  [A2].Resize(d1.Count) = Application.Transpose(d1.keys)
  [b2].Resize(d1.Count) = Application.Transpose(d1.items)
End Sub
 

Pièces jointes

Dernière édition:
Bonjour bibbip35, JB, ke forum,

Chez moi sur Win 10 - Excel 2013 avec la macro de JB il y a un bug sur :
Code:
  [b2].Resize(d1.Count) = Application.Transpose(d1.items)
et je ne comprends pas pourquoi !

C'est d'ailleurs pour cette raison que je fais une transposition par boucle.

Bonne journée.
 
Testé avec Excel 2002,Excel 2007,Excel 2010,Excel 2016

Code:
Private Sub Worksheet_Activate()
  Set f = Sheets("Fichier de Base")
  Set d1 = CreateObject("Scripting.Dictionary")
  TblE = f.Range("a1:b" & f.[a65000].End(xlUp).Row).Value
  For i = 1 To UBound(TblE)
    d1(TblE(i, 1)) = d1(TblE(i, 1)) & TblE(i, 2) & vbCrLf
  Next i
  [A2].Resize(d1.Count) = Application.Transpose(d1.keys)   ' 65000 clés maxi
  TblItems = d1.items: ReDim TblItems2(1 To d1.Count, 1 To 1)
  For i = 1 To d1.Count: TblItems2(i, 1) = TblItems(i - 1): Next i
  [b2].Resize(d1.Count) = TblItems2
End Sub

Boisgontier
 

Pièces jointes

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

Retour