Concatener si commande en double

Bonjour ,

Dans le cadre de ma gestion de stock

je reçois des commandes avec des numéros de commandes (id), rattachées a un ou des articles (SKU).

12exemple.xlsx (51.48 Ko)

Est il possible de concaténé 2 ou X cellules ( SKU) si un client commande 2 articles ou plus et idéalement supprimer une ou X lignes de la même commande avec 2 ou X articles ;

exemple ci joint pour plus de clarté

Bonjour,

Voici une proposition avec ce code :

Sub concatener()

Set dico = CreateObject("Scripting.dictionary")

With Sheets("Commande")
    dl = .Cells(.Rows.Count, 1).End(xlUp).Row
    For i = 1 To dl
        If Not dico.exists(.Cells(i, 1).Value) Then
            dico(.Cells(i, 1).Value) = .Cells(i, 2).Value
        Else
            dico(.Cells(i, 1).Value) = dico(.Cells(i, 1).Value) & "-" & .Cells(i, 2).Value
        End If
    Next i
End With

With Sheets(2).UsedRange
    .ClearContents
    With .Resize(dico.Count, 1)
        .Value = Application.Transpose(dico.keys)
        .Offset(, 1).Value = Application.Transpose(dico.items)
    End With
End With

End Sub
14exemple.xlsm (60.65 Ko)

Cdlt,

Hello,

une autre proposition

Merci pour ces 2 propositions , j'étudie et vous fait un retour .. Encore merci

@rag02700, je n'arrive pas voir la macro...don difficile de l'adapter

@3GB, c'est exactement ce que cherchais... est il possible d'avoir le résultat sur la même feuille et non pas dans une feuille différente ?

Merci Bcp

Bonjour Totoche,

Voici un essai (pas testé cette fois) sur la même feuille :

Sub concatener()

Set dico = CreateObject("Scripting.dictionary")

With Sheets("Commande")
    dl = .Cells(.Rows.Count, 1).End(xlUp).Row
    For i = 1 To dl
        If Not dico.exists(.Cells(i, 1).Value) Then
            dico(.Cells(i, 1).Value) = .Cells(i, 2).Value
        Else
            dico(.Cells(i, 1).Value) = dico(.Cells(i, 1).Value) & "-" & .Cells(i, 2).Value
        End If
    Next i
    .cells(1, 1).Resize(dl, 2).ClearContents
    .cells(1, 1).Resize(dico.Count, 2).Value = Application.Transpose(array(dico.keys, dico.items))
End With

End Sub

EDIT : Petite modification à l'instant !

Cdlt,

Merci , ca fonctionne mais je n'arrive pas a l'adapter a mon modèle.

Je le joins En PJ , en effaçant les data, mais les colonnes sont OK .

Le numéro de commande en double (ou triple) a tester est la colonne A (id), les cellules a concaténées sont en Colonne R (Ref Fournisseur).

et ensuite supprimer la ligne entière de commande ne contenant pas la concaténation.

Merci

Bonjour,

Ah, ce n'est pas vraiment la même chose .

Voici un essai non testé :

Sub concatener()

Set dico = CreateObject("Scripting.dictionary")

With Sheets("Commande").usedrange.offset(1, 0)
    t = .value
    For i = lbound(t) To ubound(t)
        If Not dico.exists(t(i, 1)) Then
            n = n + 1
            dico(t(i, 1)) = n
            for k = lbound(t, 2) to ubound(t, 2)
                t(n, k) = t(i, k)
            next k
        Else
            't(dico(t(i, 1)), 5) = t(dico(t(i, 1)), 5) & "-" & t(i, 5) '<< colonne E au cas où
            t(dico(t(i, 1)), 18) = t(dico(t(i, 1)), 18) & "-" & t(i, 18) '<< colonne R
        End If
    Next i
    .ClearContents
    .Resize(n, ubound(t, 2)).Value = t
End With

End Sub

On s'en approche, je pense...

Cdlt,

Rechercher des sujets similaires à "concatener commande double"