XL 2010 Concatener avec séparateurs et selon conditions de texte

Bartman

XLDnaute Nouveau
Bonjour tout le monde,

Je fais à nouveau appel à vos services car je bloque sur une formule de concaténation.
upload_2019-1-26_8-59-54.png


Sur l'exemple : je dois en AL2 concatener toutes les cellules qui sont de AL3 à AL10 en les séparant par un "|"
Cette plage (AL3 à AL10) doit être définie par la colonne I. A savoir qu'il faut concatener toutes les lignes dont le SKU contient le SKU de I2 et ainsi de suite

Dans mon fichier, tous les SKU qui ne contiennent que 5 chiffres n'ont pas d'attribut (AL) et je dois les compléter automatiquement.
Le fichier étant assez lourd, je ne peux pas le faire manuellement pour chaque ligne
L'idée étant de filtrer mon fichier sur la colonne AL sur toutes les lignes vides et d'y mettre une formule qui ira chercher les infos

J'avais réussi via une fonction à concaténer les résultats et mettre des séparateurs pour une ligne (voir 1ère ligne ci-dessous "01715")
upload_2019-1-26_9-8-14.png


Seulement je suis obligé de définir une plage dans la formule et la plage n'est pas conditionnée au SKU

Auriez-vous une solution?

En pièce jointe, un fichier contenant uniquement les colonnes concernées

D'avance un grand merci
 

Pièces jointes

  • upload_2019-1-26_8-58-44.png
    upload_2019-1-26_8-58-44.png
    21.1 KB · Affichages: 13
  • Classeur1.xlsm
    8.6 KB · Affichages: 11

Bartman

XLDnaute Nouveau
Nickel!!!
Merci @vgendron :)
Par contre, pourquoi, la concaténation commence par un symbole "pipe"?
Au final ce n'est pas bien car je crée une colonne supplémentaire et j'extrais le premier caractère puis je refais un copier coller de valeurs.
Mais comment je peux faire pour dire à la formule que le résultat ne doit pas commencer par un "pipe"?

D'avance je vous en remercie :)
 

vgendron

XLDnaute Barbatruc
Hello
je sais pas pourquoi. mais je m'y attendais :-D

Code:
Public Function SkuTaille(sku As Range, zone As Range)
If Len(sku) <> 5 Then
    SkuTaille = sku.Offset(0, 1)
    Exit Function
End If
For Each ele In zone
    If ele Like sku & "*" And ele <> sku Then
        SkuTaille = SkuTaille & "|" & ele.Offset(0, 1)
    End If
Next ele
If Left(SkuTaille, 1) = "|" Then SkuTaille = Right(SkuTaille, Len(SkuTaille) - 1)
End Function
 

Discussions similaires

Réponses
9
Affichages
308

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 942
Membres
101 849
dernier inscrit
florentMIG