XL 2013 concaténer tous les résultats

MR.O

XLDnaute Junior
Bonjour,

Je souhaiterais concatener plusieurs données dans une cellule si elle correspondent à une valeur en colonne A.
Ci-joint un exemple,

Merci d'avance pour votre aide,

Cordialement,
 

Pièces jointes

  • CONCATENER SI.xlsx
    14 KB · Affichages: 10

Cousinhub

XLDnaute Barbatruc
Bonjour Mr O. (ou I, "impoli"?)
Dans ce fil, je vous avais proposé une solution (pour la question posée), mais vraisemblablement, vous venez ici, faire vos courses, et "bye"
Pas top, pour le métier exercé....
Edit, à savoir que les données que vous manipulez, peuvent l'être de façon très efficace par le biais de Power Query
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Re-,
Pas de soucis...
Par contre, dans ce nouveau fichier, est-ce que vous pourriez mettre dans le 2ème onglet les attendus?
Et, si c'est pour traiter le même nombre de données que précédemment, je pense que Power Query pourrait bien vous être utile.
Si je ne me trompe, (et malgré le sous-forum indiqué), votre institution est sous 2016?
 

MR.O

XLDnaute Junior
Merci, je vous joint le résultat escompté dans le fichier, si il existe une autre solution avec Power Query je suis preneur, je ne maîtrise pas cette fonction de base de donnée dans Excel.

Merci @bhbh,

Cordialement
 

Pièces jointes

  • CONCATENER SI.xlsx
    14.5 KB · Affichages: 4

job75

XLDnaute Barbatruc
BonsoirMR.O, bhbh,

Voyez le fichier .xlsm joint et cette fonction VBA :
VB:
Function Concatene(critere, colrecherche As Range, colconcat As Range, separ As String) As String
Dim d As Object, i&
Set colrecherche = Intersect(colrecherche.EntireColumn, colrecherche.Parent.UsedRange.EntireRow)
Set colconcat = Intersect(colconcat.EntireColumn, colconcat.Parent.UsedRange.EntireRow)
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To colrecherche.Rows.Count
    If colrecherche(i) = critere Then
        If colconcat(i) <> "" And Not d.exists(colconcat(i).Value) Then
            d(colconcat(i).Value) = ""
            Concatene = Concatene & separ & colconcat(i)
        End If
    End If
Next
Concatene = Mid(Concatene, Len(separ) + 1)
End Function
Le code doit être placé impérativement dans un module standard.

A+
 

Pièces jointes

  • CONCATENER SI(1).xlsm
    23.1 KB · Affichages: 6

job75

XLDnaute Barbatruc
Bonjour MR.O, le forum,

Cette fonction est nettement plus rapide car elle utilise des tableaux VBA :
VB:
Function Concatene(critere, colrecherche As Range, colconcat As Range, separ As String) As String
Dim R As Range, tablo1, tablo2, d As Object, i&, x$
Set R = colrecherche.Parent.UsedRange.EntireRow
tablo1 = Intersect(colrecherche.EntireColumn, R).Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
tablo2 = Intersect(colconcat.EntireColumn, R).Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tablo1)
    If tablo1(i, 1) = critere Then
        x = tablo2(i, 1)
        If x <> "" And Not d.exists(x) Then
            d(x) = ""
            Concatene = Concatene & separ & x
        End If
    End If
Next
Concatene = Mid(Concatene, Len(separ) + 1)
End Function
Pour tester j'ai recopié le tableau source A2:J15 sur 210 000 lignes (et rendu la fonction volatile).

Durée du recalcul des 3 formules chez moi sur Win 11 Excel 2019 :

- fichier (1) du post #6 => 7,3 secondes

- ce fichier (2) => 2,2 secondes.

A+
 

Pièces jointes

  • CONCATENER SI(2).xlsm
    23.3 KB · Affichages: 7

MR.O

XLDnaute Junior
Bonjour @bhbh,

Depuis votre conseil j'ai commencé à me former à power query, c'est beaucoup plus rapide !!!
Par contre pour faire la même chose que demandé dans ce sujet, je coince, est ce que vous pouvez m'aider ? je crois qu'il faut mettre des formules dans la requête mais je n'ai pas encore compris cette logique.

Merci d'avance,

Cordialement
 

Cousinhub

XLDnaute Barbatruc
Bonjour,
Désolé, j'avais arrêté mes travaux sur ce fichier...
Voici donc une solution PQ, il manque juste la colonne RACE ISC, ne sachant comment elle se remplit..
Regarde dans l'éditeur avancé de l'éditeur PQ, le but est de Grouper By, et ici, j'ai concaténé pour n'en faire qu'un groupage.
Bonne découverte de PQ, et bon W-E surtout...
PS, j'ai modifié les 2 dernières lignes de la base pour vérification.
 

Pièces jointes

  • CONCATENER SI-V2.xlsx
    25.2 KB · Affichages: 4

Statistiques des forums

Discussions
311 709
Messages
2 081 756
Membres
101 812
dernier inscrit
trufu