Filtre avec concatenation

egman

XLDnaute Occasionnel
Bonjour à tout le forum,

J'ai 2 colonnes A et B
J'ai des valeurs en A associées aux valeurs en B
En colonne A j'ai plusieurs valeurs identiques associées à des valeurs différentes en B => je voudrai ne conserver qu'une seule occurrence de mes valeurs communes en A par contre en B j'aimerai concaténer toutes les valeurs qui étaient associées auparavant à la colonne A.

je vous joint un petit fichier car c'est pas très facile à expliquer.

si vous aviez des idées pour m'aiguiller sur la marche à suivre.
Également si je pouvais faire çà en vba ce serait bien car cette manip est à inclure parmi d'autres macro.

d'avance MERCI à vous
 

Pièces jointes

  • FiltreConcatenation.xls
    15 KB · Affichages: 92

CISCO

XLDnaute Barbatruc
Re : Filtre avec concatenation

Bonjour

Pour ce qui est de la colonne E, tu peux faire avec :
Code:
=SI(LIGNES(E$1:E1)>SOMME(1/NB.SI(A$2:A$9;A$2:A$9));"";INDEX(A$1:A$9;MIN(SI(NB.SI(E$1:E1;A$2:A$9)=0;LIGNE(A$2:A$9)))))
en matriciel (ctrl+maj+entrer)

J'imagine que ton fichier réel à beaucoup plus de lignes ?

@ plus
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Filtre avec concatenation

Bonjour Egman, Cisco, bonjour le forum,

Une proposition VBA :
Code:
Sub Macro1()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim x As Integer 'déclare la variable x (incrément)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim tv() As Variant 'déclare le tableau de variables indexées tv (Tableau de Variables)
 
With Sheets("Feuil1 (2)") 'prend en compte l'onglet "Feuil1 (2)"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne dl
    Set pl = .Range("A2:A" & dl) 'définit la plage pl
    For Each cel In pl 'boucle 1 : sur toutes les cellules de la plage pl
        Erase tv: x = 0 'initialise le tableau tv, initialise la variable x
        If Application.WorksheetFunction.CountIf(pl, cel.Value) > 1 Then 'condition 1 : le le nombre d'occurrences de la cellule cel est supérieur à 1
            Set r = pl.Find(cel.Value, .Cells(dl, 1), xlValues, xlWhole) 'définit la recherche r
            If Not r Is Nothing Then 'condition 2 : si il existe au moins une ocurrence
                pa = r.Address 'définit la première adresse pa
                Do 'exécute
                    ReDim Preserve tv(1, x) 'redimentionne le tableau tv
                    tv(0, x) = r.Row 'récupère en colonne 0 ligne x du tableau le numéro de ligne de r
                    tv(1, 0) = tv(1, 0) & r.Offset(0, 1).Value & "-" 'récupère en colonne 1, ligne 0 du tableau la valeur concaténée de la cellule adjacente à r
                    x = x + 1 'incrément x de +1
                    Set r = pl.FindNext(r) 'redéfinit la recherche r (recherche suivante)
                Loop While Not r Is Nothing And r.Address <> pa 'boucle tnant qu'il existe de occurrences ailleurs qu'en pa
            End If 'fin de la condition 2
            For x = UBound(tv, 2) To 1 Step -1 'boucle 2 : inversée sur toutes les valeurs du tableau tv (sauf la première)
                Rows(tv(0, x)).Delete 'supprime la ligne
            Next x 'prochaine valeur de la boucle 2
            .Cells(tv(0, 0), 2).Value = Left(tv(1, 0), Len(tv(1, 0)) - 1) 'place la valeur concaténée
        End If 'fin de la condition 1
        dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'redéfinit la dernière ligne dl
        Set pl = .Range("A2:A" & dl) 'redéfinit la plage pl
    Next cel 'prochaine cellule de la boucle 1
End With 'fin de la prise en compte de ...
End Sub
 

egman

XLDnaute Occasionnel
Re : Filtre avec concatenation

Bonjour CISCO

Merci pour ta réponse
Effectivement j'ai beaucoup plus de lignes :eek:)
Par contre j'ai bien ta formule en colonne E sur ma feuille en matriciel....mais je ne vois rien se passer ! ! !
Je comprend pas très bien...avec ta formule tu cherches à faire la somme des valeurs identiques dans la colonne...c'est çà ?

Je vais essayer de comprendre ce qui "couac"

A+
 

egman

XLDnaute Occasionnel
Re : Filtre avec concatenation

Bonjour Robert,

C'est exactement ce que je recherchais un grand MERCI.
J'avoue ne pas tout comprendre dans ton code mais cela va m'enlever une grosse épine du pied car j'ai beaucoup de lignes à trier.
Encore MERCI pour votre votre temps passé à nous aider.

A+
 

CISCO

XLDnaute Barbatruc
Re : Filtre avec concatenation

Bonjour

Cf. en pièce jointe. Ne pas oublier qu'il s'agit d'une formule matricielle.

En pratique, elle garde en mémoire les n° des lignes des références HD...... de la colonne A non encore affichés en colonne E (avec SI(NB.SI(E$1:E1;A$2:A$9)=0), prend le min de cette liste, par exemple 2, et affiche A2 avec INDEX(A1:A9;2).

Pour mieux comprendre son fonctionnement, sélectionne une cellule contenant la formule. Cliques ensuite sur l'onglet formule, en haut de la feuille, puis sur évaluation de formule.

Malheureusement, je n'ai pas de solution simple avec une formule pour la colonne F.
@ plus
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
185

Statistiques des forums

Discussions
312 305
Messages
2 087 088
Membres
103 461
dernier inscrit
dams94