Concaténer et sommer des cellules dans une nomenclature

Bonjour

Je suis débutant sur VBA. Je cherche dans une feuille qui contient une nomenclature à réunir des lignes si 2 cellules de ces lignes sont identiques.

Voir l'exemple ci-dessous. B3=B4 & E1=E2 je souhaite conserver une seule ligne ou je somme les quantités C2+C3 et concatène D2,D3.

J'ai trouvé du code mais qui ne me donne que partiellement satisfaction.

Je souhaite ajouter cette partie de code à une macro VBA qui me fait un certain nombre de traitement sur cette nomenclature

Merci d'avance pour votre aide

image
5exemple.xlsx (10.65 Ko)

Bonjour,

et Child Number, Quantity, Reference_Designator ?
eric

Bonjour,

Bon c'est une première pour moi sur ce genre de formule, il y a probablement plus optimisé, donc en attendant la solution d'eriiic, en partant sur une base structurée nommée BDD :

Sub NET()
Dim L%, I%
With ActiveSheet
    For L = .Cells(.Rows.Count, 1).End(xlUp).Row To 2 Step -1
        If Application.Evaluate("=SUMPRODUCT((BDD[Child Number]=""" & .Cells(L, 2) & """)*(BDD[Find_Number]=" & .Cells(L, 5) & "))") > 1 Then
            I = Application.Evaluate("=MATCH(""" & .Cells(L, 2) & .Cells(L, 5) & """,BDD[Child Number]&BDD[Find_Number],0)") + 1
            .Cells(I, 4) = .Cells(I, 4) & "," & .Cells(L, 4)
            .Cells(L, 4).EntireRow.Delete
        End If
    Next L
End With
End Sub

Cdlt,

Edit : @eriiic, il faut vraiment que j'apprenne à maîtriser à manipuler les arrays ... Ta solution est bien plus propre !

Edit 2 : J'ai étudié un peu, par contre si les lignes devant être rassemblées, alors elles ne se fusionnent pas dans ton schéma. Dans le mien si, mais il est vrai que ce n'était pas spécifié. Peut être un .sort à faire avant .. A l'auteur de préciser son besoin.

et ma proposition.
Je préfère mettre dans une nouvelle feuille, au moins le temps que tu contrôles sur plus de cas.
eric

14exemple.xlsm (21.80 Ko)

Bonjour merci pour vos réponses je regarde ça ASAP et vous tiens au courant.

Bonjour,

par contre si les lignes devant être rassemblées, alors elles ne se fusionnent pas dans ton schéma

Que veux-tu dire ergotamine ?
Les 2 lignes à fusionner le sont.
Maintenant comme c'est le seul cas mis par le demandeur, je n'ai pas recherché sur d'autres cas particuliers...
eric

Bonjour eriiic,

Désolé il se faisait tard et j'ai eu des approximations dans mes explications. J'ai essayé de comprendre le code, et si j'ai bien vu (excuse moi dans le cas contraire) si deux lignes a "concatener" ne sont pas les unes à la suite de l'autre donc pas exemple ligne 4 échangée avec ligne 6, alors l'égalité initié par la ligne de code suivante ne sera plus trouvée et donc la concaténation ne se fera plus :

If datas(lig, 2) = datas(lig + 1, 2) And datas(lig, 5) = datas(lig + 1, 5) Then

Ou je suis dans le faux ?

Après comme tu as dit, le besoin n'était pas spécifié, dans le cas fourni comme ça ça fonctionne impec !

Cdlt,

Ah oui, tout à fait. Les lignes doivent être triées comme sur l'exemple fourni.
Maintenant s'il n'a fourni qu'un cas particulier, c'est qu'il faisait son affaire du cas général

Bonjour

Encore merci pour vos retours

@eriiic : J' ai testé le code et cela fonctionne parfaitement.

@Ergotamine : La remarque concernant les lignes à la suite est très judicieuse car mon exemple était un peu trop parfait.Elles peuvent être réparties n'importe ou dans mon fichier.Je ne faisais qu'un tri sur le "child number" , j' ai modifié le tri sur "child number + Quantity"

J’espère n'avoir pas omis d'autres cas de figures

Dans ce cas je peux avoir :

image

et le résultat final me donne bien :

image

Il faut que j' ajoute un message qui me donnerait les lignes concaténées et un tri alphabétique des cellules concaténées éventuellement

@ Ergotamine : Lorsque je lance ton code ça plante sur le If

image image

Bonjour,

Comme je l'ai dit il faut travailler sur une table structurée nommée BDD car ça me permet d'avoir des plages dynamiques de recherche pour ne pas ralentir trop le code : Sélectionnez votre tableau > Insertion dans le bandeau du haut d'EXCEL > Tableau (mes données contiennent des en têtes) > OK > Cliquez sur une des cellules du tableau > Creation (outil de tableau) dans le bandeau du haut > Dans le champs nom du tableau inscrivez BDD.

Si vous souhaitez un modèle, prenez le fichier que j'ai joint dans mon premier message.

image

Cdlt,

ok

J 'ai crée le tableau comme indiqué et modifier la boucle For pour s'arrêter à ligne 3 car j'ai des cellules vides en ligne 2 et ligne 3.

Si la macro concatène bien les cellules en colonne D , elle ne somme pas par contre les cellules de la colonne C

Si joint le fichier complet avant traitement.

2bdd.xlsx (25.24 Ko)

Bonjour,

En effet j'ai oublié une condition c'est de ma faute désolé. Ci-contre le code corrigé, j'ai rajouté une condition d'exclusion sur les cellules vides en colonne E :

Sub NET()
Dim L%, I%
With ActiveSheet
    For L = .Cells(.Rows.Count, 1).End(xlUp).Row To 2 Step -1
        If Not IsEmpty(.Cells(L, 5)) Then
            If Application.Evaluate("=SUMPRODUCT((BDD[Child Number]=""" & .Cells(L, 2) & """)*(BDD[Find_Number]=" & .Cells(L, 5) & "))") > 1 Then
                I = Application.Evaluate("=MATCH(""" & .Cells(L, 2) & .Cells(L, 5) & """,BDD[Child Number]&BDD[Find_Number],0)") + 1
                .Cells(I, 4) = .Cells(I, 4) & "," & .Cells(L, 4)
                .Cells(I, 3) = .Cells(I, 3) + .Cells(L, 3)
                .Cells(L, 4).EntireRow.Delete
            End If
        End If
    Next L
End With
End Sub

Cdlt,

Bonjour

les 2 macros me donnent satisfaction.

Dans un cas je ne suis pas obligé de trier le fichier mais créer un tableau et le supprimer ensuite.

Sub Créer_tableau()

Dim Derniereligne
Derniereligne = Cells(Rows.Count, 1).End(xlUp).Row

ActiveSheet.ListObjects.Add(xlSrcRange, Range("A1:F" & Derniereligne), , xlYes).Name = "BDD"
Range("BDD[#All]").Select
ActiveSheet.ListObjects("BDD").TableStyle = ""

Call NET
'reconvertit le tableau en cellules simples en gardant la présentation
Worksheets("BOM").ListObjects("BDD").Unlist
End Sub


Le résultat est également plus lisible

image



Rechercher des sujets similaires à "concatener sommer nomenclature"