Concatenation de plusieurs lignes avec condition

bonjour a tous

tout d'abord je suis tout nouveau inscrit sur le forum même si je le consulte régulièrement

ma connaissance d'excel se limite a quelques formules et un peu de macro

après plusieurs heures a chercher sur les forum je me suis décider a m'inscrire et a poster ma demande

changeant de logiciel erp je doit récupérer mes données exportées sur excel

mon ancien logiciel exporte les libelles par tranche de 20 caractères par ligne

le but est de concaténer ces lignes en une seule cellule sous condition du mème code article

colonne E = code article

colonne I = libellés a concaténer

si je ne suis pas assez clair n’hésiter pas a me demander des explications supplémentaires

merci d'avance pour pour votre aide

en espérant ne pas avoir été trop long sur ce post (pas l’habitude)

Bonjour,

Testes ceci pour voir.

Le résultat de la concaténation sera inscrit en colonne E et i sous le tableau :

Sub Test()

    Dim Dico As Object
    Dim Cle As Variant
    Dim Plage As Range
    Dim Cel As Range
    Dim I As Long

    Set Dico = CreateObject("Scripting.Dictionary")

    'défini la plage sur la colonne E
    With Worksheets("Anciennes_donnees"): Set Plage = .Range(.Cells(2, 5), .Cells(.Rows.Count, 5).End(xlUp)): End With

    'concatène en fonction du code article
    For Each Cel In Plage: Dico(Cel.Value) = Dico(Cel.Value) & " " & Cel.Offset(, 4).Value: Next Cel

    'inscrit le résultat deux lignes en dessous de la colonne des libellés (colonne I)
    I = Plage.Count + 2

    For Each Cle In Dico.Keys

        I = I + 1
        With Worksheets("Anciennes_donnees")

            .Cells(I, 9).Value = Dico(Cle)
            .Cells(I, 5).Value = Cle

        End With

    Next Cle

End Sub

bonjour Theze :

géniale merci pour ta réponse aussi rapide

je viens de tester le code et cela marche du tonner

j'ai fait des essais avec plus de ligne d'importation et cela marche de la même manière

a savoir que en gros j'aurai autour de 10000 lignes

le seul bémol s'est la présentation

si j’osai je te ferai une demande supplémentaires pour plus de clarté sur le fichier

ci joint le fichier après la macro et un copié collé a l'emplacement idéale pour la concaténation

encore merci et si cela t’embête de trop ce n'est pas grave je ferai avec ce qui est déjà formidable

Re,

A tester :

Sub Test()

    Dim Dico As Object
    Dim Cle As Variant
    Dim Plage As Range
    Dim Cel As Range
    Dim Adr As String

    Set Dico = CreateObject("Scripting.Dictionary")

    With Worksheets("Anciennes_donnees")

        'défini la plage sur la colonne E...
        Set Plage = .Range(.Cells(2, 5), .Cells(.Rows.Count, 5).End(xlUp))
        '...et vide la colonne J
        .Columns(10).Clear

    End With

    'concatène en fonction du code article
    For Each Cel In Plage

        'si le code article n'existe pas encore, stocke en début de texte l'adresse
        'de la cellule située en colonne J décalée d'une ligne vers le haut
        '(code article en E2, mémorise J1) sinon, concatène
        If Dico.exists(Cel.Value) = False Then

            Adr = "<" & Cel.Offset(-1, 5).Address(0, 0) & ">"
            Dico(Cel.Value) = Adr & Cel.Offset(, 4).Value

        Else

            Dico(Cel.Value) = Dico(Cel.Value) & " " & Cel.Offset(, 4).Value

        End If

    Next Cel

    'inscrit le résultat en colonne J
    For Each Cle In Dico.Keys

        'extrait l'adresse de la cellule où doit être mis le résultat de la concaténation
        Adr = Split(Dico(Cle), ">")(0)
        Adr = Right(Adr, Len(Adr) - 1)

        'inscrit le texte et mets le retour à la ligne automatique
        With Worksheets("Anciennes_donnees")

            .Range(Adr).Value = Split(Dico(Cle), ">")(1)
            .Range(Adr).WrapText = True

        End With

    Next Cle

End Sub

génial

encore merci ton travail va me faire gagner un sacré temps

maintenant je n' hésiterai plus a poster une demande si je galère de trop

a plus tard peut être

Bonjour,

Content de t'avoir aidé

Rechercher des sujets similaires à "concatenation lignes condition"