Concatener sous conditions

Résolu/Fermé
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017
-
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017
-
Bonjour,


Je cherche à afficher via une formule Excel une concaténation de valeurs, mais en respectant certaines conditions.
Mon algo serait quelque chose comme ceci : pour une feuille avec les colonnes A et B valorisées, concaténer dans la colonne C les valeurs de la colonne B, à condition que
- la valeur de la colonne A soit la même que dans la ligne active
- il s'agisse de la première occurrence de la valeur A dans la ligne active. Sinon, afficher "NA"

J'ai joint une copie écran exemple, car j'ai conscience que ma question peut manquer de clarté.
J'ai trituré les formules que je connais dans tous les sens, sans résultat. Tout ce que j'obtiens est très lourd et pas franchement convaincant.
Je n'ai rien trouvé non plus sur le net. Toutes les solutions proposées passent par le VBA, que je préfèrerais éviter parce que je le maîtrise mal et que j'aurais donc plus de difficultés à le maintenir.

Quelqu'un aurait-il une idée ?
Merci d'avance pour votre aide !

A voir également:

2 réponses

Messages postés
1263
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
15 mai 2017
574
Bonjour,

Le procédé décrit sur
http://gerard.g.pagesperso-orange.fr/logexl_08.htm#RechVTous
passe par VBA mais uniquement pour enregistrer une formule personnalisée.
Ensuite la procédure est identique à l'usage des fonctions.

Cordialement.
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017
54
Magnifique ! Ca a l'air de fonctionner !
Je vérifie tout ça en détail dans la journée avant de clore mon ticket. Merci !!
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017
54
Re bonjour g,

Ca marche nickel, je suis ravie :)

Il me reste deux dernières questions : saurais-tu comment modifier le code VBA de façon à ce que la dernière occurrence du séparateur ne soit pas affichée ?

Et y aurait-il une possibilité pour que ce rechVtous ne renvoie de résultat que pour la première valeur de la colonne A, afin d'éviter les doublons ?
Messages postés
13353
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
27 janvier 2022
2 330 >
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017

Bonjour à vous deux

1) que veux tu dire par de façon à ce que la dernière occurrence du séparateur ne soit pas affichée : que le dernier - n'apparaisse pas ? ce qui dans ton exemple donnerait A - D - H - KN ?

2) Pour éviter les doublons tu peux mettre dans ta formule la condition qu’il s'agit bien de la 1ere valeur rencontrée (en décomptant avec un NB.SI) pour appliquer la fonction personnalisée , exemple :
=SI(NB.SI($A$2:A2;A2)=1;RechVTous(A2;$A$2:$A$24;$B$2:$B$24;"/");"NA")

Cdlmnt
Via
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017
54
Bonjour à tous les deux, Via et g,

Merci pour vos réponses.
En fait dans la version actuelle, j'ai un résultat comme celui-ci : A - D - H - K - N -

C'est le dernier tiret que j'aurais voulu supprimer.
Je regarde vos deux propositions au plus vite et je vous tiens au courant.

Merci !
Messages postés
13353
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
27 janvier 2022
2 330 >
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017

Bonjour

Normalement la dernière ligne de la macro RechVTous = Left(temp, Len(temp) - 1) supprime le dernier séparateur en ne gardant que les caractères avant le dernier de la chaine

S'il reste un séparateur c'est que une cellule de la colonne B est vide ou contient un ou des espaces
Essaie alors de rajouter ces lignes en fin de macro juste avant le End Function :
For n = Len(RechVTous) To 1 Step -1
If Right(RechVTous, 1) = separateur Or Right(RechVTous, 1) = " " Then
RechVTous = Left(RechVTous, Len(RechVTous) - 1)
Else: Exit For
End If
Next
>

Cdlmnt
Via
Messages postés
1263
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
15 mai 2017
574
Bonsoir,

Je n'ai peut-être pas compris ton souhait, mais il me semble qu'en renseignant les arguments de la fonction comme ci-dessous, il n'y a pas de doublons :



Cordialement.
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017
54
Coucou g

J'ai répondu dans le fil de ton premier commentaire :)
Messages postés
1263
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
15 mai 2017
574 >
Messages postés
341
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
6 mars 2017

No problème...