XL 2016 concatener lignes et colonnes dans une cellule texte selon criteres

grouchnak

XLDnaute Nouveau
Bonjour a tous,
J ai 4 colonnes comme suit ( séparateur ;):
1;objet1;valeur1;pays1
1;objet2;valeur2;pays2
1;objet3;valeur3;pays3
2;objet4;valeur4;pays4
2;objet5;valeur5;pays5

Et j aimerais avoir 5 colonnes comme suit:
1;objet1;valeur1;pays1;objet1 (valeur1/pays1) objet2 (valeur2/pays2) objet3 (valeur3/pays3)
1;objet2;valeur2;pays2
1;objet3;valeur3;pays3
2;objet4;valeur4;pays4;objet4 (valeur4/pays4) objet5 (valeur5/pays5)
2;objet5;valeur5;pays5

En gros, concaténer ( avec une p'tite mise en forme, ça je sais faire) les contenus de chaque cellule des colonnes 2,3 et 4 pour lesquelles le contenu de la colonne 1 est identique, dans la colonne 5, une seule fois quand le nombre en colonne 1 change..

J arrive a le faire en VBA , mais est ce possible avec une formule , en utilisant SI(), NB.SI(), et d autres fonctions par exemple?

Merci par avances pour vos réponses!
 

grouchnak

XLDnaute Nouveau
Hello a tous,
Bon j'ai fini par trouver une solution, uniquement en formules sans macros... mais j'ai plusieurs soucis:
(1) ce n'est pas dynamique, car pour que cela fonctionne il faut recopier n fois la formule de base en incrémentant des nombres, n etant le nombre d objet par caisse...
(2) si j'ajoute un objet dans une caisse, il faut modifier les plages dans les noms "Caisses", "Objets","Valeurs" et "Origines", puis recalculer la feuille
(3) si j'insere une ligne au dessus de la 2, tout se decale et ca ne marche plus

peut etre peut on rendre cette formule dynamique? je seche...
Oui, je sais, c'est moche... et y a d'autres moyens d'y arriver ... mais je cherche une solution en formules pures...

la formule magique:

Enrichi (BBcode):
=SI(NB.SI(Caisses;$A2)>=1;INDEX(Objets;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Objets));1)-1) & " (" & INDEX(Valeurs;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Valeurs));1)-1) &  "/" & INDEX(Origines;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Origines));1)-1) & ")";)&
SI(NB.SI(Caisses;$A2)>=2;CAR(10)&INDEX(Objets;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Objets));2)-1)& " (" & INDEX(Valeurs;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Valeurs));2)-1) &  "/" & INDEX(Origines;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Origines));1)-1) & ")";)&
SI(NB.SI(Caisses;$A2)>=3;CAR(10)&INDEX(Objets;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Objets));3)-1)& " (" & INDEX(Valeurs;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Valeurs));3)-1) &  "/" & INDEX(Origines;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Origines));1)-1) & ")";)&
SI(NB.SI(Caisses;$A2)>=4;CAR(10)&INDEX(Objets;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Objets));4)-1)& " (" & INDEX(Valeurs;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Valeurs));4)-1) &  "/" & INDEX(Origines;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Origines));1)-1) & ")";)&
SI(NB.SI(Caisses;$A2)>=5;CAR(10)&INDEX(Objets;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Objets));5)-1)& " (" & INDEX(Valeurs;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Valeurs));5)-1) &  "/" & INDEX(Origines;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Origines));1)-1) & ")";)&
SI(NB.SI(Caisses;$A2)>=6;CAR(10)&INDEX(Objets;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Objets));6)-1)& " (" & INDEX(Valeurs;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Valeurs));6)-1) &  "/" & INDEX(Origines;PETITE.VALEUR(SI(Caisses=$A2;LIGNE(Origines));1)-1) & ")";)

Le fichier joint contient ce a quoi je suis arrivé pour le moment...
 

Pièces jointes

  • concatenation lignes colonnes dans 1 cellule.xlsx
    18.1 KB · Affichages: 5

JHA

XLDnaute Barbatruc
Bonjour à tous,

Un essai avec joindre texte
VB:
=SI(NB.SI($A$2:$A2;$A2)=1;JOINDRE.TEXTE(" ";VRAI;SI($A$2:$A$17=$A2;$B$2:$B$17&" "&"("&$C$2:$C$17&"/"&$D$2:$D$17&")";""));"")

JHA
 

Pièces jointes

  • concatenation lignes colonnes dans 1 cellule.xlsm
    21.7 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
315 091
Messages
2 116 109
Membres
112 662
dernier inscrit
lou75