XL 2019 Concaténer plusieurs lignes à partir d'une référence en doublon

donatello2

XLDnaute Nouveau
Bonjour,

J'aimerais obtenir de l'aide sur l'un de mes fichiers Excel.

Je travaille sur un tableau contenant une dizaine de colonnes ainsi que plusieurs milliers de lignes.

Dans ces lignes se trouvent des références qui peuvent potentiellement revenir en doublons voir triplons et plus sans pour autant que les autres données de cette même ligne soit les mêmes.

Je souhaiterais que les lignes contenant cette la référence soit supprimer et les informations des autres cellules concatener en une unique.

Voici un extrait de mon tableau :

1678272960937.png


j'aimerais que les lignes comportant un doublon sur les données si situant en colonne E (Code unique référence) soient fusionnées en une seule et que les données des colonnes suivantes concaténer. Je ne sais pas si je parviens à y expliquer correctement alors voici un exemple de comment je souhaiterais plus ou moins retrouver mes données après la macro :

1678273659587.png


Les données concaténer seraient alors séparés d'un tiret ou d'un slash.

En espérant que mes explications vous suffisent.

Je vous joins ce même fichier dans la discussion et vous remercie par avance de votre temps et de votre aide !

Bonne journée à vous tous.

Cordialement.
 

Pièces jointes

  • test.xlsm
    13 KB · Affichages: 4

vgendron

XLDnaute Barbatruc
Bonjour

Dans ton exemple, le code unique est créé à partir des colonne A B et D==> donc elles seront identiques
mais la colonne C et F.. sont elles censées etre toujours les memes ?
ainsi, dans le résultat, il n'y a pas de "concatenation"
 

vgendron

XLDnaute Barbatruc
avec ce code

VB:
Sub Compiler()

Dim TabData() As Variant

With Sheets("Feuil1")
    LastLine = .Range("A" & .Rows.Count).End(xlUp).Row
    Set zone = .Range("A1:Q" & LastLine)
    
    .Sort.SortFields.Clear
    .Sort.SortFields.Add2 Key:=zone.Columns(5), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    
    With .Sort
        .SetRange zone
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
     'on peut mettre tout dans un tableau VBA
    TabData = zone.Value
    
    For i = LBound(TabData, 1) + 1 To UBound(TabData, 1) - 1 'pour toutes les lignes du tableau
        deb = i
        While TabData(i + 1, 5) = TabData(deb, 5)
            For j = 8 To 17
                TabData(deb, j) = TabData(deb, j) & "-" & TabData(i + 1, j)
                TabData(i + 1, j) = ""
            Next j
            i = i + 1
        Wend
    Next i
End With
With Sheets("Feuil2")
    .Range("A1").Resize(UBound(TabData, 1), UBound(TabData, 2)) = TabData
    .Range("A1").Resize(UBound(TabData, 1), UBound(TabData, 2)).Columns(8).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With

End Sub
 

donatello2

XLDnaute Nouveau
Un énorme merci pour cette proposition qui répond à ma demande !

Par simple curiosité, est-il possible via VBA dans un programme de ce genre d'effectuer une mise en forme des données qui vont être travaillées ?

Merci encore, passée une bonne journée.

Cordialement
 

vgendron

XLDnaute Barbatruc
oui, c'est tout à fait possible

utilise l'enregistreur de macro pour avoir un début de code
1) tu lances l'enregistreur (onglet Développeur)
2) tu appliques toutes te mises en forme
3) tu arretes l'enregistreur

et tu postes le fichier
on regardera le code pour le nettoyer et le rendre "dynamique"
 

Discussions similaires

Statistiques des forums

Discussions
314 704
Messages
2 112 060
Membres
111 410
dernier inscrit
yomeiome